static void cyttsp5_i2c_shutdown(struct i2c_client *client) { struct device *dev = &client->dev; const struct of_device_id *match; struct cyttsp5_core_data *cd = i2c_get_clientdata(client); cyttsp5_release(cd); match = of_match_device(of_match_ptr(cyttsp5_i2c_of_match), dev); if (match) cyttsp5_devtree_clean_pdata(dev); }
static int cyttsp5_i2c_probe(struct i2c_client *client,const struct i2c_device_id *i2c_id) { struct device *dev = &client->dev; #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT const struct of_device_id *match; #endif int rc; rc = cyttsp5_pinctrl_init(&client->dev); if (rc < 0){ return rc; } rc = pinctrl_select_state(cyttsp5_pctrl.pinctrl,cyttsp5_pctrl.gpio_state_active); if (rc){ pr_err("%s:%d cyttsp5 cannot set pin to gpio_state_active state\n",__func__, __LINE__); return -EIO; } if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(dev, "I2C functionality not Supported\n"); return -EIO; } #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT match = of_match_device(of_match_ptr(cyttsp5_i2c_of_match), dev); if (match) { rc = cyttsp5_devtree_create_and_get_pdata(dev); if (rc < 0){ return rc; } } #endif cyttsp_power_on(&client->dev); rc = cyttsp5_probe(&cyttsp5_i2c_bus_ops, &client->dev, client->irq, CY_I2C_DATA_SIZE); #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT if (rc && match){ cyttsp5_devtree_clean_pdata(dev); } #endif return rc; }
static int cyttsp5_spi_remove(struct spi_device *spi) { #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT struct device *dev = &spi->dev; const struct of_device_id *match; #endif struct cyttsp5_core_data *cd = dev_get_drvdata(&spi->dev); cyttsp5_release(cd); #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT match = of_match_device(of_match_ptr(cyttsp5_spi_of_match), dev); if (match) cyttsp5_devtree_clean_pdata(dev); #endif return 0; }
static int cyttsp5_i2c_remove(struct i2c_client *client) { // struct device *dev = &client->dev; struct cyttsp5_core_data *cd = i2c_get_clientdata(client); cyttsp5_release(cd); #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT { const struct of_device_id *match; match = of_match_device(of_match_ptr(cyttsp5_i2c_of_match), dev); if (match) cyttsp5_devtree_clean_pdata(dev); } #endif return 0; }
static int cyttsp5_spi_probe(struct spi_device *spi) { struct device *dev = &spi->dev; #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT const struct of_device_id *match; #endif int rc; /* Set up SPI*/ spi->bits_per_word = CY_SPI_BITS_PER_WORD; spi->mode = SPI_MODE_0; rc = spi_setup(spi); if (rc < 0) { dev_err(dev, "%s: SPI setup error %d\n", __func__, rc); return rc; } #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT match = of_match_device(of_match_ptr(cyttsp5_spi_of_match), dev); if (match) { rc = cyttsp5_devtree_create_and_get_pdata(dev); if (rc < 0) return rc; } #endif rc = cyttsp5_probe(&cyttsp5_spi_bus_ops, &spi->dev, spi->irq, CY_SPI_DATA_BUF_SIZE); #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT if (rc && match) cyttsp5_devtree_clean_pdata(dev); #endif return rc; }
/***************************************************************** Parameters : client i2c_id Return : Description : call cyttsp5_probe in cyttsp5_core.c *****************************************************************/ static int cyttsp5_i2c_probe(struct i2c_client *client, const struct i2c_device_id *i2c_id) { struct device *dev = &client->dev; #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT const struct of_device_id *match = NULL; #endif int rc = 0; if(already_has_tp_driver_running()) { tp_log_warning("%s: Another tp driver is running!\n",__func__); return 0; } tp_log_warning("%s %d:Probe start\n", __func__, __LINE__); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { tp_log_err("%s %d:I2C functionality not Supported.\n", __func__, __LINE__); return -EIO; } /* if support device tree, get pdata from device tree */ #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT match = of_match_device(of_match_ptr(cyttsp5_i2c_of_match), dev); if (match) { rc = cyttsp5_devtree_create_and_get_pdata(dev); if (rc < 0) { tp_log_err("%s %d:device tree create and get pdata fail, rc = %d.\n", __func__, __LINE__, rc); return rc; } } else { tp_log_err("%s %d:No device mathced.\n", __func__, __LINE__); return -ENODEV; } #endif #ifdef CONFIG_HUAWEI_DSM tp_cyp_dclient = dsm_register_client(&dsm_cyp_tp); if (!tp_cyp_dclient) tp_log_err("%s: dsm register client failed\n", __func__); #endif/*CONFIG_HUAWEI_DSM*/ rc = cyttsp5_probe(&cyttsp5_i2c_bus_ops, &client->dev, client->irq, CY_I2C_DATA_SIZE); #ifdef CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP5_DEVICETREE_SUPPORT if (rc && match) { cyttsp5_devtree_clean_pdata(dev); #ifdef CONFIG_HUAWEI_DSM if (tp_cyp_dclient) { dsm_unregister_client(tp_cyp_dclient, &dsm_cyp_tp); tp_cyp_dclient = NULL; } #endif/*CONFIG_HUAWEI_DSM*/ tp_log_err("%s %d:cyttsp5 probe fail.\n", __func__, __LINE__); return rc; } #endif set_tp_driver_running(); tp_log_info("%s %d:cyttsp5 probe success.\n", __func__, __LINE__); return rc; }