1*97fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 24065d1e7SJavier Martinez Canillas /* 39664877eSFerruh Yigit * cyttsp_i2c.c 44065d1e7SJavier Martinez Canillas * Cypress TrueTouch(TM) Standard Product (TTSP) I2C touchscreen driver. 54065d1e7SJavier Martinez Canillas * For use with Cypress Txx3xx parts. 64065d1e7SJavier Martinez Canillas * Supported parts include: 74065d1e7SJavier Martinez Canillas * CY8CTST341 84065d1e7SJavier Martinez Canillas * CY8CTMA340 94065d1e7SJavier Martinez Canillas * 104065d1e7SJavier Martinez Canillas * Copyright (C) 2009, 2010, 2011 Cypress Semiconductor, Inc. 114065d1e7SJavier Martinez Canillas * Copyright (C) 2012 Javier Martinez Canillas <javier@dowhile0.org> 124065d1e7SJavier Martinez Canillas * 139664877eSFerruh Yigit * Contact Cypress Semiconductor at www.cypress.com <ttdrivers@cypress.com> 144065d1e7SJavier Martinez Canillas */ 154065d1e7SJavier Martinez Canillas 164065d1e7SJavier Martinez Canillas #include "cyttsp_core.h" 174065d1e7SJavier Martinez Canillas 184065d1e7SJavier Martinez Canillas #include <linux/i2c.h> 194065d1e7SJavier Martinez Canillas #include <linux/input.h> 204065d1e7SJavier Martinez Canillas 214065d1e7SJavier Martinez Canillas #define CY_I2C_DATA_SIZE 128 224065d1e7SJavier Martinez Canillas 234065d1e7SJavier Martinez Canillas static const struct cyttsp_bus_ops cyttsp_i2c_bus_ops = { 244065d1e7SJavier Martinez Canillas .bustype = BUS_I2C, 254065d1e7SJavier Martinez Canillas .write = cyttsp_i2c_write_block_data, 264065d1e7SJavier Martinez Canillas .read = cyttsp_i2c_read_block_data, 274065d1e7SJavier Martinez Canillas }; 284065d1e7SJavier Martinez Canillas 295298cc4cSBill Pemberton static int cyttsp_i2c_probe(struct i2c_client *client, 304065d1e7SJavier Martinez Canillas const struct i2c_device_id *id) 314065d1e7SJavier Martinez Canillas { 324065d1e7SJavier Martinez Canillas struct cyttsp *ts; 334065d1e7SJavier Martinez Canillas 344065d1e7SJavier Martinez Canillas if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 354065d1e7SJavier Martinez Canillas dev_err(&client->dev, "I2C functionality not Supported\n"); 364065d1e7SJavier Martinez Canillas return -EIO; 374065d1e7SJavier Martinez Canillas } 384065d1e7SJavier Martinez Canillas 394065d1e7SJavier Martinez Canillas ts = cyttsp_probe(&cyttsp_i2c_bus_ops, &client->dev, client->irq, 404065d1e7SJavier Martinez Canillas CY_I2C_DATA_SIZE); 414065d1e7SJavier Martinez Canillas 424065d1e7SJavier Martinez Canillas if (IS_ERR(ts)) 434065d1e7SJavier Martinez Canillas return PTR_ERR(ts); 444065d1e7SJavier Martinez Canillas 454065d1e7SJavier Martinez Canillas i2c_set_clientdata(client, ts); 464065d1e7SJavier Martinez Canillas return 0; 474065d1e7SJavier Martinez Canillas } 484065d1e7SJavier Martinez Canillas 494065d1e7SJavier Martinez Canillas static const struct i2c_device_id cyttsp_i2c_id[] = { 504065d1e7SJavier Martinez Canillas { CY_I2C_NAME, 0 }, 514065d1e7SJavier Martinez Canillas { } 524065d1e7SJavier Martinez Canillas }; 534065d1e7SJavier Martinez Canillas MODULE_DEVICE_TABLE(i2c, cyttsp_i2c_id); 544065d1e7SJavier Martinez Canillas 554065d1e7SJavier Martinez Canillas static struct i2c_driver cyttsp_i2c_driver = { 564065d1e7SJavier Martinez Canillas .driver = { 574065d1e7SJavier Martinez Canillas .name = CY_I2C_NAME, 584065d1e7SJavier Martinez Canillas .pm = &cyttsp_pm_ops, 594065d1e7SJavier Martinez Canillas }, 604065d1e7SJavier Martinez Canillas .probe = cyttsp_i2c_probe, 614065d1e7SJavier Martinez Canillas .id_table = cyttsp_i2c_id, 624065d1e7SJavier Martinez Canillas }; 634065d1e7SJavier Martinez Canillas 644a533835SDmitry Torokhov module_i2c_driver(cyttsp_i2c_driver); 654065d1e7SJavier Martinez Canillas 664065d1e7SJavier Martinez Canillas MODULE_LICENSE("GPL"); 674065d1e7SJavier Martinez Canillas MODULE_DESCRIPTION("Cypress TrueTouch(R) Standard Product (TTSP) I2C driver"); 684065d1e7SJavier Martinez Canillas MODULE_AUTHOR("Cypress"); 69