int cyttsp4_init(struct cyttsp4_core_platform_data *pdata, int on, struct device *dev) { int rc = 0; int irq_gpio = pdata->irq_gpio; if (on) { pinctrl_init(pdata); rc = gpio_request(irq_gpio, "TSP_INT"); if(rc < 0){ dev_err(dev, "%s: unable to request TSP_INT\n", __func__); return rc; } gpio_direction_input(irq_gpio); rc = gpio_request(pdata->avdd_gpio, "TSP_AVDD_gpio"); if(rc < 0){ dev_err(dev, "%s: unable to request TSP_AVDD_gpio\n", __func__); return rc; } rc = gpio_request(pdata->vddo_gpio, "TSP_VDDO_gpio"); if(rc < 0){ dev_err(dev, "%s: unable to request TSP_VDDO_gpio\n", __func__); return rc; } cy_hw_power(pdata, 1, false); } else { cy_hw_power(pdata, 0, false); gpio_free(irq_gpio); } dev_info(dev, "%s: INIT CYTTSP IRQ gpio=%d onoff=%d r=%d\n", __func__, irq_gpio, on, rc); return rc; }
int pin_init(void) { int i; uint32_t v; /*ctrl pin init*/ pinctrl_init(); /*other pin init*/ for (i = 0; i < sizeof(other)/sizeof(other[0]); i++) { v = ((other[i].slp_en & 0xF) << 13); /*[16:13]*/ v |= ((other[i].wpus & 1) << 12); /*[12]*/ v |= ((other[i].se & 1) << 11); /*[11]e*/ v |= ((other[i].drv & 7) << 8); /*[10:8]*/ v |= ((other[i].func_wpu_wpd & 3)<< 6); /*[7:6]*/ v |= ((other[i].func_sel & 3) << 4); /*[5:4]*/ v |= ((other[i].slp_wpu_wpd & 3) << 2); /*[3:2]*/ v |= ((other[i].ie_oe & 3) << 0); /*[1:0]*/ __raw_writel(v, CTL_PIN_BASE + other[i].reg); } return 0; }