Merge tag 'riscv-for-linus-5.14-mw0' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / iio / light / ltr501.c
index b4323d2..1830221 100644 (file)
 #define LTR501_PART_ID 0x86
 #define LTR501_MANUFAC_ID 0x87
 #define LTR501_ALS_DATA1 0x88 /* 16-bit, little endian */
+#define LTR501_ALS_DATA1_UPPER 0x89 /* upper 8 bits of LTR501_ALS_DATA1 */
 #define LTR501_ALS_DATA0 0x8a /* 16-bit, little endian */
+#define LTR501_ALS_DATA0_UPPER 0x8b /* upper 8 bits of LTR501_ALS_DATA0 */
 #define LTR501_ALS_PS_STATUS 0x8c
 #define LTR501_PS_DATA 0x8d /* 16-bit, little endian */
+#define LTR501_PS_DATA_UPPER 0x8e /* upper 8 bits of LTR501_PS_DATA */
 #define LTR501_INTR 0x8f /* output mode, polarity, mode */
 #define LTR501_PS_THRESH_UP 0x90 /* 11 bit, ps upper threshold */
 #define LTR501_PS_THRESH_LOW 0x92 /* 11 bit, ps lower threshold */
@@ -149,7 +152,7 @@ struct ltr501_chip_info {
 struct ltr501_data {
        struct i2c_client *client;
        struct mutex lock_als, lock_ps;
-       struct ltr501_chip_info *chip_info;
+       const struct ltr501_chip_info *chip_info;
        u8 als_contr, ps_contr;
        int als_period, ps_period; /* period in micro seconds */
        struct regmap *regmap;
@@ -406,18 +409,19 @@ static int ltr501_read_als(const struct ltr501_data *data, __le16 buf[2])
 
 static int ltr501_read_ps(const struct ltr501_data *data)
 {
-       int ret, status;
+       __le16 status;
+       int ret;
 
        ret = ltr501_drdy(data, LTR501_STATUS_PS_RDY);
        if (ret < 0)
                return ret;
 
        ret = regmap_bulk_read(data->regmap, LTR501_PS_DATA,
-                              &status, 2);
+                              &status, sizeof(status));
        if (ret < 0)
                return ret;
 
-       return status;
+       return le16_to_cpu(status);
 }
 
 static int ltr501_read_intr_prst(const struct ltr501_data *data,
@@ -735,7 +739,7 @@ static int ltr501_write_raw(struct iio_dev *indio_dev,
 {
        struct ltr501_data *data = iio_priv(indio_dev);
        int i, ret, freq_val, freq_val2;
-       struct ltr501_chip_info *info = data->chip_info;
+       const struct ltr501_chip_info *info = data->chip_info;
 
        ret = iio_device_claim_direct_mode(indio_dev);
        if (ret)
@@ -1082,7 +1086,7 @@ static ssize_t ltr501_show_proximity_scale_avail(struct device *dev,
                                                 char *buf)
 {
        struct ltr501_data *data = iio_priv(dev_to_iio_dev(dev));
-       struct ltr501_chip_info *info = data->chip_info;
+       const struct ltr501_chip_info *info = data->chip_info;
        ssize_t len = 0;
        int i;
 
@@ -1104,7 +1108,7 @@ static ssize_t ltr501_show_intensity_scale_avail(struct device *dev,
                                                 char *buf)
 {
        struct ltr501_data *data = iio_priv(dev_to_iio_dev(dev));
-       struct ltr501_chip_info *info = data->chip_info;
+       const struct ltr501_chip_info *info = data->chip_info;
        ssize_t len = 0;
        int i;
 
@@ -1184,7 +1188,7 @@ static const struct iio_info ltr301_info = {
        .write_event_config     = &ltr501_write_event_config,
 };
 
-static struct ltr501_chip_info ltr501_chip_info_tbl[] = {
+static const struct ltr501_chip_info ltr501_chip_info_tbl[] = {
        [ltr501] = {
                .partid = 0x08,
                .als_gain = ltr501_als_gain_tbl,
@@ -1205,7 +1209,7 @@ static struct ltr501_chip_info ltr501_chip_info_tbl[] = {
                .als_gain_tbl_size = ARRAY_SIZE(ltr559_als_gain_tbl),
                .ps_gain = ltr559_ps_gain_tbl,
                .ps_gain_tbl_size = ARRAY_SIZE(ltr559_ps_gain_tbl),
-               .als_mode_active = BIT(1),
+               .als_mode_active = BIT(0),
                .als_gain_mask = BIT(2) | BIT(3) | BIT(4),
                .als_gain_shift = 2,
                .info = &ltr501_info,
@@ -1354,9 +1358,12 @@ static bool ltr501_is_volatile_reg(struct device *dev, unsigned int reg)
 {
        switch (reg) {
        case LTR501_ALS_DATA1:
+       case LTR501_ALS_DATA1_UPPER:
        case LTR501_ALS_DATA0:
+       case LTR501_ALS_DATA0_UPPER:
        case LTR501_ALS_PS_STATUS:
        case LTR501_PS_DATA:
+       case LTR501_PS_DATA_UPPER:
                return true;
        default:
                return false;