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;
}
Beispiel #2
0
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;
}