From patchwork Mon Jan 2 10:55:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 9493351 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9FCC160414 for ; Mon, 2 Jan 2017 10:55:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D1A722689 for ; Mon, 2 Jan 2017 10:55:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8F55F26212; Mon, 2 Jan 2017 10:55:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F303B22689 for ; Mon, 2 Jan 2017 10:55:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755375AbdABKzm (ORCPT ); Mon, 2 Jan 2017 05:55:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:48988 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755356AbdABKzl (ORCPT ); Mon, 2 Jan 2017 05:55:41 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 16CF64E4CF; Mon, 2 Jan 2017 10:55:42 +0000 (UTC) Received: from shalem.localdomain.com (vpn1-4-1.ams2.redhat.com [10.36.4.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v02AteJi013437; Mon, 2 Jan 2017 05:55:40 -0500 From: Hans de Goede To: Dmitry Torokhov Cc: "russianneuromancer @ ya . ru" , Gregor Riepl , linux-input@vger.kernel.org, Hans de Goede Subject: [PATCH v2] Input: silead - Add support for setting resolution based on dmi data Date: Mon, 2 Jan 2017 11:55:38 +0100 Message-Id: <20170102105538.4009-1-hdegoede@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 02 Jan 2017 10:55:42 +0000 (UTC) Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- Changes in v2: -Put the dmi code in a separate silead_dmi.c file -Use device_add_properties to add the info --- drivers/input/touchscreen/Makefile | 4 +- drivers/input/touchscreen/silead.c | 3 ++ drivers/input/touchscreen/silead_dmi.c | 71 ++++++++++++++++++++++++++++++++++ drivers/input/touchscreen/silead_dmi.h | 26 +++++++++++++ 4 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 drivers/input/touchscreen/silead_dmi.c create mode 100644 drivers/input/touchscreen/silead_dmi.h diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 81b8645..7e7e310 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -5,6 +5,7 @@ # Each configuration option enables a list of files. wm97xx-ts-y := wm97xx-core.o +silead-ts-y := silead.o obj-$(CONFIG_TOUCHSCREEN_PROPERTIES) += of_touchscreen.o obj-$(CONFIG_TOUCHSCREEN_88PM860X) += 88pm860x-ts.o @@ -64,7 +65,8 @@ obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o obj-$(CONFIG_TOUCHSCREEN_PIXCIR) += pixcir_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_RM_TS) += raydium_i2c_ts.o obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o -obj-$(CONFIG_TOUCHSCREEN_SILEAD) += silead.o +obj-$(CONFIG_TOUCHSCREEN_SILEAD) += silead-ts.o +silead-ts-$(CONFIG_DMI) += silead_dmi.o obj-$(CONFIG_TOUCHSCREEN_SIS_I2C) += sis_i2c.o obj-$(CONFIG_TOUCHSCREEN_ST1232) += st1232.o obj-$(CONFIG_TOUCHSCREEN_STMPE) += stmpe-ts.o diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c index d3dd9bb..b35120f 100644 --- a/drivers/input/touchscreen/silead.c +++ b/drivers/input/touchscreen/silead.c @@ -33,6 +33,8 @@ #include #include +#include "silead_dmi.h" + #define SILEAD_TS_NAME "silead_ts" #define SILEAD_REG_RESET 0xE0 @@ -468,6 +470,7 @@ static int silead_ts_probe(struct i2c_client *client, if (error) return error; + silead_ts_dmi_add_props(client); silead_ts_read_props(client); /* We must have the IRQ provided by DT or ACPI subsytem */ diff --git a/drivers/input/touchscreen/silead_dmi.c b/drivers/input/touchscreen/silead_dmi.c new file mode 100644 index 0000000..dfbd823 --- /dev/null +++ b/drivers/input/touchscreen/silead_dmi.c @@ -0,0 +1,71 @@ +/* + * 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 + */ + +#include +#include +#include +#include + +static const 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 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 dmi_system_id silead_ts_dmi_table[] = { + { + .ident = "CUBE iwork8 Air", + .driver_data = (void *)&cube_iwork8_air_props, + .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_props, + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), + /* jumperx.T87.KFBNEEA02 with the version-nr dropped */ + DMI_MATCH(DMI_BIOS_VERSION, "jumperx.T87.KFBNEEA"), + }, + }, + { }, +}; + +void silead_ts_dmi_add_props(struct i2c_client *client) +{ + const struct dmi_system_id *dmi_id; + int ret; + + dmi_id = dmi_first_match(silead_ts_dmi_table); + if (dmi_id) { + ret = device_add_properties(&client->dev, dmi_id->driver_data); + if (ret) + dev_err(&client->dev, "Add properties error %d\n", ret); + } +} diff --git a/drivers/input/touchscreen/silead_dmi.h b/drivers/input/touchscreen/silead_dmi.h new file mode 100644 index 0000000..dc86017 --- /dev/null +++ b/drivers/input/touchscreen/silead_dmi.h @@ -0,0 +1,26 @@ +/* + * 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 + */ + +#ifndef _SILEAD_DMI_H_ +#define _SILEAD_DMI_H_ + +#include + +#ifdef CONFIG_DMI +void silead_ts_dmi_add_props(struct i2c_client *client); +#else +static inline void silead_ts_dmi_add_props(struct i2c_client *client) {} +#endif + +#endif