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 const struct i2c_device_id *id) 32 { 33 struct cyttsp4 *ts; 34 35 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 36 dev_err(&client->dev, "I2C functionality not Supported\n"); 37 return -EIO; 38 } 39 40 ts = cyttsp4_probe(&cyttsp4_i2c_bus_ops, &client->dev, client->irq, 41 CYTTSP4_I2C_DATA_SIZE); 42 43 return PTR_ERR_OR_ZERO(ts); 44 } 45 46 static int cyttsp4_i2c_remove(struct i2c_client *client) 47 { 48 struct cyttsp4 *ts = i2c_get_clientdata(client); 49 50 cyttsp4_remove(ts); 51 52 return 0; 53 } 54 55 static const struct i2c_device_id cyttsp4_i2c_id[] = { 56 { CYTTSP4_I2C_NAME, 0 }, 57 { } 58 }; 59 MODULE_DEVICE_TABLE(i2c, cyttsp4_i2c_id); 60 61 static struct i2c_driver cyttsp4_i2c_driver = { 62 .driver = { 63 .name = CYTTSP4_I2C_NAME, 64 .pm = &cyttsp4_pm_ops, 65 }, 66 .probe = cyttsp4_i2c_probe, 67 .remove = cyttsp4_i2c_remove, 68 .id_table = cyttsp4_i2c_id, 69 }; 70 71 module_i2c_driver(cyttsp4_i2c_driver); 72 73 MODULE_LICENSE("GPL"); 74 MODULE_DESCRIPTION("Cypress TrueTouch(R) Standard Product (TTSP) I2C driver"); 75 MODULE_AUTHOR("Cypress"); 76