From: Hans de Goede <hdegoede@redhat.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Darren Hart <dvhart@infradead.org>,
"russianneuromancer @ ya . ru" <russianneuromancer@ya.ru>,
Gregor Riepl <onitake@gmail.com>,
linux-input <linux-input@vger.kernel.org>,
Platform Driver <platform-driver-x86@vger.kernel.org>
Subject: Re: [PATCH v3] platform/x86: add support for devices with Silead touchscreens
Date: Sun, 22 Jan 2017 21:05:10 +0100 [thread overview]
Message-ID: <aaca7ffc-1bd9-20a0-291f-f4778a4d8d84@redhat.com> (raw)
In-Reply-To: <CAHp75Vcv077rpufZYSr9jpphT9ureJ4t1=9PRNeX_RkcE6Ri9Q@mail.gmail.com>
Hi,
On 22-01-17 17:49, Andy Shevchenko wrote:
> On Sun, Jan 22, 2017 at 5:25 PM, Hans de Goede <hdegoede@redhat.com> wrote:
>> On ACPI based tablets, the ACPI touchscreen node only contains info on
>> the gpio and the irq, and is missing any info on the axis. This info is
>> expected to be built into the tablet model specific version of the driver
>> shipped with the os-image for the device.
>>
>> Add support for getting the missing info from a table built into the
>> driver, using dmi data to identify which entry of the table to use and
>> add info for the CUBE iwork8 Air and Jumper EZpad mini3 tablets on which
>> this code was tested / developed.
>>
>> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=187531
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> [dmitry.torokhov@gmail.com: Move to platform/x86]
>> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>
> Few nitpicks below. After addressing them
> Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Thank you.
> (in case Dmitry would like to push this via input subsystem)
I've addressed all your remarks, I will send a v4 shortly.
Regards,
Hans
>
>> ---
>> Changes in v2:
>> -Put the dmi code in a separate silead_dmi.c file
>> -Use device_add_properties to add the info
>> Changes in v3 (Dmitry Torokhov):
>> -Move the silead_dmi code to drivers/platform/x86
>> ---
>> MAINTAINERS | 8 +++
>> drivers/platform/x86/Kconfig | 11 +++
>> drivers/platform/x86/Makefile | 1 +
>> drivers/platform/x86/silead_dmi.c | 136 ++++++++++++++++++++++++++++++++++++++
>> 4 files changed, 156 insertions(+)
>> create mode 100644 drivers/platform/x86/silead_dmi.c
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index bdc4843..5591ac3 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -11255,6 +11255,14 @@ F: drivers/media/usb/siano/
>> F: drivers/media/usb/siano/
>> F: drivers/media/mmc/siano/
>>
>> +SILEAD TOUCHSCREEN DRIVER
>> +M: Hans de Goede <hdegoede@redhat.com>
>> +L: linux-input@vger.kernel.org
>> +L: platform-driver-x86@vger.kernel.org
>> +S: Maintained
>> +F: drivers/input/touchscreen/silead.c
>> +F: drivers/platform/x86/silead_dmi.c
>> +
>> SIMPLEFB FB DRIVER
>> M: Hans de Goede <hdegoede@redhat.com>
>> L: linux-fbdev@vger.kernel.org
>> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
>> index 59aa8e3..60be7bc 100644
>> --- a/drivers/platform/x86/Kconfig
>> +++ b/drivers/platform/x86/Kconfig
>> @@ -1076,4 +1076,15 @@ config MLX_CPLD_PLATFORM
>> This driver handles hot-plug events for the power suppliers, power
>> cables and fans on the wide range Mellanox IB and Ethernet systems.
>>
>> +config SILEAD_DMI
>> + bool "Tablets with Silead touchscreens"
>> + depends on ACPI && DMI && I2C && INPUT
>> + ---help---
>> + Certain ACPI based tablets with Silead touchscreens do not have
>> + enough data in ACPI tables for the touchscreen driver to handle
>> + the touchscreen properly, as OEMs expected the data to be baked
>> + into the tablet model specific version of the driver shipped
>> + with the os-image for the device. This option supplies the missing
>
> os -> OS
>
>> + information. Enable this for x86 tablets with Silead touchscreens.
>> +
>> endif # X86_PLATFORM_DEVICES
>> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
>> index d4111f0..840b07b 100644
>> --- a/drivers/platform/x86/Makefile
>> +++ b/drivers/platform/x86/Makefile
>> @@ -76,3 +76,4 @@ obj-$(CONFIG_INTEL_TELEMETRY) += intel_telemetry_core.o \
>> obj-$(CONFIG_INTEL_PMC_CORE) += intel_pmc_core.o
>> obj-$(CONFIG_MLX_PLATFORM) += mlx-platform.o
>> obj-$(CONFIG_MLX_CPLD_PLATFORM) += mlxcpld-hotplug.o
>> +obj-$(CONFIG_SILEAD_DMI) += silead_dmi.o
>> diff --git a/drivers/platform/x86/silead_dmi.c b/drivers/platform/x86/silead_dmi.c
>> new file mode 100644
>> index 0000000..11b0a46
>> --- /dev/null
>> +++ b/drivers/platform/x86/silead_dmi.c
>> @@ -0,0 +1,136 @@
>> +/*
>> + * Silead touchscreen driver DMI based configuration code
>> + *
>> + * Copyright (c) 2017 Red Hat Inc.
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * Red Hat authors:
>> + * Hans de Goede <hdegoede@redhat.com>
>> + */
>> +
>> +#include <linux/acpi.h>
>> +#include <linux/device.h>
>> +#include <linux/dmi.h>
>> +#include <linux/i2c.h>
>> +#include <linux/notifier.h>
>> +#include <linux/property.h>
>> +#include <linux/string.h>
>> +
>> +struct silead_ts_dmi_data {
>> + const char *acpi_name;
>> + struct property_entry *properties;
>> +};
>> +
>> +static struct property_entry cube_iwork8_air_props[] = {
>> + PROPERTY_ENTRY_U32("touchscreen-size-x", 1660),
>> + PROPERTY_ENTRY_U32("touchscreen-size-y", 900),
>> + PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
>> + PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-cube-iwork8-air.fw"),
>> + PROPERTY_ENTRY_U32("silead,max-fingers", 10),
>> + { }
>> +};
>> +
>> +static const struct silead_ts_dmi_data cube_iwork8_air_data = {
>> + .acpi_name = "MSSL1680:00",
>> + .properties = cube_iwork8_air_props,
>
> I hope indentation is correct and uses tabs.
>
>> +};
>> +
>> +static struct property_entry jumper_ezpad_mini3_props[] = {
>> + PROPERTY_ENTRY_U32("touchscreen-size-x", 1700),
>> + PROPERTY_ENTRY_U32("touchscreen-size-y", 1150),
>> + PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
>> + PROPERTY_ENTRY_STRING("firmware-name", "gsl3676-jumper-ezpad-mini3.fw"),
>> + PROPERTY_ENTRY_U32("silead,max-fingers", 10),
>> + { }
>> +};
>> +
>> +static const struct silead_ts_dmi_data jumper_ezpad_mini3_data = {
>> + .acpi_name = "MSSL1680:00",
>> + .properties = jumper_ezpad_mini3_props,
>
> Ditto.
>
>> +};
>> +
>> +static const struct dmi_system_id silead_ts_dmi_table[] = {
>> + {
>> + .ident = "CUBE iwork8 Air",
>> + .driver_data = (void *)&cube_iwork8_air_data,
>> + .matches = {
>> + DMI_MATCH(DMI_SYS_VENDOR, "cube"),
>> + DMI_MATCH(DMI_PRODUCT_NAME, "i1-TF"),
>> + DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
>> + },
>> + },
>> + {
>> + .ident = "Jumper EZpad mini3",
>> + .driver_data = (void *)&jumper_ezpad_mini3_data,
>> + .matches = {
>> + DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
>> + /* jumperx.T87.KFBNEEA02 with the version-nr dropped */
>> + DMI_MATCH(DMI_BIOS_VERSION, "jumperx.T87.KFBNEEA"),
>> + },
>> + },
>> + { },
>> +};
>> +
>> +static void silead_ts_dmi_add_props(struct device *dev)
>> +{
>> + struct i2c_client *client = to_i2c_client(dev);
>> + const struct dmi_system_id *dmi_id;
>> + const struct silead_ts_dmi_data *ts_data;
>> + int error;
>> +
>> + dmi_id = dmi_first_match(silead_ts_dmi_table);
>> + if (dmi_id) {
>
> if (!dmi_id)
> return;
> ?
>
>> + ts_data = dmi_id->driver_data;
>> + if (ACPI_COMPANION(dev) &&
>
> has_acpi_companion()
>
>> + !strncmp(ts_data->acpi_name, client->name, I2C_NAME_SIZE)) {
>> + error = device_add_properties(dev, ts_data->properties);
>> + if (error)
>> + dev_err(dev, "failed to add properties: %d\n",
>> + error);
>
> And perhaps use ret or err and put this to a single line.
>
>> + }
>> + }
>> +}
>> +
>> +static int silead_ts_dmi_notifier_call(struct notifier_block *nb,
>> + unsigned long action, void *data)
>> +{
>> + struct device *dev = data;
>> +
>> + switch (action) {
>> + case BUS_NOTIFY_ADD_DEVICE:
>> + silead_ts_dmi_add_props(dev);
>> + break;
>> +
>> + default:
>> + break;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static struct notifier_block silead_ts_dmi_notifier = {
>> + .notifier_call = silead_ts_dmi_notifier_call,
>> +};
>> +
>> +static int __init silead_ts_dmi_init(void)
>> +{
>> + int error;
>> +
>> + error = bus_register_notifier(&i2c_bus_type, &silead_ts_dmi_notifier);
>> + if (error)
>> + pr_err("%s: failed to register i2c bus notifier: %d\n",
>> + __func__, error);
>> +
>> + return error;
>
> If above variable would be renamed this would follow.
>
>> +}
>> +
>> +/*
>> + * We are registering out notifier after i2c core is initialized and i2c bus
>> + * itself is ready (which happens at postcore initcall level), but before
>> + * ACPI starts enumerating devices (at subsys initcall level).
>> + */
>> +arch_initcall(silead_ts_dmi_init);
>> --
>> 2.9.3
>>
>
>
>
next prev parent reply other threads:[~2017-01-22 20:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-22 15:25 [PATCH v3] platform/x86: add support for devices with Silead touchscreens Hans de Goede
2017-01-22 16:49 ` Andy Shevchenko
2017-01-22 20:05 ` Hans de Goede [this message]
2017-01-22 22:22 ` Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aaca7ffc-1bd9-20a0-291f-f4778a4d8d84@redhat.com \
--to=hdegoede@redhat.com \
--cc=andy.shevchenko@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=dvhart@infradead.org \
--cc=linux-input@vger.kernel.org \
--cc=onitake@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=russianneuromancer@ya.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).