xref: /linux/drivers/input/touchscreen/cyttsp_i2c.c (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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