Exemplo n.º 1
0
int es705_stimulate_start(struct device *dev)
{
	int rc = 0;
	struct device_node *node = dev->of_node;

	if (stimulate_only_once) {
		dev_err(dev,
			"%s(): register node %s. es705 stimulate start already started\n",
			__func__, dev->of_node->full_name);
		return 0;
	}

	dev_dbg(dev, "%s(): register node %s\n",
		__func__, dev->of_node->full_name);

	/* Populte GPIO reset from DTS */
	reset_gpio = of_get_named_gpio(node, "esxxx-reset-gpio", 0);
	if (reset_gpio < 0) {
		of_property_read_u32(node, "esxxx-reset-expander-gpio",
				     &reset_gpio);
	}
	if (reset_gpio < 0) {
		dev_err(dev, "%s(): get reset_gpio failed\n", __func__);
		goto populate_reset_err;
	}
	dev_dbg(dev, "%s(): reset gpio %d\n", __func__, reset_gpio);

	/* Generate es705 reset */
	rc = gpio_request(reset_gpio, "es705_reset");
	if (rc < 0) {
		dev_err(dev, "%s(): es705_reset request failed", __func__);
		goto reset_gpio_request_error;
	}
	rc = gpio_direction_output(reset_gpio, 0);
	if (rc < 0) {
		dev_err(dev, "%s(): es705_reset direction failed", __func__);
		goto reset_gpio_direction_error;
	}

#if defined(CONFIG_SND_SOC_ES_SLIM)
	/* Enable es705 clock */
	es705_enable_ext_clk(dev, 1);
	usleep_range(5000, 5100);

	es705_gpio_reset(&es705_priv);
#endif

	stimulate_only_once = 1;

	return rc;

reset_gpio_direction_error:
	gpio_free(reset_gpio);
reset_gpio_request_error:
populate_reset_err:
	return rc;
}
Exemplo n.º 2
0
int es705_stimulate_start(struct device *dev)
{
	int rc = 0;
	struct device_node *node = of_get_parent(dev->of_node);

	if (stimulate_only_once) {
		dev_info(dev, "%s(): register node %s. es705 stimulate start already started\n",
				__func__, dev->of_node->full_name);
		return 0;
	}

	dev_info(dev, "%s(): register node %s, es705 stimulate start\n",
			__func__, dev->of_node->full_name);
	/* Populte GPIO reset from DTS */
	reset_gpio = of_get_named_gpio(node,
					      "es705-reset-gpio", 0);
	if (reset_gpio < 0)
		of_property_read_u32(node, "es705-reset-expander-gpio",
				     &reset_gpio);
	if (reset_gpio < 0) {
		dev_err(dev, "%s(): get reset_gpio failed\n", __func__);
		goto populate_reset_err;
	}
	dev_info(dev, "%s(): reset gpio %d\n", __func__, reset_gpio);

	/* Generate es705 reset */
	rc = gpio_request(reset_gpio, "es705_reset");
	if (rc < 0) {
		dev_err(dev, "%s(): es705_reset request failed",
			__func__);
		goto reset_gpio_request_error;
	}
	rc = gpio_direction_output(reset_gpio, 0);
	if (rc < 0) {
		dev_err(dev, "%s(): es705_reset direction failed",
			__func__);
		goto reset_gpio_direction_error;
	}

	/* Enable es705 clock */
	es705_enable_ext_clk(1);
	usleep_range(5000, 5000);

	/* Wait 1 ms then pull Reset signal in High */
	usleep_range(1000, 1000);
	gpio_direction_output(reset_gpio, 1);
	usleep_range(10000, 10000);
	stimulate_only_once = 1;

	return rc;

reset_gpio_direction_error:
	gpio_free(reset_gpio);
reset_gpio_request_error:
populate_reset_err:
	return rc;
}