iio: light: cm32181: Make lux_per_bit and lux_per_bit_base_it runtime settings
authorHans de Goede <hdegoede@redhat.com>
Tue, 28 Apr 2020 17:29:21 +0000 (19:29 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 10 May 2020 09:46:02 +0000 (10:46 +0100)
Make lux_per_bit and lux_per_bit_base_it settings stored in struct
cm32181_chip instead of a hardcoded (defined) values.

This is a preparation patch for reading some ACPI tables which specify
a device specific lux_per_bit value.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/light/cm32181.c

index 84c8d3144d03d5c6036b97bd8457bc64821b2647..a5deb0750313b9204e23b169bfb4c4f0cb9ccade 100644 (file)
@@ -70,6 +70,8 @@ struct cm32181_chip {
        u16 conf_regs[CM32181_CONF_REG_NUM];
        unsigned long init_regs_bitmap;
        int calibscale;
+       int lux_per_bit;
+       int lux_per_bit_base_it;
        int num_als_it;
        const int *als_it_bits;
        const int *als_it_values;
@@ -115,6 +117,8 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181)
                        CM32181_CMD_ALS_IT_DEFAULT | CM32181_CMD_ALS_SM_DEFAULT;
        cm32181->init_regs_bitmap = BIT(CM32181_REG_ADDR_CMD);
        cm32181->calibscale = CM32181_CALIBSCALE_DEFAULT;
+       cm32181->lux_per_bit = CM32181_LUX_PER_BIT;
+       cm32181->lux_per_bit_base_it = CM32181_LUX_PER_BIT_BASE_IT;
 
        /* Initialize registers*/
        for_each_set_bit(i, &cm32181->init_regs_bitmap, CM32181_CONF_REG_NUM) {
@@ -211,8 +215,8 @@ static int cm32181_get_lux(struct cm32181_chip *cm32181)
        if (ret < 0)
                return -EINVAL;
 
-       lux = CM32181_LUX_PER_BIT;
-       lux *= CM32181_LUX_PER_BIT_BASE_IT;
+       lux = cm32181->lux_per_bit;
+       lux *= cm32181->lux_per_bit_base_it;
        lux = div_u64(lux, als_it);
 
        ret = i2c_smbus_read_word_data(client, CM32181_REG_ADDR_ALS);