Loading Documentation/devicetree/bindings/input/touchscreen/synaptics_dsxv26_i2c.txt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ Optional property: - vcc_i2c-supply : analog voltage power supply needed to power device. - synaptics,pwr-reg-name : power reg name of digital voltage. - synaptics,bus-reg-name : bus reg name of analog voltage. - synaptics,do-not-disable-regulators : If specified, regulators cannot be disabled/enabled during suspend/resume. - synaptics,irq-on-state : status of irq gpio. - synaptics,cap-button-codes : virtual key code mappings to be used. - synaptics,vir-button-codes : virtual key code and the response region on panel. Loading @@ -26,6 +27,7 @@ Optional property: - synaptics,y-flip : modify orientation of the y axis. - synaptics,reset-delay-ms : reset delay for controller (ms), default 100. - synaptics,max-y-for-2d : maximal y value of the panel. - synaptics,bus-lpm-cur-uA : I2C bus idle mode current setting. - clock-names : Clock names used for secure touch. They are: "iface_clk", "core_clk" - clocks : Defined if 'clock-names' DT property is defined. These clocks are associated with the underlying I2C bus. Loading arch/arm/boot/dts/qcom/apq8009w-bg-wtp-v2.dts +2 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ synaptics,power-delay-ms = <200>; synaptics,reset-delay-ms = <200>; synaptics,max-y-for-2d = <389>; synaptics,bus-lpm-cur-uA = <450>; synaptics,do-not-disable-regulators; synaptics,wakeup-gestures-en; synaptics,resume-in-workqueue; synaptics,x-flip; Loading arch/arm/boot/dts/qcom/msm8909w-bg-wtp-v2.dts +2 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ synaptics,power-delay-ms = <200>; synaptics,reset-delay-ms = <200>; synaptics,max-y-for-2d = <389>; synaptics,bus-lpm-cur-uA = <450>; synaptics,do-not-disable-regulators; synaptics,wakeup-gestures-en; synaptics,resume-in-workqueue; synaptics,x-flip; Loading drivers/input/touchscreen/synaptics_dsx_2.6/synaptics_dsx_core.c +140 −7 Original line number Diff line number Diff line Loading @@ -111,6 +111,13 @@ #define F12_WAKEUP_GESTURE_MODE 0x02 #define F12_UDG_DETECT 0x0f #define PWR_VTG_MIN_UV 2700000 #define PWR_VTG_MAX_UV 3600000 #define PWR_ACTIVE_LOAD_UA 2000 #define I2C_VTG_MIN_UV 1710000 #define I2C_VTG_MAX_UV 2000000 #define I2C_ACTIVE_LOAD_UA 7000 static int synaptics_rmi4_check_status(struct synaptics_rmi4_data *rmi4_data, bool *was_in_bl_mode); static int synaptics_rmi4_free_fingers(struct synaptics_rmi4_data *rmi4_data); Loading Loading @@ -3405,6 +3412,66 @@ err_gpio_irq: return retval; } static int reg_set_optimum_mode_check(struct regulator *reg, int load_uA) { return (regulator_count_voltages(reg) > 0) ? regulator_set_optimum_mode(reg, load_uA) : 0; } static int synaptics_rmi4_configure_reg(struct synaptics_rmi4_data *rmi4_data, bool on) { int retval; if (on == false) goto hw_shutdown; if (rmi4_data->pwr_reg) { if (regulator_count_voltages(rmi4_data->pwr_reg) > 0) { retval = regulator_set_voltage(rmi4_data->pwr_reg, PWR_VTG_MIN_UV, PWR_VTG_MAX_UV); if (retval) { dev_err(rmi4_data->pdev->dev.parent, "regulator set_vtg failed retval =%d\n", retval); goto err_set_vtg_pwr; } } } if (rmi4_data->bus_reg) { if (regulator_count_voltages(rmi4_data->bus_reg) > 0) { retval = regulator_set_voltage(rmi4_data->bus_reg, I2C_VTG_MIN_UV, I2C_VTG_MAX_UV); if (retval) { dev_err(rmi4_data->pdev->dev.parent, "regulator set_vtg failed retval =%d\n", retval); goto err_set_vtg_bus; } } } return 0; err_set_vtg_bus: if (rmi4_data->pwr_reg && regulator_count_voltages(rmi4_data->pwr_reg) > 0) regulator_set_voltage(rmi4_data->pwr_reg, 0, PWR_VTG_MAX_UV); err_set_vtg_pwr: return retval; hw_shutdown: if (rmi4_data->pwr_reg && regulator_count_voltages(rmi4_data->pwr_reg) > 0) regulator_set_voltage(rmi4_data->pwr_reg, 0, PWR_VTG_MAX_UV); if (rmi4_data->bus_reg && regulator_count_voltages(rmi4_data->bus_reg) > 0) regulator_set_voltage(rmi4_data->bus_reg, 0, I2C_VTG_MAX_UV); return 0; } static int synaptics_rmi4_get_reg(struct synaptics_rmi4_data *rmi4_data, bool get) { Loading Loading @@ -3470,37 +3537,66 @@ static int synaptics_rmi4_enable_reg(struct synaptics_rmi4_data *rmi4_data, } if (rmi4_data->bus_reg) { retval = reg_set_optimum_mode_check(rmi4_data->bus_reg, I2C_ACTIVE_LOAD_UA); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Regulator set_opt failed rc=%d\n", __func__, retval); return retval; } retval = regulator_enable(rmi4_data->bus_reg); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to enable bus pullup regulator\n", __func__); goto exit; goto err_bus_reg_en; } } if (rmi4_data->pwr_reg) { retval = reg_set_optimum_mode_check(rmi4_data->pwr_reg, PWR_ACTIVE_LOAD_UA); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Regulator set_opt failed rc=%d\n", __func__, retval); goto disable_bus_reg; } retval = regulator_enable(rmi4_data->pwr_reg); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to enable power regulator\n", __func__); goto disable_bus_reg; goto err_pwr_reg_en; } msleep(bdata->power_delay_ms); } return 0; err_pwr_reg_en: reg_set_optimum_mode_check(rmi4_data->pwr_reg, 0); goto disable_bus_reg; err_bus_reg_en: reg_set_optimum_mode_check(rmi4_data->bus_reg, 0); return retval; disable_pwr_reg: if (rmi4_data->pwr_reg) if (rmi4_data->pwr_reg) { reg_set_optimum_mode_check(rmi4_data->pwr_reg, 0); regulator_disable(rmi4_data->pwr_reg); } disable_bus_reg: if (rmi4_data->bus_reg) if (rmi4_data->bus_reg) { reg_set_optimum_mode_check(rmi4_data->bus_reg, 0); regulator_disable(rmi4_data->bus_reg); } exit: return retval; } Loading Loading @@ -3974,6 +4070,14 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) goto err_get_reg; } retval = synaptics_rmi4_configure_reg(rmi4_data, true); if (retval < 0) { dev_err(&pdev->dev, "%s: Failed to configure regulators\n", __func__); goto err_configure_reg; } retval = synaptics_rmi4_enable_reg(rmi4_data, true); if (retval < 0) { dev_err(&pdev->dev, Loading Loading @@ -4200,6 +4304,8 @@ err_set_gpio: err_enable_reg: synaptics_rmi4_get_reg(rmi4_data, false); err_configure_reg: synaptics_rmi4_configure_reg(rmi4_data, false); err_get_reg: kfree(rmi4_data); Loading Loading @@ -4282,6 +4388,7 @@ static int synaptics_rmi4_remove(struct platform_device *pdev) } synaptics_rmi4_enable_reg(rmi4_data, false); synaptics_rmi4_configure_reg(rmi4_data, false); synaptics_rmi4_get_reg(rmi4_data, false); kfree(rmi4_data); Loading Loading @@ -4555,6 +4662,7 @@ static int synaptics_rmi4_suspend(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); int retval; int lpm_uA; if (rmi4_data->stay_awake) return 0; Loading @@ -4563,6 +4671,17 @@ static int synaptics_rmi4_suspend(struct device *dev) if (rmi4_data->enable_wakeup_gesture) { if (!rmi4_data->suspend) { /* Set lpm current for bus regulator */ lpm_uA = rmi4_data->hw_if->board_data->bus_lpm_cur_uA; if (lpm_uA) { retval = reg_set_optimum_mode_check( rmi4_data->bus_reg, lpm_uA); if (retval < 0) dev_err(dev, "Bus Regulator set_opt failed rc=%d\n", retval); } synaptics_rmi4_wakeup_gesture(rmi4_data, true); enable_irq_wake(rmi4_data->irq); } Loading Loading @@ -4592,7 +4711,8 @@ exit: } mutex_unlock(&exp_data.mutex); if (!rmi4_data->suspend && !rmi4_data->enable_wakeup_gesture) if (!rmi4_data->suspend && !rmi4_data->enable_wakeup_gesture && !rmi4_data->hw_if->board_data->dont_disable_regs) synaptics_rmi4_enable_reg(rmi4_data, false); rmi4_data->suspend = true; Loading Loading @@ -4622,6 +4742,18 @@ static int synaptics_rmi4_resume(struct device *dev) if (rmi4_data->enable_wakeup_gesture) { if (rmi4_data->suspend) { /* Set active current for the bus regulator */ if (rmi4_data->hw_if->board_data->bus_lpm_cur_uA) { retval = reg_set_optimum_mode_check( rmi4_data->bus_reg, I2C_ACTIVE_LOAD_UA); if (retval < 0) dev_err(dev, "Pwr regulator set_opt failed rc=%d\n", retval); } synaptics_rmi4_wakeup_gesture(rmi4_data, false); disable_irq_wake(rmi4_data->irq); } Loading @@ -4630,7 +4762,8 @@ static int synaptics_rmi4_resume(struct device *dev) rmi4_data->current_page = MASK_8BIT; if (rmi4_data->suspend) if (rmi4_data->suspend && !rmi4_data->hw_if->board_data->dont_disable_regs) synaptics_rmi4_enable_reg(rmi4_data, true); synaptics_rmi4_sleep_enable(rmi4_data, false); Loading drivers/input/touchscreen/synaptics_dsx_2.6/synaptics_dsx_i2c.c +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,9 @@ static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) bdata->wakeup_gesture_en = of_property_read_bool(np, "synaptics,wakeup-gestures-en"); bdata->dont_disable_regs = of_property_read_bool(np, "synaptics,do-not-disable-regulators"); retval = of_property_read_string(np, "synaptics,pwr-reg-name", &name); if (retval < 0) bdata->pwr_reg_name = NULL; Loading Loading @@ -184,6 +187,10 @@ static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) bdata->max_y_for_2d = -1; } retval = of_property_read_u32(np, "synaptics,bus-lpm-cur-uA", &value); bdata->bus_lpm_cur_uA = retval < 0 ? 0 : value; prop = of_find_property(np, "synaptics,swap-axes", NULL); bdata->swap_axes = prop > 0 ? true : false; Loading Loading
Documentation/devicetree/bindings/input/touchscreen/synaptics_dsxv26_i2c.txt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ Optional property: - vcc_i2c-supply : analog voltage power supply needed to power device. - synaptics,pwr-reg-name : power reg name of digital voltage. - synaptics,bus-reg-name : bus reg name of analog voltage. - synaptics,do-not-disable-regulators : If specified, regulators cannot be disabled/enabled during suspend/resume. - synaptics,irq-on-state : status of irq gpio. - synaptics,cap-button-codes : virtual key code mappings to be used. - synaptics,vir-button-codes : virtual key code and the response region on panel. Loading @@ -26,6 +27,7 @@ Optional property: - synaptics,y-flip : modify orientation of the y axis. - synaptics,reset-delay-ms : reset delay for controller (ms), default 100. - synaptics,max-y-for-2d : maximal y value of the panel. - synaptics,bus-lpm-cur-uA : I2C bus idle mode current setting. - clock-names : Clock names used for secure touch. They are: "iface_clk", "core_clk" - clocks : Defined if 'clock-names' DT property is defined. These clocks are associated with the underlying I2C bus. Loading
arch/arm/boot/dts/qcom/apq8009w-bg-wtp-v2.dts +2 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ synaptics,power-delay-ms = <200>; synaptics,reset-delay-ms = <200>; synaptics,max-y-for-2d = <389>; synaptics,bus-lpm-cur-uA = <450>; synaptics,do-not-disable-regulators; synaptics,wakeup-gestures-en; synaptics,resume-in-workqueue; synaptics,x-flip; Loading
arch/arm/boot/dts/qcom/msm8909w-bg-wtp-v2.dts +2 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ synaptics,power-delay-ms = <200>; synaptics,reset-delay-ms = <200>; synaptics,max-y-for-2d = <389>; synaptics,bus-lpm-cur-uA = <450>; synaptics,do-not-disable-regulators; synaptics,wakeup-gestures-en; synaptics,resume-in-workqueue; synaptics,x-flip; Loading
drivers/input/touchscreen/synaptics_dsx_2.6/synaptics_dsx_core.c +140 −7 Original line number Diff line number Diff line Loading @@ -111,6 +111,13 @@ #define F12_WAKEUP_GESTURE_MODE 0x02 #define F12_UDG_DETECT 0x0f #define PWR_VTG_MIN_UV 2700000 #define PWR_VTG_MAX_UV 3600000 #define PWR_ACTIVE_LOAD_UA 2000 #define I2C_VTG_MIN_UV 1710000 #define I2C_VTG_MAX_UV 2000000 #define I2C_ACTIVE_LOAD_UA 7000 static int synaptics_rmi4_check_status(struct synaptics_rmi4_data *rmi4_data, bool *was_in_bl_mode); static int synaptics_rmi4_free_fingers(struct synaptics_rmi4_data *rmi4_data); Loading Loading @@ -3405,6 +3412,66 @@ err_gpio_irq: return retval; } static int reg_set_optimum_mode_check(struct regulator *reg, int load_uA) { return (regulator_count_voltages(reg) > 0) ? regulator_set_optimum_mode(reg, load_uA) : 0; } static int synaptics_rmi4_configure_reg(struct synaptics_rmi4_data *rmi4_data, bool on) { int retval; if (on == false) goto hw_shutdown; if (rmi4_data->pwr_reg) { if (regulator_count_voltages(rmi4_data->pwr_reg) > 0) { retval = regulator_set_voltage(rmi4_data->pwr_reg, PWR_VTG_MIN_UV, PWR_VTG_MAX_UV); if (retval) { dev_err(rmi4_data->pdev->dev.parent, "regulator set_vtg failed retval =%d\n", retval); goto err_set_vtg_pwr; } } } if (rmi4_data->bus_reg) { if (regulator_count_voltages(rmi4_data->bus_reg) > 0) { retval = regulator_set_voltage(rmi4_data->bus_reg, I2C_VTG_MIN_UV, I2C_VTG_MAX_UV); if (retval) { dev_err(rmi4_data->pdev->dev.parent, "regulator set_vtg failed retval =%d\n", retval); goto err_set_vtg_bus; } } } return 0; err_set_vtg_bus: if (rmi4_data->pwr_reg && regulator_count_voltages(rmi4_data->pwr_reg) > 0) regulator_set_voltage(rmi4_data->pwr_reg, 0, PWR_VTG_MAX_UV); err_set_vtg_pwr: return retval; hw_shutdown: if (rmi4_data->pwr_reg && regulator_count_voltages(rmi4_data->pwr_reg) > 0) regulator_set_voltage(rmi4_data->pwr_reg, 0, PWR_VTG_MAX_UV); if (rmi4_data->bus_reg && regulator_count_voltages(rmi4_data->bus_reg) > 0) regulator_set_voltage(rmi4_data->bus_reg, 0, I2C_VTG_MAX_UV); return 0; } static int synaptics_rmi4_get_reg(struct synaptics_rmi4_data *rmi4_data, bool get) { Loading Loading @@ -3470,37 +3537,66 @@ static int synaptics_rmi4_enable_reg(struct synaptics_rmi4_data *rmi4_data, } if (rmi4_data->bus_reg) { retval = reg_set_optimum_mode_check(rmi4_data->bus_reg, I2C_ACTIVE_LOAD_UA); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Regulator set_opt failed rc=%d\n", __func__, retval); return retval; } retval = regulator_enable(rmi4_data->bus_reg); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to enable bus pullup regulator\n", __func__); goto exit; goto err_bus_reg_en; } } if (rmi4_data->pwr_reg) { retval = reg_set_optimum_mode_check(rmi4_data->pwr_reg, PWR_ACTIVE_LOAD_UA); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Regulator set_opt failed rc=%d\n", __func__, retval); goto disable_bus_reg; } retval = regulator_enable(rmi4_data->pwr_reg); if (retval < 0) { dev_err(rmi4_data->pdev->dev.parent, "%s: Failed to enable power regulator\n", __func__); goto disable_bus_reg; goto err_pwr_reg_en; } msleep(bdata->power_delay_ms); } return 0; err_pwr_reg_en: reg_set_optimum_mode_check(rmi4_data->pwr_reg, 0); goto disable_bus_reg; err_bus_reg_en: reg_set_optimum_mode_check(rmi4_data->bus_reg, 0); return retval; disable_pwr_reg: if (rmi4_data->pwr_reg) if (rmi4_data->pwr_reg) { reg_set_optimum_mode_check(rmi4_data->pwr_reg, 0); regulator_disable(rmi4_data->pwr_reg); } disable_bus_reg: if (rmi4_data->bus_reg) if (rmi4_data->bus_reg) { reg_set_optimum_mode_check(rmi4_data->bus_reg, 0); regulator_disable(rmi4_data->bus_reg); } exit: return retval; } Loading Loading @@ -3974,6 +4070,14 @@ static int synaptics_rmi4_probe(struct platform_device *pdev) goto err_get_reg; } retval = synaptics_rmi4_configure_reg(rmi4_data, true); if (retval < 0) { dev_err(&pdev->dev, "%s: Failed to configure regulators\n", __func__); goto err_configure_reg; } retval = synaptics_rmi4_enable_reg(rmi4_data, true); if (retval < 0) { dev_err(&pdev->dev, Loading Loading @@ -4200,6 +4304,8 @@ err_set_gpio: err_enable_reg: synaptics_rmi4_get_reg(rmi4_data, false); err_configure_reg: synaptics_rmi4_configure_reg(rmi4_data, false); err_get_reg: kfree(rmi4_data); Loading Loading @@ -4282,6 +4388,7 @@ static int synaptics_rmi4_remove(struct platform_device *pdev) } synaptics_rmi4_enable_reg(rmi4_data, false); synaptics_rmi4_configure_reg(rmi4_data, false); synaptics_rmi4_get_reg(rmi4_data, false); kfree(rmi4_data); Loading Loading @@ -4555,6 +4662,7 @@ static int synaptics_rmi4_suspend(struct device *dev) struct synaptics_rmi4_exp_fhandler *exp_fhandler; struct synaptics_rmi4_data *rmi4_data = dev_get_drvdata(dev); int retval; int lpm_uA; if (rmi4_data->stay_awake) return 0; Loading @@ -4563,6 +4671,17 @@ static int synaptics_rmi4_suspend(struct device *dev) if (rmi4_data->enable_wakeup_gesture) { if (!rmi4_data->suspend) { /* Set lpm current for bus regulator */ lpm_uA = rmi4_data->hw_if->board_data->bus_lpm_cur_uA; if (lpm_uA) { retval = reg_set_optimum_mode_check( rmi4_data->bus_reg, lpm_uA); if (retval < 0) dev_err(dev, "Bus Regulator set_opt failed rc=%d\n", retval); } synaptics_rmi4_wakeup_gesture(rmi4_data, true); enable_irq_wake(rmi4_data->irq); } Loading Loading @@ -4592,7 +4711,8 @@ exit: } mutex_unlock(&exp_data.mutex); if (!rmi4_data->suspend && !rmi4_data->enable_wakeup_gesture) if (!rmi4_data->suspend && !rmi4_data->enable_wakeup_gesture && !rmi4_data->hw_if->board_data->dont_disable_regs) synaptics_rmi4_enable_reg(rmi4_data, false); rmi4_data->suspend = true; Loading Loading @@ -4622,6 +4742,18 @@ static int synaptics_rmi4_resume(struct device *dev) if (rmi4_data->enable_wakeup_gesture) { if (rmi4_data->suspend) { /* Set active current for the bus regulator */ if (rmi4_data->hw_if->board_data->bus_lpm_cur_uA) { retval = reg_set_optimum_mode_check( rmi4_data->bus_reg, I2C_ACTIVE_LOAD_UA); if (retval < 0) dev_err(dev, "Pwr regulator set_opt failed rc=%d\n", retval); } synaptics_rmi4_wakeup_gesture(rmi4_data, false); disable_irq_wake(rmi4_data->irq); } Loading @@ -4630,7 +4762,8 @@ static int synaptics_rmi4_resume(struct device *dev) rmi4_data->current_page = MASK_8BIT; if (rmi4_data->suspend) if (rmi4_data->suspend && !rmi4_data->hw_if->board_data->dont_disable_regs) synaptics_rmi4_enable_reg(rmi4_data, true); synaptics_rmi4_sleep_enable(rmi4_data, false); Loading
drivers/input/touchscreen/synaptics_dsx_2.6/synaptics_dsx_i2c.c +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,9 @@ static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) bdata->wakeup_gesture_en = of_property_read_bool(np, "synaptics,wakeup-gestures-en"); bdata->dont_disable_regs = of_property_read_bool(np, "synaptics,do-not-disable-regulators"); retval = of_property_read_string(np, "synaptics,pwr-reg-name", &name); if (retval < 0) bdata->pwr_reg_name = NULL; Loading Loading @@ -184,6 +187,10 @@ static int parse_dt(struct device *dev, struct synaptics_dsx_board_data *bdata) bdata->max_y_for_2d = -1; } retval = of_property_read_u32(np, "synaptics,bus-lpm-cur-uA", &value); bdata->bus_lpm_cur_uA = retval < 0 ? 0 : value; prop = of_find_property(np, "synaptics,swap-axes", NULL); bdata->swap_axes = prop > 0 ? true : false; Loading