summaryrefslogtreecommitdiff
path: root/drivers/iio
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2020-04-28 20:29:19 +0300
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2020-05-10 12:44:01 +0300
commit7574cb1df43c6219f0088d028906f4e15fee702f (patch)
tree59683b1aafb3e5aff09c9ee0b4e64550b83ca2e0 /drivers/iio
parentc1e62062ff5477f3cd40e956fb1c18808cc894a4 (diff)
downloadlinux-7574cb1df43c6219f0088d028906f4e15fee702f.tar.xz
iio: light: cm32181: Change reg_init to use a bitmap of which registers to init
This is a preparation patch for reading some ACPI tables which give init values for multiple registers. 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>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/light/cm32181.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm32181.c
index 84a5e3927558..9a818dce151e 100644
--- a/drivers/iio/light/cm32181.c
+++ b/drivers/iio/light/cm32181.c
@@ -27,7 +27,7 @@
#define CM32181_REG_ADDR_ID 0x07
/* Number of Configurable Registers */
-#define CM32181_CONF_REG_NUM 0x01
+#define CM32181_CONF_REG_NUM 4
/* CMD register */
#define CM32181_CMD_ALS_DISABLE BIT(0)
@@ -54,10 +54,6 @@
#define SMBUS_ALERT_RESPONSE_ADDRESS 0x0c
-static const u8 cm32181_reg[CM32181_CONF_REG_NUM] = {
- CM32181_REG_ADDR_CMD,
-};
-
/* CM3218 Family */
static const int cm3218_als_it_bits[] = { 0, 1, 2, 3 };
static const int cm3218_als_it_values[] = { 100000, 200000, 400000, 800000 };
@@ -72,6 +68,7 @@ struct cm32181_chip {
struct i2c_client *client;
struct mutex lock;
u16 conf_regs[CM32181_CONF_REG_NUM];
+ unsigned long init_regs_bitmap;
int calibscale;
int num_als_it;
const int *als_it_bits;
@@ -116,12 +113,13 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181)
/* Default Values */
cm32181->conf_regs[CM32181_REG_ADDR_CMD] =
CM32181_CMD_ALS_IT_DEFAULT | CM32181_CMD_ALS_SM_DEFAULT;
+ cm32181->init_regs_bitmap = BIT(CM32181_REG_ADDR_CMD);
cm32181->calibscale = CM32181_CALIBSCALE_DEFAULT;
/* Initialize registers*/
- for (i = 0; i < CM32181_CONF_REG_NUM; i++) {
- ret = i2c_smbus_write_word_data(client, cm32181_reg[i],
- cm32181->conf_regs[i]);
+ for_each_set_bit(i, &cm32181->init_regs_bitmap, CM32181_CONF_REG_NUM) {
+ ret = i2c_smbus_write_word_data(client, i,
+ cm32181->conf_regs[i]);
if (ret < 0)
return ret;
}