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

Commit eef476de authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "input: touchscreen: synaptics_tcm: defer regulator enable"

parents 2e4b1ac1 53199240
Loading
Loading
Loading
Loading
+53 −40
Original line number Diff line number Diff line
@@ -3193,7 +3193,7 @@ static int syna_tcm_fb_notifier_cb(struct notifier_block *nb,

static int synaptics_tcm_pinctrl_init(struct syna_tcm_hcd *tcm_hcd)
{
	int retval;
	int retval = 0;

	/* Get pinctrl if target uses pinctrl */
	tcm_hcd->ts_pinctrl = devm_pinctrl_get((tcm_hcd->pdev->dev.parent));
@@ -3233,7 +3233,7 @@ static int synaptics_tcm_pinctrl_init(struct syna_tcm_hcd *tcm_hcd)
			PINCTRL_STATE_RELEASE, retval);
	}

	return 0;
	return retval;

err_pinctrl_lookup:
	devm_pinctrl_put(tcm_hcd->ts_pinctrl);
@@ -3356,30 +3356,10 @@ 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,
					"%s: Failed to select %s pinstate %d\n",
					__func__, PINCTRL_STATE_ACTIVE, retval);
			}
		LOGE(tcm_hcd->pdev->dev.parent, "Failed to init pinctrl\n");
		goto err_pinctrl_init;
	}

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

err_sysfs_create_dir:
	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_pinctrl_init:
err_get_regulator:
	device_init_wakeup(&pdev->dev, 0);

@@ -3529,8 +3495,33 @@ 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,
@@ -3560,6 +3551,28 @@ static int syna_tcm_deferred_probe(struct device *dev)
err_reset:
#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;
}