1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * cyttsp_i2c.c 4 * Cypress TrueTouch(TM) Standard Product (TTSP) I2C touchscreen driver. 5 * For use with Cypress Txx4xx parts. 6 * Supported parts include: 7 * TMA4XX 8 * TMA1036 9 * 10 * Copyright (C) 2009, 2010, 2011 Cypress Semiconductor, Inc. 11 * Copyright (C) 2012 Javier Martinez Canillas <javier@dowhile0.org> 12 * Copyright (C) 2013 Cypress Semiconductor 13 * 14 * Contact Cypress Semiconductor at www.cypress.com <ttdrivers@cypress.com> 15 */ 16 17 #include "cyttsp4_core.h" 18 19 #include <linux/i2c.h> 20 #include <linux/input.h> 21 22 #define CYTTSP4_I2C_DATA_SIZE (3 * 256) 23 24 static const struct cyttsp4_bus_ops cyttsp4_i2c_bus_ops = { 25 .bustype = BUS_I2C, 26 .write = cyttsp_i2c_write_block_data, 27 .read = cyttsp_i2c_read_block_data, 28 }; 29 30 static int cyttsp4_i2c_probe(struct i2c_client *client) 31 { 32 struct cyttsp4 *ts; 33 34 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 35 dev_err(&client->dev, "I2C functionality not Supported\n"); 36 return -EIO; 37 } 38 39 ts = cyttsp4_probe(&cyttsp4_i2c_bus_ops, &client->dev, client->irq, 40 CYTTSP4_I2C_DATA_SIZE); 41 42 return PTR_ERR_OR_ZERO(ts); 43 } 44 45 static void cyttsp4_i2c_remove(struct i2c_client *client) 46 { 47 struct cyttsp4 *ts = i2c_get_clientdata(client); 48 49 cyttsp4_remove(ts); 50 } 51 52 static const struct i2c_device_id cyttsp4_i2c_id[] = { 53 { CYTTSP4_I2C_NAME, 0 }, 54 { } 55 }; 56 MODULE_DEVICE_TABLE(i2c, cyttsp4_i2c_id); 57 58 static struct i2c_driver cyttsp4_i2c_driver = { 59 .driver = { 60 .name = CYTTSP4_I2C_NAME, 61 .pm = pm_ptr(&cyttsp4_pm_ops), 62 }, 63 .probe = cyttsp4_i2c_probe, 64 .remove = cyttsp4_i2c_remove, 65 .id_table = cyttsp4_i2c_id, 66 }; 67 68 module_i2c_driver(cyttsp4_i2c_driver); 69 70 MODULE_LICENSE("GPL"); 71 MODULE_DESCRIPTION("Cypress TrueTouch(R) Standard Product (TTSP) I2C driver"); 72 MODULE_AUTHOR("Cypress"); 73