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

Commit af478d88 authored by Ajay Kumar's avatar Ajay Kumar Committed by Thierry Reding
Browse files

drm/bridge: ptn3460: use gpiod interface

parent a1899953
Loading
Loading
Loading
Loading
+36 −52
Original line number Original line Diff line number Diff line
@@ -42,8 +42,8 @@ struct ptn3460_bridge {
	struct drm_bridge bridge;
	struct drm_bridge bridge;
	struct edid *edid;
	struct edid *edid;
	struct drm_panel *panel;
	struct drm_panel *panel;
	int gpio_pd_n;
	struct gpio_desc *gpio_pd_n;
	int gpio_rst_n;
	struct gpio_desc *gpio_rst_n;
	u32 edid_emulation;
	u32 edid_emulation;
	bool enabled;
	bool enabled;
};
};
@@ -132,14 +132,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
	if (ptn_bridge->enabled)
	if (ptn_bridge->enabled)
		return;
		return;


	if (gpio_is_valid(ptn_bridge->gpio_pd_n))
	gpiod_set_value(ptn_bridge->gpio_pd_n, 1);
		gpio_set_value(ptn_bridge->gpio_pd_n, 1);


	if (gpio_is_valid(ptn_bridge->gpio_rst_n)) {
	gpiod_set_value(ptn_bridge->gpio_rst_n, 0);
		gpio_set_value(ptn_bridge->gpio_rst_n, 0);
	usleep_range(10, 20);
	usleep_range(10, 20);
		gpio_set_value(ptn_bridge->gpio_rst_n, 1);
	gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
	}


	if (drm_panel_prepare(ptn_bridge->panel)) {
	if (drm_panel_prepare(ptn_bridge->panel)) {
		DRM_ERROR("failed to prepare panel\n");
		DRM_ERROR("failed to prepare panel\n");
@@ -184,11 +181,8 @@ static void ptn3460_disable(struct drm_bridge *bridge)
		return;
		return;
	}
	}


	if (gpio_is_valid(ptn_bridge->gpio_rst_n))
	gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
		gpio_set_value(ptn_bridge->gpio_rst_n, 1);
	gpiod_set_value(ptn_bridge->gpio_pd_n, 0);

	if (gpio_is_valid(ptn_bridge->gpio_pd_n))
		gpio_set_value(ptn_bridge->gpio_pd_n, 0);
}
}


static void ptn3460_post_disable(struct drm_bridge *bridge)
static void ptn3460_post_disable(struct drm_bridge *bridge)
@@ -335,39 +329,41 @@ static int ptn3460_probe(struct i2c_client *client,
	}
	}


	ptn_bridge->client = client;
	ptn_bridge->client = client;
	ptn_bridge->gpio_pd_n = of_get_named_gpio(dev->of_node,

							"powerdown-gpio", 0);
	ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown");
	if (gpio_is_valid(ptn_bridge->gpio_pd_n)) {
	if (IS_ERR(ptn_bridge->gpio_pd_n)) {
		ret = gpio_request_one(ptn_bridge->gpio_pd_n,
		ret = PTR_ERR(ptn_bridge->gpio_pd_n);
				GPIOF_OUT_INIT_HIGH, "PTN3460_PD_N");
		dev_err(dev, "cannot get gpio_pd_n %d\n", ret);
		if (ret) {
			dev_err(dev, "Request powerdown-gpio failed (%d)\n",
									ret);
		return ret;
		return ret;
	}
	}

	ret = gpiod_direction_output(ptn_bridge->gpio_pd_n, 1);
	if (ret) {
		DRM_ERROR("cannot configure gpio_pd_n\n");
		return ret;
	}
	}


	ptn_bridge->gpio_rst_n = of_get_named_gpio(dev->of_node,
	ptn_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset");
							"reset-gpio", 0);
	if (IS_ERR(ptn_bridge->gpio_rst_n)) {
	if (gpio_is_valid(ptn_bridge->gpio_rst_n)) {
		ret = PTR_ERR(ptn_bridge->gpio_rst_n);
		DRM_ERROR("cannot get gpio_rst_n %d\n", ret);
		return ret;
	}
	/*
	/*
	 * Request the reset pin low to avoid the bridge being
	 * Request the reset pin low to avoid the bridge being
	 * initialized prematurely
	 * initialized prematurely
	 */
	 */
		ret = gpio_request_one(ptn_bridge->gpio_rst_n,
	ret = gpiod_direction_output(ptn_bridge->gpio_rst_n, 0);
				GPIOF_OUT_INIT_LOW, "PTN3460_RST_N");
	if (ret) {
	if (ret) {
			dev_err(dev, "Request reset-gpio failed (%d)\n", ret);
		DRM_ERROR("cannot configure gpio_rst_n\n");
			gpio_free(ptn_bridge->gpio_pd_n);
		return ret;
		return ret;
	}
	}
	}


	ret = of_property_read_u32(dev->of_node, "edid-emulation",
	ret = of_property_read_u32(dev->of_node, "edid-emulation",
			&ptn_bridge->edid_emulation);
			&ptn_bridge->edid_emulation);
	if (ret) {
	if (ret) {
		dev_err(dev, "Can't read EDID emulation value\n");
		dev_err(dev, "Can't read EDID emulation value\n");
		goto err;
		return ret;
	}
	}


	ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs;
	ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs;
@@ -375,19 +371,12 @@ static int ptn3460_probe(struct i2c_client *client,
	ret = drm_bridge_add(&ptn_bridge->bridge);
	ret = drm_bridge_add(&ptn_bridge->bridge);
	if (ret) {
	if (ret) {
		DRM_ERROR("Failed to add bridge\n");
		DRM_ERROR("Failed to add bridge\n");
		goto err;
		return ret;
	}
	}


	i2c_set_clientdata(client, ptn_bridge);
	i2c_set_clientdata(client, ptn_bridge);


	return 0;
	return 0;

err:
	if (gpio_is_valid(ptn_bridge->gpio_pd_n))
		gpio_free(ptn_bridge->gpio_pd_n);
	if (gpio_is_valid(ptn_bridge->gpio_rst_n))
		gpio_free(ptn_bridge->gpio_rst_n);
	return ret;
}
}


static int ptn3460_remove(struct i2c_client *client)
static int ptn3460_remove(struct i2c_client *client)
@@ -396,11 +385,6 @@ static int ptn3460_remove(struct i2c_client *client)


	drm_bridge_remove(&ptn_bridge->bridge);
	drm_bridge_remove(&ptn_bridge->bridge);


	if (gpio_is_valid(ptn_bridge->gpio_pd_n))
		gpio_free(ptn_bridge->gpio_pd_n);
	if (gpio_is_valid(ptn_bridge->gpio_rst_n))
		gpio_free(ptn_bridge->gpio_rst_n);

	return 0;
	return 0;
}
}