Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8f0b7d3 authored by Ritesh Kumar's avatar Ritesh Kumar Committed by Gerrit - the friendly Code Review server
Browse files

input: touchscreen: synaptics_tcm: Fix boot-up issues



This change fixes boot-up issues in synaptics_tcm touch
driver.

Change-Id: I74fb779c9836a18e7c5503d4a2881a992af8810a
Signed-off-by: default avatarRitesh Kumar <riteshk@codeaurora.org>
parent 6f0fe27e
Loading
Loading
Loading
Loading
+38 −50
Original line number Diff line number Diff line
@@ -3354,10 +3354,30 @@ static int syna_tcm_probe(struct platform_device *pdev)
		goto err_get_regulator;
	}

	retval = syna_tcm_enable_regulator(tcm_hcd, true);
	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
				"Failed to enable regulators\n");
		goto err_enable_regulator;
	}

	retval = syna_tcm_config_gpio(tcm_hcd);
	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
				"Failed to configure GPIO's\n");
		goto err_config_gpio;
	}

	retval = synaptics_tcm_pinctrl_init(tcm_hcd);
	if (!retval && tcm_hcd->ts_pinctrl) {
		retval = pinctrl_select_state(
				tcm_hcd->ts_pinctrl,
				tcm_hcd->pinctrl_state_active);
		if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent, "Failed to init pinctrl\n");
		goto err_pinctrl_init;
			LOGE(tcm_hcd->pdev->dev.parent,
					"%s: Failed to select %s pinstate %d\n",
					__func__, PINCTRL_STATE_ACTIVE, retval);
		}
	}

	sysfs_dir = kobject_create_and_add(PLATFORM_DRIVER_NAME,
@@ -3481,7 +3501,21 @@ static int syna_tcm_probe(struct platform_device *pdev)
	kobject_put(tcm_hcd->sysfs_dir);

err_sysfs_create_dir:
err_pinctrl_init:
	if (bdata->irq_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->irq_gpio, false, 0, 0);

	if (bdata->power_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->power_gpio, false, 0, 0);

	if (bdata->reset_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->reset_gpio, false, 0, 0);

err_config_gpio:
	syna_tcm_enable_regulator(tcm_hcd, false);

err_enable_regulator:
	syna_tcm_get_regulator(tcm_hcd, false);

err_get_regulator:
	device_init_wakeup(&pdev->dev, 0);

@@ -3502,33 +3536,8 @@ static int syna_tcm_probe(struct platform_device *pdev)
static int syna_tcm_deferred_probe(struct device *dev)
{
	int retval;
	const struct syna_tcm_board_data *bdata;
	struct syna_tcm_hcd *tcm_hcd = dev_get_drvdata(dev);

	retval = pinctrl_select_state(
			tcm_hcd->ts_pinctrl,
			tcm_hcd->pinctrl_state_active);

	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
				"Failed to pinctrl_select_state\n");
		goto err_pinctrl_select_state;
	}

	retval = syna_tcm_enable_regulator(tcm_hcd, true);
	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
				"Failed to enable regulators\n");
		goto err_enable_regulator;
	}

	retval = syna_tcm_config_gpio(tcm_hcd);
	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
				"Failed to configure GPIO's\n");
		goto err_config_gpio;
	}

	retval = tcm_hcd->enable_irq(tcm_hcd, true, NULL);
	if (retval < 0) {
		LOGE(tcm_hcd->pdev->dev.parent,
@@ -3559,27 +3568,6 @@ static int syna_tcm_deferred_probe(struct device *dev)
#endif
err_enable_irq:

err_config_gpio:
	syna_tcm_enable_regulator(tcm_hcd, false);

err_enable_regulator:
	syna_tcm_get_regulator(tcm_hcd, false);

err_pinctrl_select_state:
	if (!tcm_hcd->hw_if || !tcm_hcd->hw_if->bdata)
		return -EINVAL;

	bdata = tcm_hcd->hw_if->bdata;

	if (bdata->irq_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->irq_gpio, false, 0, 0);

	if (bdata->power_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->power_gpio, false, 0, 0);

	if (bdata->reset_gpio >= 0)
		syna_tcm_set_gpio(tcm_hcd, bdata->reset_gpio, false, 0, 0);

	return retval;
}

+3 −3
Original line number Diff line number Diff line
@@ -86,8 +86,8 @@ static int parse_dt(struct device *dev, struct syna_tcm_board_data *bdata)
	retval = of_property_read_u32(np, "synaptics,power-on-state",
			&bdata->power_on_state);
	if (retval < 0) {
		LOGE(dev, "Failed to read synaptics,power-on-state\n");
		return retval;
		LOGD(dev, "Failed to read synaptics,power-on-state\n");
		bdata->power_on_state = 0;
	}

	retval = of_property_read_u32(np, "synaptics,power-delay-ms",
@@ -101,7 +101,7 @@ static int parse_dt(struct device *dev, struct syna_tcm_board_data *bdata)
			"synaptics,reset-gpio", 0, NULL);
	if (!gpio_is_valid(retval)) {
		if (retval != -EPROBE_DEFER)
			dev_err(dev, "Error getting irq_gpio\n");
			dev_err(dev, "Error getting reset gpio\n");
		return retval;
	}
	bdata->reset_gpio = retval;