From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752379AbdASL4K (ORCPT ); Thu, 19 Jan 2017 06:56:10 -0500 Received: from mike.atx.name ([185.8.165.10]:55128 "EHLO mike.atx.name" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752113AbdASL4J (ORCPT ); Thu, 19 Jan 2017 06:56:09 -0500 Date: Thu, 19 Jan 2017 12:48:17 +0100 From: Josef Gajdusek To: linux-iio@vger.kernel.org Cc: jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, maitysanchayan@gmail.com, gregor.boirie@parrot.com, linux-kernel@vger.kernel.org, rui.zhang@intel.com, marxin.liska@gmail.com, marex@denx.de, atx@atx.name Subject: [PATCH v2] iio: light: acpi-als: Properly enable on ASUS Zenbooks Message-ID: <20170119114816.GA12918@rick.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ASUS Zenbooks need several special ACPI calls to enable the ALS peripheral. Otherwise, reads just return 0. Signed-off-by: Josef Gajdusek --- drivers/iio/light/acpi-als.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/iio/light/acpi-als.c b/drivers/iio/light/acpi-als.c index f0b47c5..ccd5787 100644 --- a/drivers/iio/light/acpi-als.c +++ b/drivers/iio/light/acpi-als.c @@ -39,6 +39,9 @@ #define ACPI_ALS_DEVICE_NAME "acpi-als" #define ACPI_ALS_NOTIFY_ILLUMINANCE 0x80 +#define ACPI_ALS_ASUS_TALS "\\_SB.PCI0.LPCB.EC0.TALS" +#define ACPI_ALS_ASUS_ALSC "\\_SB.ATKD.ALSC" + ACPI_MODULE_NAME("acpi-als"); /* @@ -170,6 +173,16 @@ static int acpi_als_read_raw(struct iio_dev *indio_dev, return IIO_VAL_INT; } +static void acpi_als_quirk_asus(struct acpi_als *als) +{ + acpi_execute_simple_method(NULL, ACPI_ALS_ASUS_TALS, 1); + acpi_execute_simple_method(NULL, ACPI_ALS_ASUS_ALSC, 1); +} + +static void (*acpi_als_quirks[])(struct acpi_als *als) = { + acpi_als_quirk_asus, +}; + static const struct iio_info acpi_als_info = { .driver_module = THIS_MODULE, .read_raw = acpi_als_read_raw, @@ -180,6 +193,7 @@ static int acpi_als_add(struct acpi_device *device) struct acpi_als *als; struct iio_dev *indio_dev; struct iio_buffer *buffer; + int i; indio_dev = devm_iio_device_alloc(&device->dev, sizeof(*als)); if (!indio_dev) @@ -191,6 +205,9 @@ static int acpi_als_add(struct acpi_device *device) als->device = device; mutex_init(&als->lock); + for (i = 0; i < ARRAY_SIZE(acpi_als_quirks); i++) + acpi_als_quirks[i](als); + indio_dev->name = ACPI_ALS_DEVICE_NAME; indio_dev->dev.parent = &device->dev; indio_dev->info = &acpi_als_info; -- 2.10.2