162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * cyttsp_i2c.c 462306a36Sopenharmony_ci * Cypress TrueTouch(TM) Standard Product (TTSP) I2C touchscreen driver. 562306a36Sopenharmony_ci * For use with Cypress Txx3xx parts. 662306a36Sopenharmony_ci * Supported parts include: 762306a36Sopenharmony_ci * CY8CTST341 862306a36Sopenharmony_ci * CY8CTMA340 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Copyright (C) 2009, 2010, 2011 Cypress Semiconductor, Inc. 1162306a36Sopenharmony_ci * Copyright (C) 2012 Javier Martinez Canillas <javier@dowhile0.org> 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Contact Cypress Semiconductor at www.cypress.com <ttdrivers@cypress.com> 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include "cyttsp_core.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include <linux/i2c.h> 1962306a36Sopenharmony_ci#include <linux/input.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define CY_I2C_NAME "cyttsp-i2c" 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define CY_I2C_DATA_SIZE 128 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic const struct cyttsp_bus_ops cyttsp_i2c_bus_ops = { 2662306a36Sopenharmony_ci .bustype = BUS_I2C, 2762306a36Sopenharmony_ci .write = cyttsp_i2c_write_block_data, 2862306a36Sopenharmony_ci .read = cyttsp_i2c_read_block_data, 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistatic int cyttsp_i2c_probe(struct i2c_client *client) 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci struct cyttsp *ts; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 3662306a36Sopenharmony_ci dev_err(&client->dev, "I2C functionality not Supported\n"); 3762306a36Sopenharmony_ci return -EIO; 3862306a36Sopenharmony_ci } 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci ts = cyttsp_probe(&cyttsp_i2c_bus_ops, &client->dev, client->irq, 4162306a36Sopenharmony_ci CY_I2C_DATA_SIZE); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci if (IS_ERR(ts)) 4462306a36Sopenharmony_ci return PTR_ERR(ts); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci i2c_set_clientdata(client, ts); 4762306a36Sopenharmony_ci return 0; 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistatic const struct i2c_device_id cyttsp_i2c_id[] = { 5162306a36Sopenharmony_ci { CY_I2C_NAME, 0 }, 5262306a36Sopenharmony_ci { } 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ciMODULE_DEVICE_TABLE(i2c, cyttsp_i2c_id); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cistatic const struct of_device_id cyttsp_of_i2c_match[] = { 5762306a36Sopenharmony_ci { .compatible = "cypress,cy8ctma340", }, 5862306a36Sopenharmony_ci { .compatible = "cypress,cy8ctst341", }, 5962306a36Sopenharmony_ci { /* sentinel */ } 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, cyttsp_of_i2c_match); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistatic struct i2c_driver cyttsp_i2c_driver = { 6462306a36Sopenharmony_ci .driver = { 6562306a36Sopenharmony_ci .name = CY_I2C_NAME, 6662306a36Sopenharmony_ci .pm = pm_sleep_ptr(&cyttsp_pm_ops), 6762306a36Sopenharmony_ci .of_match_table = cyttsp_of_i2c_match, 6862306a36Sopenharmony_ci }, 6962306a36Sopenharmony_ci .probe = cyttsp_i2c_probe, 7062306a36Sopenharmony_ci .id_table = cyttsp_i2c_id, 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cimodule_i2c_driver(cyttsp_i2c_driver); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 7662306a36Sopenharmony_ciMODULE_DESCRIPTION("Cypress TrueTouch(R) Standard Product (TTSP) I2C driver"); 7762306a36Sopenharmony_ciMODULE_AUTHOR("Cypress"); 78