From nobody Sat Jun 20 00:54:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E784C433EF for ; Fri, 25 Mar 2022 10:31:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358906AbiCYKcy (ORCPT ); Fri, 25 Mar 2022 06:32:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348339AbiCYKco (ORCPT ); Fri, 25 Mar 2022 06:32:44 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B972C55A9; Fri, 25 Mar 2022 03:31:11 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: shreeya) with ESMTPSA id E983A1F460E9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1648204269; bh=GOvS6/pw00uQWPk8FwXeV72GGMNO/VFjmhsyaOW4hJs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YusUtmiBQKwKYDCfioUDiIMRJ/gxBnYuYzHru3tz5LPIdoSsFK4v2oK/GYHpvUamY 7mJLF4AI3URoPCi5NSaJtXrmAIx0lXLq0tJkbRli/H4W8tgpy8XLoxIqqDEOrfGV/A qDYvh9fSvOApZGFFb7dMlI9o1HTOpdA2Mugdy7D+RhTq+/tf/FsVYe9FQWdRfi1v8C gmVP97KABSEIYHf5irJFnAmNcQGT9mCLmGmiYl4/ecm3QV20JCKCtXoYG6FAjObMoI hkX7foNVxhAPQGa+0TW9pQPMtiZUs5xkqW7TRldvebyfjctZzb2dpDeaCaERHgqCj4 B/dD8xIB5bI/w== From: Shreeya Patel To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, Zhigang.Shi@liteon.com, krisman@collabora.com Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@collabora.com, alvaro.soliverez@collabora.com, Shreeya Patel Subject: [PATCH 1/3] dt-bindings: vendor-prefixes: Add 'ltr' as deprecated vendor prefix Date: Fri, 25 Mar 2022 16:00:12 +0530 Message-Id: <20220325103014.6597-2-shreeya.patel@collabora.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220325103014.6597-1-shreeya.patel@collabora.com> References: <20220325103014.6597-1-shreeya.patel@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" 'liteon' is the correct vendor prefix for devices released by LITE-ON Technology Corp. But one of the released device which uses ltr216a light sensor exposes the vendor prefix name as 'ltr' through ACPI. Hence, add 'ltr' as a deprecated vendor prefix which would suppress the following warning in case the compatible string used in ltrf216a driver is "ltr,ltrf216a" WARNING: DT compatible string vendor "ltr" appears un-documented -- check ./Documentation/devicetree/bindings/vendor-prefixes.yaml 364: FILE: drivers/iio/light/ltrf216a.c:313: + { .compatible =3D "ltr,ltrf216a" }, Signed-off-by: Shreeya Patel Reviewed-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/vendor-prefixes.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Docum= entation/devicetree/bindings/vendor-prefixes.yaml index baed2b007d0e..e78091d51443 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -691,6 +691,9 @@ patternProperties: description: Linx Technologies "^liteon,.*": description: LITE-ON Technology Corp. + "^ltr,.*": + description: LITE-ON Technology Corp. + deprecated: true "^litex,.*": description: LiteX SoC builder "^lltc,.*": --=20 2.30.2 From nobody Sat Jun 20 00:54:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E982C433F5 for ; Fri, 25 Mar 2022 10:31:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358890AbiCYKc5 (ORCPT ); Fri, 25 Mar 2022 06:32:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358887AbiCYKcs (ORCPT ); Fri, 25 Mar 2022 06:32:48 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6281FC55A6; Fri, 25 Mar 2022 03:31:15 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: shreeya) with ESMTPSA id 3DF4D1F460EB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1648204274; bh=QOhkhiW0JlopjyeFTJ4GssHvgndzKVhQ426SGRnEof4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a2K2LP+Cow21V8hDTIN0kDXTaptiUhSzshQ/AS8oFEWVkh1+QS048Yogy2ffBzxID 7sGy2S7Jsm81fe2laZdvcVR5SMHTy+194jcZdA4ib3ARvRrpb7g1+OOiYB5YP6/9Hw KdI8va9NuTXfEhpV259qh1TrpOTM/MYGLQ8zvtz7ZbXI540svkWfxgj+Gj+sBq1C4T gaEwP/d7iRzZwWliGYr5T5FO11xEQOo1PcV8q7Q7hQfwBKGtPhCTfujae44lP59wZ9 7oT5Hpbkla5FC7HSWRR7F74Q35PFnUwp0rs5mCSBsfBxf0/tBsj4jpXFBIDZ0ujfkP ZT9GfHwfnt/Rg== From: Shreeya Patel To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, Zhigang.Shi@liteon.com, krisman@collabora.com Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@collabora.com, alvaro.soliverez@collabora.com, Shreeya Patel Subject: [PATCH 2/3] dt-bindings: Document ltrf216a light sensor bindings Date: Fri, 25 Mar 2022 16:00:13 +0530 Message-Id: <20220325103014.6597-3-shreeya.patel@collabora.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220325103014.6597-1-shreeya.patel@collabora.com> References: <20220325103014.6597-1-shreeya.patel@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add devicetree bindings for ltrf216a ambient light sensor Signed-off-by: Shreeya Patel --- .../bindings/iio/light/liteon,ltrf216a.yaml | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/light/liteon,ltrf= 216a.yaml diff --git a/Documentation/devicetree/bindings/iio/light/liteon,ltrf216a.ya= ml b/Documentation/devicetree/bindings/iio/light/liteon,ltrf216a.yaml new file mode 100644 index 000000000000..275d86a0353a --- /dev/null +++ b/Documentation/devicetree/bindings/iio/light/liteon,ltrf216a.yaml @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/light/liteon,ltrf216a.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: LTRF216A Ambient Light Sensor + +maintainers: + - Zhigang Shi + +description: | + Ambient sensing with an i2c interface. + +properties: + compatible: + enum: + - liteon,ltrf216a + - ltr,ltrf216a + + reg: + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + + #address-cells =3D <1>; + #size-cells =3D <0>; + + light-sensor@53 { + compatible =3D "ltr,ltrf216a"; + reg =3D <0x53>; + }; + }; +... --=20 2.30.2 From nobody Sat Jun 20 00:54:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20C72C433F5 for ; Fri, 25 Mar 2022 10:31:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358870AbiCYKdB (ORCPT ); Fri, 25 Mar 2022 06:33:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358878AbiCYKcy (ORCPT ); Fri, 25 Mar 2022 06:32:54 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B3ADC6EEE; Fri, 25 Mar 2022 03:31:20 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: shreeya) with ESMTPSA id 5D1341F460ED DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1648204279; bh=gvP9+LPVXjUEXJQxkzNCynJwZ6ay+Y6rU7nkdF/RRMQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i1sH9ufPyYQ7uBbyFkk3M/FdRAC02x+J7EPultN66+9OClJzIwIiVskn2eGmGuzLa OixPjPt6hDuogsCtB18E+/dv+qn4r4xbYLL15k/myIROpZvvfeplq9OLxSGbpuBFuq 18P2AmX3+xiY0boii9rrdubpp3c32XCw/XxxCHq66VSw9drYZ3Vlk6sH3m47qijR/F 8+wyxuoYBD8smqAnDrd8KV0rqJT1sJZMOPiR4IpLSxNhbBq98SwOALOhWcvtkGbLrM BB582Rd8qZm0rH0F2WWX0P5hCUZX3KdAFH7QkyqVzaq+KhAWY4sNxzEqNiK8YpGPsL VHJixWSRDRDow== From: Shreeya Patel To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, Zhigang.Shi@liteon.com, krisman@collabora.com Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@collabora.com, alvaro.soliverez@collabora.com, Shreeya Patel Subject: [PATCH 3/3] iio: light: Add support for ltrf216a sensor Date: Fri, 25 Mar 2022 16:00:14 +0530 Message-Id: <20220325103014.6597-4-shreeya.patel@collabora.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220325103014.6597-1-shreeya.patel@collabora.com> References: <20220325103014.6597-1-shreeya.patel@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Zhigang Shi Add initial support for ltrf216a ambient light sensor. Datasheet :- https://gitlab.steamos.cloud/shreeya/iio/-/blob/main/LTR-F216A-QT.pdf Co-developed-by: Shreeya Patel Signed-off-by: Shreeya Patel Signed-off-by: Zhigang Shi --- drivers/iio/light/Kconfig | 10 ++ drivers/iio/light/Makefile | 1 + drivers/iio/light/ltrf216a.c | 334 +++++++++++++++++++++++++++++++++++ 3 files changed, 345 insertions(+) create mode 100644 drivers/iio/light/ltrf216a.c diff --git a/drivers/iio/light/Kconfig b/drivers/iio/light/Kconfig index a62c7b4b8678..08fa383a8ca7 100644 --- a/drivers/iio/light/Kconfig +++ b/drivers/iio/light/Kconfig @@ -318,6 +318,16 @@ config SENSORS_LM3533 changes. The ALS-control output values can be set per zone for the three current output channels. =20 +config LTRF216A + tristate "Liteon LTRF216A Light Sensor" + depends on I2C + help + If you say Y or M here, you get support for Liteon LTRF216A + Ambient Light Sensor. + + If built as a dynamically linked module, it will be called + ltrf216a. + config LTR501 tristate "LTR-501ALS-01 light sensor" depends on I2C diff --git a/drivers/iio/light/Makefile b/drivers/iio/light/Makefile index d10912faf964..8fa91b9fe5b6 100644 --- a/drivers/iio/light/Makefile +++ b/drivers/iio/light/Makefile @@ -30,6 +30,7 @@ obj-$(CONFIG_SENSORS_ISL29028) +=3D isl29028.o obj-$(CONFIG_ISL29125) +=3D isl29125.o obj-$(CONFIG_JSA1212) +=3D jsa1212.o obj-$(CONFIG_SENSORS_LM3533) +=3D lm3533-als.o +obj-$(CONFIG_LTRF216A) +=3D ltrf216a.o obj-$(CONFIG_LTR501) +=3D ltr501.o obj-$(CONFIG_LV0104CS) +=3D lv0104cs.o obj-$(CONFIG_MAX44000) +=3D max44000.o diff --git a/drivers/iio/light/ltrf216a.c b/drivers/iio/light/ltrf216a.c new file mode 100644 index 000000000000..99295358a7fe --- /dev/null +++ b/drivers/iio/light/ltrf216a.c @@ -0,0 +1,334 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * LTRF216A Ambient Light Sensor + * + * Copyright (C) 2021 Lite-On Technology Corp (Singapore) + * Author: Shi Zhigang + * + * IIO driver for LTRF216A (7-bit I2C slave address 0x53). + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define LTRF216A_DRV_NAME "ltrf216a" + +#define LTRF216A_MAIN_CTRL 0x00 + +#define LTRF216A_ALS_MEAS_RATE 0x04 +#define LTRF216A_MAIN_STATUS 0x07 +#define LTRF216A_CLEAR_DATA_0 0x0A + +#define LTRF216A_ALS_DATA_0 0x0D + +static const int int_time_mapping[] =3D { 400000, 200000, 100000 }; + +struct ltrf216a_data { + struct i2c_client *client; + u32 int_time; + u8 int_time_fac; + u8 als_gain_fac; + struct mutex mutex; +}; + +/* open air. need to update based on TP transmission rate. */ +#define WIN_FAC 1 + +static const struct iio_chan_spec ltrf216a_channels[] =3D { + { + .type =3D IIO_LIGHT, + .info_mask_separate =3D + BIT(IIO_CHAN_INFO_PROCESSED) | + BIT(IIO_CHAN_INFO_INT_TIME), + } +}; + +static IIO_CONST_ATTR_INT_TIME_AVAIL("0.1 0.2 0.4"); + +static struct attribute *ltrf216a_attributes[] =3D { + &iio_const_attr_integration_time_available.dev_attr.attr, + NULL +}; + +static const struct attribute_group ltrf216a_attribute_group =3D { + .attrs =3D ltrf216a_attributes, +}; + +static int ltrf216a_init(struct iio_dev *indio_dev) +{ + int ret; + struct ltrf216a_data *data =3D iio_priv(indio_dev); + + ret =3D i2c_smbus_read_byte_data(data->client, LTRF216A_MAIN_CTRL); + if (ret < 0) { + dev_err(&data->client->dev, "Error reading LTRF216A_MAIN_CTRL\n"); + return ret; + } + + /* enable sensor */ + ret |=3D 0x02; + ret =3D i2c_smbus_write_byte_data(data->client, LTRF216A_MAIN_CTRL, ret); + if (ret < 0) { + dev_err(&data->client->dev, "Error writing LTRF216A_MAIN_CTRL\n"); + return ret; + } + + return 0; +} + +static int ltrf216a_disable(struct iio_dev *indio_dev) +{ + int ret; + struct ltrf216a_data *data =3D iio_priv(indio_dev); + + ret =3D i2c_smbus_write_byte_data(data->client, LTRF216A_MAIN_CTRL, 0); + if (ret < 0) + dev_err(&data->client->dev, "Error writing LTRF216A_MAIN_CTRL\n"); + + return ret; +} + +static int ltrf216a_set_it_time(struct ltrf216a_data *data, int itime) +{ + int i, ret, index =3D -1; + u8 reg; + + for (i =3D 0; i < ARRAY_SIZE(int_time_mapping); i++) { + if (int_time_mapping[i] =3D=3D itime) { + index =3D i; + break; + } + } + /* Make sure integration time index is valid */ + if (index < 0) + return -EINVAL; + + if (index =3D=3D 0) { + reg =3D 0x03; + data->int_time_fac =3D 4; + } else if (index =3D=3D 1) { + reg =3D 0x13; + data->int_time_fac =3D 2; + } else { + reg =3D (index << 4) | 0x02; + data->int_time_fac =3D 1; + } + + ret =3D i2c_smbus_write_byte_data(data->client, LTRF216A_ALS_MEAS_RATE, r= eg); + if (ret < 0) + return ret; + + data->int_time =3D itime; + + return 0; +} + +static int ltrf216a_get_it_time(struct ltrf216a_data *data, int *val, int = *val2) +{ + *val =3D 0; + *val2 =3D data->int_time; + + return IIO_VAL_INT_PLUS_MICRO; +} + +static int ltrf216a_read_data(struct ltrf216a_data *data, u8 addr) +{ + int ret; + int tries =3D 25; + int val_0, val_1, val_2; + + while (tries--) { + ret =3D i2c_smbus_read_byte_data(data->client, LTRF216A_MAIN_STATUS); + if (ret < 0) + return ret; + if (ret & 0x08) + break; + msleep(20); + } + + val_0 =3D i2c_smbus_read_byte_data(data->client, addr); + val_1 =3D i2c_smbus_read_byte_data(data->client, addr + 1); + val_2 =3D i2c_smbus_read_byte_data(data->client, addr + 2); + ret =3D (val_2 << 16) + (val_1 << 8) + val_0; + + return ret; +} + +static int ltrf216a_get_lux(struct ltrf216a_data *data) +{ + int greendata, cleardata, lux; + + greendata =3D ltrf216a_read_data(data, LTRF216A_ALS_DATA_0); + cleardata =3D ltrf216a_read_data(data, LTRF216A_CLEAR_DATA_0); + + if (greendata < 0 || cleardata < 0) + lux =3D 0; + else + lux =3D greendata * 8 * WIN_FAC / data->als_gain_fac / data->int_time_fa= c / 10; + + return lux; +} + +static int ltrf216a_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int *val, + int *val2, long mask) +{ + int ret; + struct ltrf216a_data *data =3D iio_priv(indio_dev); + + mutex_lock(&data->mutex); + + switch (mask) { + case IIO_CHAN_INFO_PROCESSED: + ret =3D ltrf216a_get_lux(data); + *val =3D ret; + ret =3D IIO_VAL_INT; + break; + case IIO_CHAN_INFO_INT_TIME: + ret =3D ltrf216a_get_it_time(data, val, val2); + break; + default: + ret =3D -EINVAL; + } + + mutex_unlock(&data->mutex); + + return ret; +} + +static int ltrf216a_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, int val, + int val2, long mask) +{ + struct ltrf216a_data *data =3D iio_priv(indio_dev); + int ret; + + switch (mask) { + case IIO_CHAN_INFO_INT_TIME: + if (val !=3D 0) + return -EINVAL; + mutex_lock(&data->mutex); + ret =3D ltrf216a_set_it_time(data, val2); + mutex_unlock(&data->mutex); + return ret; + default: + return -EINVAL; + } +} + +static const struct iio_info ltrf216a_info =3D { + .read_raw =3D ltrf216a_read_raw, + .write_raw =3D ltrf216a_write_raw, + .attrs =3D <rf216a_attribute_group, +}; + +static int ltrf216a_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct ltrf216a_data *data; + struct iio_dev *indio_dev; + int ret; + + indio_dev =3D devm_iio_device_alloc(&client->dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + data =3D iio_priv(indio_dev); + i2c_set_clientdata(client, indio_dev); + data->client =3D client; + + mutex_init(&data->mutex); + + indio_dev->info =3D <rf216a_info; + indio_dev->name =3D LTRF216A_DRV_NAME; + indio_dev->channels =3D ltrf216a_channels; + indio_dev->num_channels =3D ARRAY_SIZE(ltrf216a_channels); + indio_dev->modes =3D INDIO_DIRECT_MODE; + + ret =3D ltrf216a_init(indio_dev); + if (ret < 0) { + dev_err(&client->dev, "ltrf216a chip init failed\n"); + return ret; + } + data->int_time =3D 100000; + data->int_time_fac =3D 1; + data->als_gain_fac =3D 3; + + ret =3D iio_device_register(indio_dev); + if (ret < 0) { + dev_err(&client->dev, "failed to register iio dev\n"); + goto err_init; + } + + return 0; +err_init: + ltrf216a_disable(indio_dev); + return ret; +} + +static int ltrf216a_remove(struct i2c_client *client) +{ + struct iio_dev *indio_dev =3D i2c_get_clientdata(client); + + iio_device_unregister(indio_dev); + ltrf216a_disable(indio_dev); + + return 0; +} + +#ifdef CONFIG_PM_SLEEP +static int ltrf216a_suspend(struct device *dev) +{ + struct iio_dev *indio_dev =3D i2c_get_clientdata(to_i2c_client(dev)); + + return ltrf216a_disable(indio_dev); +} + +static int ltrf216a_resume(struct device *dev) +{ + struct iio_dev *indio_dev =3D i2c_get_clientdata(to_i2c_client(dev)); + + return ltrf216a_init(indio_dev); +} + +static SIMPLE_DEV_PM_OPS(ltrf216a_pm_ops, ltrf216a_suspend, ltrf216a_resum= e); +#define LTRF216A_PM_OPS (<rf216a_pm_ops) +#else +#define LTRF216A_PM_OPS NULL +#endif + +static const struct i2c_device_id ltrf216a_id[] =3D { + { LTRF216A_DRV_NAME, 0}, + {} +}; +MODULE_DEVICE_TABLE(i2c, ltrf216a_id); + +static const struct of_device_id ltrf216a_of_match[] =3D { + { .compatible =3D "ltr,ltrf216a", }, + { .compatible =3D "liteon,ltrf216a", }, + {} +}; +MODULE_DEVICE_TABLE(of, ltrf216a_of_match); + +static struct i2c_driver ltrf216a_driver =3D { + .driver =3D { + .name =3D LTRF216A_DRV_NAME, + .pm =3D LTRF216A_PM_OPS, + .of_match_table =3D ltrf216a_of_match, + }, + .probe =3D ltrf216a_probe, + .remove =3D ltrf216a_remove, + .id_table =3D ltrf216a_id, +}; + +module_i2c_driver(ltrf216a_driver); + +MODULE_AUTHOR("Shi Zhigang "); +MODULE_DESCRIPTION("LTRF216A ambient light sensor driver"); +MODULE_LICENSE("GPL v2"); --=20 2.30.2