Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755483AbbEVAb6 (ORCPT ); Thu, 21 May 2015 20:31:58 -0400 Received: from smtp107.biz.mail.bf1.yahoo.com ([98.139.244.55]:33427 "EHLO smtp107.biz.mail.bf1.yahoo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754442AbbEVAbz (ORCPT ); Thu, 21 May 2015 20:31:55 -0400 X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: D2xCSxcVM1nmlAuCSN5dJaucSx6aT3ee3cvnsVEzafT7eEf L16nXTJTcnZOC5OGB5WtNNkd0.she4UsTeWGjasnMjQhhHgCyNk5Oi.nwr7k uh1Rmx.POd5FCWujQyHG9I_9tj8G0u8N3H5QCnSyNUCkptyGXuA8nM_s5OQR NA13iXXxKQjAzx2fr3Vw6LiZTUCwSqgv.G.pCjz7KXPVZ.PFFVJO.SLNBQLB OATJcrQzt99fX75cMoEfZhznr7E4rMpuDQjModhXMQFjB6397_8lBW32LGwD sPcCFV9yrx028lL5SvyZL1PIPLGXoYGDLhhJwxyWliVZabm2ryk17NBu_HBG PzCRtgdpzHyymZ1gJsQ3y_8kdAVn9fPdpjRdBGUIas1vqjdyrsSwYjqYIVrw Q5QZLAZm8ImubYw2O3N.o_eH8C1lAt.VITX7o0_A0Bt2QGffbQhg3zVgHZKh yCz1De.zLAS0aQTI2swXMLsOFO8dXA6KdCdLRv7YlvauDu8v.Ut2yRO36vqe bhRr98MkF1bS_cAuf5tyx X-Yahoo-SMTP: oqiDtsaswBDv2aVUlxVTYPpATqA- From: Kevin Tsai To: Kevin Tsai , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald , Andrew Morton , Greg KH , "David S. Miller" , Mauro Carvalho Chehab , Arnd Bergmann , Joe Perches , Jingoo Han , Daniel Baluta , Roberta Dobrescu , Kuppuswamy Sathyanarayanan Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org Subject: [PATCH 1/6] iio: light: Updated Vishay Capella cm32181 ambient light sensor driver. - Renamed company name. - Removed cm32181_reg. - Removed white space. - Removed unused include files. - Updated macro definitions. - Renamed cm32181_chip pointer to chip. Date: Thu, 21 May 2015 17:30:40 -0700 Message-Id: <1432254645-5349-1-git-send-email-ktsai@capellamicro.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 11475 Lines: 361 Signed-off-by: Kevin Tsai --- Renamed company name. Removed cm32181_reg. Removed white space. Removed unused include files. Updated macro definitions. Renamed cm32181_chip pointer to chip. drivers/iio/light/Kconfig | 4 +- drivers/iio/light/cm32181.c | 126 +++++++++++++++++++++++--------------------- 2 files changed, 67 insertions(+), 63 deletions(-) diff --git a/drivers/iio/light/Kconfig b/drivers/iio/light/Kconfig index a437bad..583aa6a 100644 --- a/drivers/iio/light/Kconfig +++ b/drivers/iio/light/Kconfig @@ -39,11 +39,11 @@ config APDS9300 config CM32181 depends on I2C - tristate "CM32181 driver" + tristate "Vishay Capella CM32181 driver" help Say Y here if you use cm32181. This option enables ambient light sensor using - Capella cm32181 device driver. + Vishay Capella cm32181 device driver. To compile this driver as a module, choose M here: the module will be called cm32181. diff --git a/drivers/iio/light/cm32181.c b/drivers/iio/light/cm32181.c index 5d12ae54..0491d73 100644 --- a/drivers/iio/light/cm32181.c +++ b/drivers/iio/light/cm32181.c @@ -1,19 +1,15 @@ /* - * Copyright (C) 2013 Capella Microsystems Inc. - * Author: Kevin Tsai + * Copyright (C) 2013-2015 Vishay Capella * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2, as published * by the Free Software Foundation. */ -#include -#include #include #include #include #include -#include #include #include #include @@ -21,36 +17,43 @@ /* Registers Address */ #define CM32181_REG_ADDR_CMD 0x00 +#define CM32181_REG_ADDR_ALS_WH 0x01 +#define CM32181_REG_ADDR_ALS_WL 0x02 #define CM32181_REG_ADDR_ALS 0x04 #define CM32181_REG_ADDR_STATUS 0x06 #define CM32181_REG_ADDR_ID 0x07 /* Number of Configurable Registers */ -#define CM32181_CONF_REG_NUM 0x01 +#define CM32181_CONF_REG_NUM 3 /* CMD register */ -#define CM32181_CMD_ALS_ENABLE 0x00 -#define CM32181_CMD_ALS_DISABLE 0x01 -#define CM32181_CMD_ALS_INT_EN 0x02 +#define CM32181_CMD_ALS_DISABLE BIT(0) +#define CM32181_CMD_ALS_INT_EN BIT(1) #define CM32181_CMD_ALS_IT_SHIFT 6 -#define CM32181_CMD_ALS_IT_MASK (0x0F << CM32181_CMD_ALS_IT_SHIFT) +#define CM32181_CMD_ALS_IT_MASK (BIT(6) | BIT(7) | BIT(8) | BIT(9)) #define CM32181_CMD_ALS_IT_DEFAULT (0x00 << CM32181_CMD_ALS_IT_SHIFT) #define CM32181_CMD_ALS_SM_SHIFT 11 -#define CM32181_CMD_ALS_SM_MASK (0x03 << CM32181_CMD_ALS_SM_SHIFT) +#define CM32181_CMD_ALS_SM_MASK (BIT(11) | BIT(12)) #define CM32181_CMD_ALS_SM_DEFAULT (0x01 << CM32181_CMD_ALS_SM_SHIFT) +#define CM32181_CMD_DEFAULT (CM32181_CMD_ALS_IT_DEFAULT | \ + CM32181_CMD_ALS_SM_DEFAULT) + +/* ALS_WH register */ +#define CM32181_ALS_WH_DEFAULT 0xFFFF + +/* ALS_WL register */ +#define CM32181_ALS_WL_DEFAULT 0x0000 + +/* Software parameters */ #define CM32181_MLUX_PER_BIT 5 /* ALS_SM=01 IT=800ms */ #define CM32181_MLUX_PER_BIT_BASE_IT 800000 /* Based on IT=800ms */ #define CM32181_CALIBSCALE_DEFAULT 1000 #define CM32181_CALIBSCALE_RESOLUTION 1000 #define MLUX_PER_LUX 1000 -static const u8 cm32181_reg[CM32181_CONF_REG_NUM] = { - CM32181_REG_ADDR_CMD, -}; - static const int als_it_bits[] = {12, 8, 0, 1, 2, 3}; static const int als_it_value[] = {25000, 50000, 100000, 200000, 400000, 800000}; @@ -64,15 +67,15 @@ struct cm32181_chip { /** * cm32181_reg_init() - Initialize CM32181 registers - * @cm32181: pointer of struct cm32181. + * @chip: pointer of struct cm32181_chip * * Initialize CM32181 ambient light sensor register to default values. * * Return: 0 for success; otherwise for error code. */ -static int cm32181_reg_init(struct cm32181_chip *cm32181) +static int cm32181_reg_init(struct cm32181_chip *chip) { - struct i2c_client *client = cm32181->client; + struct i2c_client *client = chip->client; int i; s32 ret; @@ -85,14 +88,15 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181) return -ENODEV; /* Default Values */ - cm32181->conf_regs[CM32181_REG_ADDR_CMD] = CM32181_CMD_ALS_ENABLE | - CM32181_CMD_ALS_IT_DEFAULT | CM32181_CMD_ALS_SM_DEFAULT; - cm32181->calibscale = CM32181_CALIBSCALE_DEFAULT; + chip->conf_regs[CM32181_REG_ADDR_CMD] = CM32181_CMD_DEFAULT; + chip->conf_regs[CM32181_REG_ADDR_ALS_WH] = CM32181_ALS_WH_DEFAULT; + chip->conf_regs[CM32181_REG_ADDR_ALS_WL] = CM32181_ALS_WL_DEFAULT; + chip->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]); + ret = i2c_smbus_write_word_data(client, i, + chip->conf_regs[i]); if (ret < 0) return ret; } @@ -101,20 +105,20 @@ static int cm32181_reg_init(struct cm32181_chip *cm32181) } /** - * cm32181_read_als_it() - Get sensor integration time (ms) - * @cm32181: pointer of struct cm32181 - * @val2: pointer of int to load the als_it value. + * cm32181_read_als_it() - Get sensor integration time (ms) + * @chip: pointer of struct cm32181_chip + * @val2: pointer of int to load the als_it value. * - * Report the current integartion time by millisecond. + * Report the current integartion time by millisecond. * - * Return: IIO_VAL_INT_PLUS_MICRO for success, otherwise -EINVAL. + * Return: IIO_VAL_INT_PLUS_MICRO for success, otherwise -EINVAL. */ -static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val2) +static int cm32181_read_als_it(struct cm32181_chip *chip, int *val2) { u16 als_it; int i; - als_it = cm32181->conf_regs[CM32181_REG_ADDR_CMD]; + als_it = chip->conf_regs[CM32181_REG_ADDR_CMD]; als_it &= CM32181_CMD_ALS_IT_MASK; als_it >>= CM32181_CMD_ALS_IT_SHIFT; for (i = 0; i < ARRAY_SIZE(als_it_bits); i++) { @@ -129,16 +133,16 @@ static int cm32181_read_als_it(struct cm32181_chip *cm32181, int *val2) /** * cm32181_write_als_it() - Write sensor integration time - * @cm32181: pointer of struct cm32181. + * @chip: pointer of struct cm32181_chip. * @val: integration time by millisecond. * * Convert integration time (ms) to sensor value. * * Return: i2c_smbus_write_word_data command return value. */ -static int cm32181_write_als_it(struct cm32181_chip *cm32181, int val) +static int cm32181_write_als_it(struct cm32181_chip *chip, int val) { - struct i2c_client *client = cm32181->client; + struct i2c_client *client = chip->client; u16 als_it; int ret, i, n; @@ -152,35 +156,35 @@ static int cm32181_write_als_it(struct cm32181_chip *cm32181, int val) als_it = als_it_bits[i]; als_it <<= CM32181_CMD_ALS_IT_SHIFT; - mutex_lock(&cm32181->lock); - cm32181->conf_regs[CM32181_REG_ADDR_CMD] &= + mutex_lock(&chip->lock); + chip->conf_regs[CM32181_REG_ADDR_CMD] &= ~CM32181_CMD_ALS_IT_MASK; - cm32181->conf_regs[CM32181_REG_ADDR_CMD] |= + chip->conf_regs[CM32181_REG_ADDR_CMD] |= als_it; ret = i2c_smbus_write_word_data(client, CM32181_REG_ADDR_CMD, - cm32181->conf_regs[CM32181_REG_ADDR_CMD]); - mutex_unlock(&cm32181->lock); + chip->conf_regs[CM32181_REG_ADDR_CMD]); + mutex_unlock(&chip->lock); return ret; } /** * cm32181_get_lux() - report current lux value - * @cm32181: pointer of struct cm32181. + * @chip: pointer of struct cm32181_chip * * Convert sensor raw data to lux. It depends on integration * time and calibscale variable. * * Return: Positive value is lux, otherwise is error code. */ -static int cm32181_get_lux(struct cm32181_chip *cm32181) +static int cm32181_get_lux(struct cm32181_chip *chip) { - struct i2c_client *client = cm32181->client; + struct i2c_client *client = chip->client; int ret; int als_it; unsigned long lux; - ret = cm32181_read_als_it(cm32181, &als_it); + ret = cm32181_read_als_it(chip, &als_it); if (ret < 0) return -EINVAL; @@ -193,7 +197,7 @@ static int cm32181_get_lux(struct cm32181_chip *cm32181) return ret; lux *= ret; - lux *= cm32181->calibscale; + lux *= chip->calibscale; lux /= CM32181_CALIBSCALE_RESOLUTION; lux /= MLUX_PER_LUX; @@ -204,25 +208,25 @@ static int cm32181_get_lux(struct cm32181_chip *cm32181) } static int cm32181_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, long mask) + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) { - struct cm32181_chip *cm32181 = iio_priv(indio_dev); + struct cm32181_chip *chip = iio_priv(indio_dev); int ret; switch (mask) { case IIO_CHAN_INFO_PROCESSED: - ret = cm32181_get_lux(cm32181); + ret = cm32181_get_lux(chip); if (ret < 0) return ret; *val = ret; return IIO_VAL_INT; case IIO_CHAN_INFO_CALIBSCALE: - *val = cm32181->calibscale; + *val = chip->calibscale; return IIO_VAL_INT; case IIO_CHAN_INFO_INT_TIME: *val = 0; - ret = cm32181_read_als_it(cm32181, val2); + ret = cm32181_read_als_it(chip, val2); return ret; } @@ -230,18 +234,18 @@ static int cm32181_read_raw(struct iio_dev *indio_dev, } static int cm32181_write_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int val, int val2, long mask) + struct iio_chan_spec const *chan, + int val, int val2, long mask) { - struct cm32181_chip *cm32181 = iio_priv(indio_dev); + struct cm32181_chip *chip = iio_priv(indio_dev); int ret; switch (mask) { case IIO_CHAN_INFO_CALIBSCALE: - cm32181->calibscale = val; + chip->calibscale = val; return val; case IIO_CHAN_INFO_INT_TIME: - ret = cm32181_write_als_it(cm32181, val2); + ret = cm32181_write_als_it(chip, val2); return ret; } @@ -301,21 +305,21 @@ static const struct iio_info cm32181_info = { static int cm32181_probe(struct i2c_client *client, const struct i2c_device_id *id) { - struct cm32181_chip *cm32181; + struct cm32181_chip *chip; struct iio_dev *indio_dev; int ret; - indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*cm32181)); + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); if (!indio_dev) { dev_err(&client->dev, "devm_iio_device_alloc failed\n"); return -ENOMEM; } - cm32181 = iio_priv(indio_dev); + chip = iio_priv(indio_dev); i2c_set_clientdata(client, indio_dev); - cm32181->client = client; + chip->client = client; - mutex_init(&cm32181->lock); + mutex_init(&chip->lock); indio_dev->dev.parent = &client->dev; indio_dev->channels = cm32181_channels; indio_dev->num_channels = ARRAY_SIZE(cm32181_channels); @@ -323,7 +327,7 @@ static int cm32181_probe(struct i2c_client *client, indio_dev->name = id->name; indio_dev->modes = INDIO_DIRECT_MODE; - ret = cm32181_reg_init(cm32181); + ret = cm32181_reg_init(chip); if (ret) { dev_err(&client->dev, "%s: register init failed\n", @@ -360,7 +364,7 @@ static struct i2c_driver cm32181_driver = { .of_match_table = of_match_ptr(cm32181_of_match), .owner = THIS_MODULE, }, - .id_table = cm32181_id, + .id_table = cm32181_id, .probe = cm32181_probe, }; -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/