···99 "microchip,cap1106"1010 "microchip,cap1126"1111 "microchip,cap1188"1212+ "microchip,cap1206"12131314 reg: The I2C slave address of the device.1415
···791791 To compile this driver as a module, choose M here: the792792 module will be called pmic-keys.793793794794+config KEYBOARD_CYPRESS_SF795795+ tristate "Cypress StreetFighter touchkey support"796796+ depends on I2C797797+ help798798+ Say Y here if you want to enable support for Cypress StreetFighter799799+ touchkeys.800800+801801+ To compile this driver as a module, choose M here: the802802+ module will be called cypress-sf.803803+794804endif
···425425config TOUCHSCREEN_ILI210X426426 tristate "Ilitek ILI210X based touchscreen"427427 depends on I2C428428+ select CRC_CCITT428429 help429430 Say Y here if you have a ILI210X based touchscreen430431 controller. This driver supports models ILI2102,
+2-1
drivers/input/touchscreen/Makefile
···66# Each configuration option enables a list of files.7788wm97xx-ts-y := wm97xx-core.o99+goodix_ts-y := goodix.o goodix_fwupload.o9101011obj-$(CONFIG_TOUCHSCREEN_88PM860X) += 88pm860x-ts.o1112obj-$(CONFIG_TOUCHSCREEN_AD7877) += ad7877.o···4544obj-$(CONFIG_TOUCHSCREEN_EGALAX_SERIAL) += egalax_ts_serial.o4645obj-$(CONFIG_TOUCHSCREEN_EXC3000) += exc3000.o4746obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o4848-obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix.o4747+obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix_ts.o4948obj-$(CONFIG_TOUCHSCREEN_HIDEEP) += hideep.o5049obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o5150obj-$(CONFIG_TOUCHSCREEN_ILITEK) += ilitek_ts_i2c.o
+76-124
drivers/input/touchscreen/ads7846.c
···101101 struct spi_device *spi;102102 struct regulator *reg;103103104104-#if IS_ENABLED(CONFIG_HWMON)105105- struct device *hwmon;106106-#endif107107-108104 u16 model;109105 u16 vref_mv;110106 u16 vref_delay_usecs;···138142139143 int (*filter)(void *data, int data_idx, int *val);140144 void *filter_data;141141- void (*filter_cleanup)(void *data);142145 int (*get_pendown_state)(void);143146 int gpio_pendown;144147145148 void (*wait_for_sync)(void);149149+};150150+151151+enum ads7846_filter {152152+ ADS7846_FILTER_OK,153153+ ADS7846_FILTER_REPEAT,154154+ ADS7846_FILTER_IGNORE,146155};147156148157/* leave chip selected when we're done, for quicker re-select? */···550549551550static int ads784x_hwmon_register(struct spi_device *spi, struct ads7846 *ts)552551{552552+ struct device *hwmon;553553+553554 /* hwmon sensors need a reference voltage */554555 switch (ts->model) {555556 case 7846:···572569 break;573570 }574571575575- ts->hwmon = hwmon_device_register_with_groups(&spi->dev, spi->modalias,576576- ts, ads7846_attr_groups);572572+ hwmon = devm_hwmon_device_register_with_groups(&spi->dev,573573+ spi->modalias, ts,574574+ ads7846_attr_groups);577575578578- return PTR_ERR_OR_ZERO(ts->hwmon);579579-}580580-581581-static void ads784x_hwmon_unregister(struct spi_device *spi,582582- struct ads7846 *ts)583583-{584584- if (ts->hwmon)585585- hwmon_device_unregister(ts->hwmon);576576+ return PTR_ERR_OR_ZERO(hwmon);586577}587578588579#else···584587 struct ads7846 *ts)585588{586589 return 0;587587-}588588-589589-static inline void ads784x_hwmon_unregister(struct spi_device *spi,590590- struct ads7846 *ts)591591-{592590}593591#endif594592···10061014 ts->get_pendown_state = pdata->get_pendown_state;10071015 } else if (gpio_is_valid(pdata->gpio_pendown)) {1008101610091009- err = gpio_request_one(pdata->gpio_pendown, GPIOF_IN,10101010- "ads7846_pendown");10171017+ err = devm_gpio_request_one(&spi->dev, pdata->gpio_pendown,10181018+ GPIOF_IN, "ads7846_pendown");10111019 if (err) {10121020 dev_err(&spi->dev,10131021 "failed to request/setup pendown GPIO%d: %d\n",···12041212}12051213#endif1206121412151215+static void ads7846_regulator_disable(void *regulator)12161216+{12171217+ regulator_disable(regulator);12181218+}12191219+12071220static int ads7846_probe(struct spi_device *spi)12081221{12091222 const struct ads7846_platform_data *pdata;12101223 struct ads7846 *ts;12241224+ struct device *dev = &spi->dev;12111225 struct ads7846_packet *packet;12121226 struct input_dev *input_dev;12131227 unsigned long irq_flags;12141228 int err;1215122912161230 if (!spi->irq) {12171217- dev_dbg(&spi->dev, "no IRQ?\n");12311231+ dev_dbg(dev, "no IRQ?\n");12181232 return -EINVAL;12191233 }1220123412211235 /* don't exceed max specified sample rate */12221236 if (spi->max_speed_hz > (125000 * SAMPLE_BITS)) {12231223- dev_err(&spi->dev, "f(sample) %d KHz?\n",12241224- (spi->max_speed_hz/SAMPLE_BITS)/1000);12371237+ dev_err(dev, "f(sample) %d KHz?\n",12381238+ (spi->max_speed_hz/SAMPLE_BITS)/1000);12251239 return -EINVAL;12261240 }12271241···12431245 if (err < 0)12441246 return err;1245124712461246- ts = kzalloc(sizeof(struct ads7846), GFP_KERNEL);12471247- packet = kzalloc(sizeof(struct ads7846_packet), GFP_KERNEL);12481248- input_dev = input_allocate_device();12491249- if (!ts || !packet || !input_dev) {12501250- err = -ENOMEM;12511251- goto err_free_mem;12521252- }12481248+ ts = devm_kzalloc(dev, sizeof(struct ads7846), GFP_KERNEL);12491249+ if (!ts)12501250+ return -ENOMEM;12511251+12521252+ packet = devm_kzalloc(dev, sizeof(struct ads7846_packet), GFP_KERNEL);12531253+ if (!packet)12541254+ return -ENOMEM;12551255+12561256+ input_dev = devm_input_allocate_device(dev);12571257+ if (!input_dev)12581258+ return -ENOMEM;1253125912541260 spi_set_drvdata(spi, ts);12551261···12641262 mutex_init(&ts->lock);12651263 init_waitqueue_head(&ts->wait);1266126412671267- pdata = dev_get_platdata(&spi->dev);12651265+ pdata = dev_get_platdata(dev);12681266 if (!pdata) {12691269- pdata = ads7846_probe_dt(&spi->dev);12701270- if (IS_ERR(pdata)) {12711271- err = PTR_ERR(pdata);12721272- goto err_free_mem;12731273- }12671267+ pdata = ads7846_probe_dt(dev);12681268+ if (IS_ERR(pdata))12691269+ return PTR_ERR(pdata);12741270 }1275127112761272 ts->model = pdata->model ? : 7846;···12761276 ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;12771277 ts->vref_mv = pdata->vref_mv;1278127812791279- if (pdata->filter != NULL) {12801280- if (pdata->filter_init != NULL) {12811281- err = pdata->filter_init(pdata, &ts->filter_data);12821282- if (err < 0)12831283- goto err_free_mem;12841284- }12851285- ts->filter = pdata->filter;12861286- ts->filter_cleanup = pdata->filter_cleanup;12871287- } else if (pdata->debounce_max) {12791279+ if (pdata->debounce_max) {12881280 ts->debounce_max = pdata->debounce_max;12891281 if (ts->debounce_max < 2)12901282 ts->debounce_max = 2;···1290129812911299 err = ads7846_setup_pendown(spi, ts, pdata);12921300 if (err)12931293- goto err_cleanup_filter;13011301+ return err;1294130212951303 if (pdata->penirq_recheck_delay_usecs)12961304 ts->penirq_recheck_delay_usecs =···1298130612991307 ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync;1300130813011301- snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));13091309+ snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(dev));13021310 snprintf(ts->name, sizeof(ts->name), "ADS%d Touchscreen", ts->model);1303131113041312 input_dev->name = ts->name;13051313 input_dev->phys = ts->phys;13061306- input_dev->dev.parent = &spi->dev;1307131413081308- input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);13091309- input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);13151315+ input_dev->id.bustype = BUS_SPI;13161316+ input_dev->id.product = pdata->model;13171317+13181318+ input_set_capability(input_dev, EV_KEY, BTN_TOUCH);13101319 input_set_abs_params(input_dev, ABS_X,13111320 pdata->x_min ? : 0,13121321 pdata->x_max ? : MAX_12BIT,···1338134513391346 ads7846_setup_spi_msg(ts, pdata);1340134713411341- ts->reg = regulator_get(&spi->dev, "vcc");13481348+ ts->reg = devm_regulator_get(dev, "vcc");13421349 if (IS_ERR(ts->reg)) {13431350 err = PTR_ERR(ts->reg);13441344- dev_err(&spi->dev, "unable to get regulator: %d\n", err);13451345- goto err_free_gpio;13511351+ dev_err(dev, "unable to get regulator: %d\n", err);13521352+ return err;13461353 }1347135413481355 err = regulator_enable(ts->reg);13491356 if (err) {13501350- dev_err(&spi->dev, "unable to enable regulator: %d\n", err);13511351- goto err_put_regulator;13571357+ dev_err(dev, "unable to enable regulator: %d\n", err);13581358+ return err;13521359 }13601360+13611361+ err = devm_add_action_or_reset(dev, ads7846_regulator_disable, ts->reg);13621362+ if (err)13631363+ return err;1353136413541365 irq_flags = pdata->irq_flags ? : IRQF_TRIGGER_FALLING;13551366 irq_flags |= IRQF_ONESHOT;1356136713571357- err = request_threaded_irq(spi->irq, ads7846_hard_irq, ads7846_irq,13581358- irq_flags, spi->dev.driver->name, ts);13591359- if (err && !pdata->irq_flags) {13601360- dev_info(&spi->dev,13681368+ err = devm_request_threaded_irq(dev, spi->irq,13691369+ ads7846_hard_irq, ads7846_irq,13701370+ irq_flags, dev->driver->name, ts);13711371+ if (err && err != -EPROBE_DEFER && !pdata->irq_flags) {13721372+ dev_info(dev,13611373 "trying pin change workaround on irq %d\n", spi->irq);13621374 irq_flags |= IRQF_TRIGGER_RISING;13631363- err = request_threaded_irq(spi->irq,13641364- ads7846_hard_irq, ads7846_irq,13651365- irq_flags, spi->dev.driver->name, ts);13751375+ err = devm_request_threaded_irq(dev, spi->irq,13761376+ ads7846_hard_irq, ads7846_irq,13771377+ irq_flags, dev->driver->name,13781378+ ts);13661379 }1367138013681381 if (err) {13691369- dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);13701370- goto err_disable_regulator;13821382+ dev_dbg(dev, "irq %d busy?\n", spi->irq);13831383+ return err;13711384 }1372138513731386 err = ads784x_hwmon_register(spi, ts);13741387 if (err)13751375- goto err_free_irq;13881388+ return err;1376138913771377- dev_info(&spi->dev, "touchscreen, irq %d\n", spi->irq);13901390+ dev_info(dev, "touchscreen, irq %d\n", spi->irq);1378139113791392 /*13801393 * Take a first sample, leaving nPENIRQ active and vREF off; avoid13811394 * the touchscreen, in case it's not connected.13821395 */13831396 if (ts->model == 7845)13841384- ads7845_read12_ser(&spi->dev, PWRDOWN);13971397+ ads7845_read12_ser(dev, PWRDOWN);13851398 else13861386- (void) ads7846_read12_ser(&spi->dev, READ_12BIT_SER(vaux));13991399+ (void) ads7846_read12_ser(dev, READ_12BIT_SER(vaux));1387140013881388- err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group);14011401+ err = devm_device_add_group(dev, &ads784x_attr_group);13891402 if (err)13901390- goto err_remove_hwmon;14031403+ return err;1391140413921405 err = input_register_device(input_dev);13931406 if (err)13941394- goto err_remove_attr_group;14071407+ return err;1395140813961396- device_init_wakeup(&spi->dev, pdata->wakeup);14091409+ device_init_wakeup(dev, pdata->wakeup);1397141013981411 /*13991412 * If device does not carry platform data we must have allocated it14001413 * when parsing DT data.14011414 */14021402- if (!dev_get_platdata(&spi->dev))14031403- devm_kfree(&spi->dev, (void *)pdata);14151415+ if (!dev_get_platdata(dev))14161416+ devm_kfree(dev, (void *)pdata);1404141714051418 return 0;14061406-14071407- err_remove_attr_group:14081408- sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);14091409- err_remove_hwmon:14101410- ads784x_hwmon_unregister(spi, ts);14111411- err_free_irq:14121412- free_irq(spi->irq, ts);14131413- err_disable_regulator:14141414- regulator_disable(ts->reg);14151415- err_put_regulator:14161416- regulator_put(ts->reg);14171417- err_free_gpio:14181418- if (!ts->get_pendown_state)14191419- gpio_free(ts->gpio_pendown);14201420- err_cleanup_filter:14211421- if (ts->filter_cleanup)14221422- ts->filter_cleanup(ts->filter_data);14231423- err_free_mem:14241424- input_free_device(input_dev);14251425- kfree(packet);14261426- kfree(ts);14271427- return err;14281419}1429142014301421static int ads7846_remove(struct spi_device *spi)14311422{14321423 struct ads7846 *ts = spi_get_drvdata(spi);1433142414341434- sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);14351435-14361436- ads7846_disable(ts);14371437- free_irq(ts->spi->irq, ts);14381438-14391439- input_unregister_device(ts->input);14401440-14411441- ads784x_hwmon_unregister(spi, ts);14421442-14431443- regulator_put(ts->reg);14441444-14451445- if (!ts->get_pendown_state) {14461446- /*14471447- * If we are not using specialized pendown method we must14481448- * have been relying on gpio we set up ourselves.14491449- */14501450- gpio_free(ts->gpio_pendown);14511451- }14521452-14531453- if (ts->filter_cleanup)14541454- ts->filter_cleanup(ts->filter_data);14551455-14561456- kfree(ts->packet);14571457- kfree(ts);14581458-14591459- dev_dbg(&spi->dev, "unregistered touchscreen\n");14251425+ ads7846_stop(ts);1460142614611427 return 0;14621428}
+2-2
drivers/input/touchscreen/elants_i2c.c
···14391439 if (error)14401440 return error;1441144114421442- error = devm_add_action(&client->dev, elants_i2c_power_off, ts);14421442+ error = devm_add_action_or_reset(&client->dev,14431443+ elants_i2c_power_off, ts);14431444 if (error) {14441445 dev_err(&client->dev,14451446 "failed to install power off action: %d\n", error);14461446- elants_i2c_power_off(ts);14471447 return error;14481448 }14491449
+126-145
drivers/input/touchscreen/goodix.c
···1414#include <linux/kernel.h>1515#include <linux/dmi.h>1616#include <linux/firmware.h>1717-#include <linux/gpio/consumer.h>1818-#include <linux/i2c.h>1919-#include <linux/input.h>2020-#include <linux/input/mt.h>2121-#include <linux/input/touchscreen.h>2217#include <linux/module.h>2318#include <linux/delay.h>2419#include <linux/irq.h>2520#include <linux/interrupt.h>2626-#include <linux/regulator/consumer.h>2721#include <linux/slab.h>2822#include <linux/acpi.h>2923#include <linux/of.h>3024#include <asm/unaligned.h>2525+#include "goodix.h"31263227#define GOODIX_GPIO_INT_NAME "irq"3328#define GOODIX_GPIO_RST_NAME "reset"···3338#define GOODIX_CONTACT_SIZE 83439#define GOODIX_MAX_CONTACT_SIZE 93540#define GOODIX_MAX_CONTACTS 103636-#define GOODIX_MAX_KEYS 737413842#define GOODIX_CONFIG_MIN_LENGTH 1863943#define GOODIX_CONFIG_911_LENGTH 1864044#define GOODIX_CONFIG_967_LENGTH 2284145#define GOODIX_CONFIG_GT9X_LENGTH 2404242-#define GOODIX_CONFIG_MAX_LENGTH 2404343-4444-/* Register defines */4545-#define GOODIX_REG_COMMAND 0x80404646-#define GOODIX_CMD_SCREEN_OFF 0x054747-4848-#define GOODIX_READ_COOR_ADDR 0x814E4949-#define GOODIX_GT1X_REG_CONFIG_DATA 0x80505050-#define GOODIX_GT9X_REG_CONFIG_DATA 0x80475151-#define GOODIX_REG_ID 0x814052465347#define GOODIX_BUFFER_STATUS_READY BIT(7)5448#define GOODIX_HAVE_KEY BIT(4)···5268#define ACPI_GPIO_SUPPORT5369#endif54705555-struct goodix_ts_data;5656-5757-enum goodix_irq_pin_access_method {5858- IRQ_PIN_ACCESS_NONE,5959- IRQ_PIN_ACCESS_GPIO,6060- IRQ_PIN_ACCESS_ACPI_GPIO,6161- IRQ_PIN_ACCESS_ACPI_METHOD,6262-};6363-6464-struct goodix_chip_data {6565- u16 config_addr;6666- int config_len;6767- int (*check_config)(struct goodix_ts_data *ts, const u8 *cfg, int len);6868- void (*calc_config_checksum)(struct goodix_ts_data *ts);6969-};7070-7171struct goodix_chip_id {7272 const char *id;7373 const struct goodix_chip_data *data;7474-};7575-7676-#define GOODIX_ID_MAX_LEN 47777-7878-struct goodix_ts_data {7979- struct i2c_client *client;8080- struct input_dev *input_dev;8181- const struct goodix_chip_data *chip;8282- struct touchscreen_properties prop;8383- unsigned int max_touch_num;8484- unsigned int int_trigger_type;8585- struct regulator *avdd28;8686- struct regulator *vddio;8787- struct gpio_desc *gpiod_int;8888- struct gpio_desc *gpiod_rst;8989- int gpio_count;9090- int gpio_int_idx;9191- char id[GOODIX_ID_MAX_LEN + 1];9292- u16 version;9393- const char *cfg_name;9494- bool reset_controller_at_probe;9595- bool load_cfg_from_disk;9696- struct completion firmware_loading_complete;9797- unsigned long irq_flags;9898- enum goodix_irq_pin_access_method irq_pin_access_method;9999- unsigned int contact_size;100100- u8 config[GOODIX_CONFIG_MAX_LENGTH];101101- unsigned short keymap[GOODIX_MAX_KEYS];10274};1037510476static int goodix_check_cfg_8(struct goodix_ts_data *ts,···200260 * @buf: raw write data buffer.201261 * @len: length of the buffer to write202262 */203203-static int goodix_i2c_read(struct i2c_client *client,204204- u16 reg, u8 *buf, int len)263263+int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len)205264{206265 struct i2c_msg msgs[2];207266 __be16 wbuf = cpu_to_be16(reg);···217278 msgs[1].buf = buf;218279219280 ret = i2c_transfer(client->adapter, msgs, 2);220220- return ret < 0 ? ret : (ret != ARRAY_SIZE(msgs) ? -EIO : 0);281281+ if (ret >= 0)282282+ ret = (ret == ARRAY_SIZE(msgs) ? 0 : -EIO);283283+284284+ if (ret)285285+ dev_err(&client->dev, "Error reading %d bytes from 0x%04x: %d\n",286286+ len, reg, ret);287287+ return ret;221288}222289223290/**···234289 * @buf: raw data buffer to write.235290 * @len: length of the buffer to write236291 */237237-static int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf,238238- unsigned len)292292+int goodix_i2c_write(struct i2c_client *client, u16 reg, const u8 *buf, int len)239293{240294 u8 *addr_buf;241295 struct i2c_msg msg;···254310 msg.len = len + 2;255311256312 ret = i2c_transfer(client->adapter, &msg, 1);313313+ if (ret >= 0)314314+ ret = (ret == 1 ? 0 : -EIO);315315+257316 kfree(addr_buf);258258- return ret < 0 ? ret : (ret != 1 ? -EIO : 0);317317+318318+ if (ret)319319+ dev_err(&client->dev, "Error writing %d bytes to 0x%04x: %d\n",320320+ len, reg, ret);321321+ return ret;259322}260323261261-static int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)324324+int goodix_i2c_write_u8(struct i2c_client *client, u16 reg, u8 value)262325{263326 return goodix_i2c_write(client, reg, &value, sizeof(value));264327}···304353 do {305354 error = goodix_i2c_read(ts->client, addr, data,306355 header_contact_keycode_size);307307- if (error) {308308- dev_err(&ts->client->dev, "I2C transfer error: %d\n",309309- error);356356+ if (error)310357 return error;311311- }312358313359 if (data[0] & GOODIX_BUFFER_STATUS_READY) {314360 touch_num = data[0] & 0x0f;···324376 }325377326378 return touch_num;379379+ }380380+381381+ if (data[0] == 0 && ts->firmware_name) {382382+ if (goodix_handle_fw_request(ts))383383+ return 0;327384 }328385329386 usleep_range(1000, 2000); /* Poll every 1 - 2 ms */···433480 struct goodix_ts_data *ts = dev_id;434481435482 goodix_process_events(ts);436436-437437- if (goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0) < 0)438438- dev_err(&ts->client->dev, "I2C write end_cmd error\n");483483+ goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0);439484440485 return IRQ_HANDLED;441486}···549598 * @cfg: config firmware to write to device550599 * @len: config data length551600 */552552-static int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)601601+int goodix_send_cfg(struct goodix_ts_data *ts, const u8 *cfg, int len)553602{554603 int error;555604···558607 return error;559608560609 error = goodix_i2c_write(ts->client, ts->chip->config_addr, cfg, len);561561- if (error) {562562- dev_err(&ts->client->dev, "Failed to write config data: %d",563563- error);610610+ if (error)564611 return error;565565- }612612+566613 dev_dbg(&ts->client->dev, "Config sent successfully.");567614568615 /* Let the firmware reconfigure itself, so sleep for 10ms */···645696 return -EINVAL; /* Never reached */646697}647698648648-static int goodix_int_sync(struct goodix_ts_data *ts)699699+int goodix_int_sync(struct goodix_ts_data *ts)649700{650701 int error;651702652703 error = goodix_irq_direction_output(ts, 0);653704 if (error)654654- return error;705705+ goto error;655706656707 msleep(50); /* T5: 50ms */657708658709 error = goodix_irq_direction_input(ts);659710 if (error)660660- return error;711711+ goto error;661712662713 return 0;714714+715715+error:716716+ dev_err(&ts->client->dev, "Controller irq sync failed.\n");717717+ return error;718718+}719719+720720+/**721721+ * goodix_reset_no_int_sync - Reset device, leaving interrupt line in output mode722722+ *723723+ * @ts: goodix_ts_data pointer724724+ */725725+int goodix_reset_no_int_sync(struct goodix_ts_data *ts)726726+{727727+ int error;728728+729729+ /* begin select I2C slave addr */730730+ error = gpiod_direction_output(ts->gpiod_rst, 0);731731+ if (error)732732+ goto error;733733+734734+ msleep(20); /* T2: > 10ms */735735+736736+ /* HIGH: 0x28/0x29, LOW: 0xBA/0xBB */737737+ error = goodix_irq_direction_output(ts, ts->client->addr == 0x14);738738+ if (error)739739+ goto error;740740+741741+ usleep_range(100, 2000); /* T3: > 100us */742742+743743+ error = gpiod_direction_output(ts->gpiod_rst, 1);744744+ if (error)745745+ goto error;746746+747747+ usleep_range(6000, 10000); /* T4: > 5ms */748748+749749+ /* end select I2C slave addr */750750+ error = gpiod_direction_input(ts->gpiod_rst);751751+ if (error)752752+ goto error;753753+754754+ return 0;755755+756756+error:757757+ dev_err(&ts->client->dev, "Controller reset failed.\n");758758+ return error;663759}664760665761/**···716722{717723 int error;718724719719- /* begin select I2C slave addr */720720- error = gpiod_direction_output(ts->gpiod_rst, 0);725725+ error = goodix_reset_no_int_sync(ts);721726 if (error)722727 return error;723728724724- msleep(20); /* T2: > 10ms */725725-726726- /* HIGH: 0x28/0x29, LOW: 0xBA/0xBB */727727- error = goodix_irq_direction_output(ts, ts->client->addr == 0x14);728728- if (error)729729- return error;730730-731731- usleep_range(100, 2000); /* T3: > 100us */732732-733733- error = gpiod_direction_output(ts->gpiod_rst, 1);734734- if (error)735735- return error;736736-737737- usleep_range(6000, 10000); /* T4: > 5ms */738738-739739- /* end select I2C slave addr */740740- error = gpiod_direction_input(ts->gpiod_rst);741741- if (error)742742- return error;743743-744744- error = goodix_int_sync(ts);745745- if (error)746746- return error;747747-748748- return 0;729729+ return goodix_int_sync(ts);749730}750731751732#ifdef ACPI_GPIO_SUPPORT···945976 int x_max, y_max;946977 int error;947978948948- error = goodix_i2c_read(ts->client, ts->chip->config_addr,949949- ts->config, ts->chip->config_len);950950- if (error) {951951- dev_warn(&ts->client->dev, "Error reading config: %d\n",952952- error);953953- ts->int_trigger_type = GOODIX_INT_TRIGGER;954954- ts->max_touch_num = GOODIX_MAX_CONTACTS;955955- return;979979+ /*980980+ * On controllers where we need to upload the firmware981981+ * (controllers without flash) ts->config already has the config982982+ * at this point and the controller itself does not have it yet!983983+ */984984+ if (!ts->firmware_name) {985985+ error = goodix_i2c_read(ts->client, ts->chip->config_addr,986986+ ts->config, ts->chip->config_len);987987+ if (error) {988988+ ts->int_trigger_type = GOODIX_INT_TRIGGER;989989+ ts->max_touch_num = GOODIX_MAX_CONTACTS;990990+ return;991991+ }956992 }957993958994 ts->int_trigger_type = ts->config[TRIGGER_LOC] & 0x03;···9851011 char id_str[GOODIX_ID_MAX_LEN + 1];98610129871013 error = goodix_i2c_read(ts->client, GOODIX_REG_ID, buf, sizeof(buf));988988- if (error) {989989- dev_err(&ts->client->dev, "read version failed: %d\n", error);10141014+ if (error)9901015 return error;991991- }99210169931017 memcpy(id_str, buf, GOODIX_ID_MAX_LEN);9941018 id_str[GOODIX_ID_MAX_LEN] = 0;···10121040 u8 test;1013104110141042 while (retry++ < 2) {10151015- error = goodix_i2c_read(client, GOODIX_REG_ID,10161016- &test, 1);10431043+ error = goodix_i2c_read(client, GOODIX_REG_ID, &test, 1);10171044 if (!error)10181045 return 0;1019104610201020- dev_err(&client->dev, "i2c test failed attempt %d: %d\n",10211021- retry, error);10221047 msleep(20);10231048 }10241049···11511182 struct goodix_ts_data *ts = ctx;11521183 int error;1153118411541154- if (cfg) {11851185+ if (ts->firmware_name) {11861186+ if (!cfg)11871187+ goto err_release_cfg;11881188+11891189+ error = goodix_check_cfg(ts, cfg->data, cfg->size);11901190+ if (error)11911191+ goto err_release_cfg;11921192+11931193+ memcpy(ts->config, cfg->data, cfg->size);11941194+ } else if (cfg) {11551195 /* send device configuration to the firmware */11561196 error = goodix_send_cfg(ts, cfg->data, cfg->size);11571197 if (error)···11861208 const struct i2c_device_id *id)11871209{11881210 struct goodix_ts_data *ts;12111211+ const char *cfg_name;11891212 int error;1190121311911214 dev_dbg(&client->dev, "I2C Address: 0x%02x\n", client->addr);···12361257 if (ts->reset_controller_at_probe) {12371258 /* reset the controller */12381259 error = goodix_reset(ts);12391239- if (error) {12401240- dev_err(&client->dev, "Controller reset failed.\n");12601260+ if (error)12411261 return error;12421242- }12431262 }1244126312451264 error = goodix_i2c_test(client);···12521275 return error;12531276 }1254127712551255- error = goodix_read_version(ts);12561256- if (error) {12571257- dev_err(&client->dev, "Read version failed.\n");12781278+ error = goodix_firmware_check(ts);12791279+ if (error)12581280 return error;12591259- }12811281+12821282+ error = goodix_read_version(ts);12831283+ if (error)12841284+ return error;1260128512611286 ts->chip = goodix_get_chip_data(ts->id);1262128712631288 if (ts->load_cfg_from_disk) {12641289 /* update device config */12651265- ts->cfg_name = devm_kasprintf(&client->dev, GFP_KERNEL,12661266- "goodix_%s_cfg.bin", ts->id);12671267- if (!ts->cfg_name)12681268- return -ENOMEM;12901290+ error = device_property_read_string(&client->dev,12911291+ "goodix,config-name",12921292+ &cfg_name);12931293+ if (!error)12941294+ snprintf(ts->cfg_name, sizeof(ts->cfg_name),12951295+ "goodix/%s", cfg_name);12961296+ else12971297+ snprintf(ts->cfg_name, sizeof(ts->cfg_name),12981298+ "goodix_%s_cfg.bin", ts->id);1269129912701300 error = request_firmware_nowait(THIS_MODULE, true, ts->cfg_name,12711301 &client->dev, GFP_KERNEL, ts,···13221338 /* Free IRQ as IRQ pin is used as output in the suspend sequence */13231339 goodix_free_irq(ts);1324134013411341+ /* Save reference (calibration) info if necessary */13421342+ goodix_save_bak_ref(ts);13431343+13251344 /* Output LOW on the INT pin for 5 ms */13261345 error = goodix_irq_direction_output(ts, 0);13271346 if (error) {···13371350 error = goodix_i2c_write_u8(ts->client, GOODIX_REG_COMMAND,13381351 GOODIX_CMD_SCREEN_OFF);13391352 if (error) {13401340- dev_err(&ts->client->dev, "Screen off command failed\n");13411353 goodix_irq_direction_input(ts);13421354 goodix_request_irq(ts);13431355 return -EAGAIN;···1379139313801394 error = goodix_i2c_read(ts->client, ts->chip->config_addr,13811395 &config_ver, 1);13821382- if (error)13831383- dev_warn(dev, "Error reading config version: %d, resetting controller\n",13841384- error);13851385- else if (config_ver != ts->config[0])13961396+ if (!error && config_ver != ts->config[0])13861397 dev_info(dev, "Config version mismatch %d != %d, resetting controller\n",13871398 config_ver, ts->config[0]);1388139913891400 if (error != 0 || config_ver != ts->config[0]) {13901401 error = goodix_reset(ts);13911391- if (error) {13921392- dev_err(dev, "Controller reset failed.\n");14021402+ if (error)13931403 return error;13941394- }1395140413961405 error = goodix_send_cfg(ts, ts->config, ts->chip->config_len);13971406 if (error)
···11-/* SPDX-License-Identifier: GPL-2.0 */22-#ifndef _LINUX_CY8CTMG110_PDATA_H33-#define _LINUX_CY8CTMG110_PDATA_H44-55-struct cy8ctmg110_pdata66-{77- int reset_pin; /* Reset pin is wired to this GPIO (optional) */88-};99-1010-#endif
-15
include/linux/spi/ads7846.h
···11/* SPDX-License-Identifier: GPL-2.0 */22/* linux/spi/ads7846.h */3344-/* Touchscreen characteristics vary between boards and models. The55- * platform_data for the device's "struct device" holds this information.66- *77- * It's OK if the min/max values are zero.88- */99-enum ads7846_filter {1010- ADS7846_FILTER_OK,1111- ADS7846_FILTER_REPEAT,1212- ADS7846_FILTER_IGNORE,1313-};1414-154struct ads7846_platform_data {165 u16 model; /* 7843, 7845, 7846, 7873. */176 u16 vref_delay_usecs; /* 0 for external vref; etc */···4051 int gpio_pendown_debounce; /* platform specific debounce time for4152 * the gpio_pendown */4253 int (*get_pendown_state)(void);4343- int (*filter_init) (const struct ads7846_platform_data *pdata,4444- void **filter_data);4545- int (*filter) (void *filter_data, int data_idx, int *val);4646- void (*filter_cleanup)(void *filter_data);4754 void (*wait_for_sync)(void);4855 bool wakeup;4956 unsigned long irq_flags;