Commit 16fe18ca authored by Vaibhav Hiremath's avatar Vaibhav Hiremath Committed by Greg Kroah-Hartman
Browse files

greybus: arche-platform: Assert wake/detect after SVC reset without delay



Since now driver supports interrupt based mechanism to read events
from SVC over wake/detect line, no need to delay wake/detect assertion.
We can assert wake/detect after SVC reset deassertion, so during boot
itself SVC will start sending wake_out pulses.

Testing Done: Tested on DB3.5 platform.

Signed-off-by: default avatarVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Reviewed-by: default avatarMichael Scott <michael.scott@linaro.org>
Tested-by: default avatarMichael Scott <michael.scott@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent f760bbfb
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -115,6 +115,16 @@ static void hub_conf_delayed_work(struct work_struct *work)
		dev_warn(arche_pdata->dev, "failed to control hub device\n");
}

static void assert_wakedetect(struct arche_platform_drvdata *arche_pdata)
{
	/* Assert wake/detect = Detect event from AP */
	gpio_direction_output(arche_pdata->wake_detect_gpio, 1);

	/* Enable interrupt here, to read event back from SVC */
	gpio_direction_input(arche_pdata->wake_detect_gpio);
	enable_irq(arche_pdata->wake_detect_irq);
}

static irqreturn_t arche_platform_wd_irq_thread(int irq, void *devid)
{
	struct arche_platform_drvdata *arche_pdata = devid;
@@ -297,6 +307,8 @@ static ssize_t state_store(struct device *dev,
			return count;

		ret = arche_platform_coldboot_seq(arche_pdata);

		assert_wakedetect(arche_pdata);
	} else if (sysfs_streq(buf, "standby")) {
		if (arche_pdata->state == ARCHE_PLATFORM_STATE_STANDBY)
			return count;
@@ -482,6 +494,7 @@ static int arche_platform_probe(struct platform_device *pdev)
		goto err_populate;
	}

	assert_wakedetect(arche_pdata);
	INIT_DELAYED_WORK(&arche_pdata->delayed_work, hub_conf_delayed_work);

	dev_info(dev, "Device registered successfully\n");