drm/tegra: output: Support low-active hotplug detect
Support low-active hotplug detect signals by storing the GPIO flags parsed from device tree. Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
		
							parent
							
								
									a13f1dc4c3
								
							
						
					
					
						commit
						fb36d0eed4
					
				| @ -12,6 +12,7 @@ | ||||
| 
 | ||||
| #include <uapi/drm/tegra_drm.h> | ||||
| #include <linux/host1x.h> | ||||
| #include <linux/of_gpio.h> | ||||
| 
 | ||||
| #include <drm/drmP.h> | ||||
| #include <drm/drm_crtc_helper.h> | ||||
| @ -200,6 +201,7 @@ struct tegra_output { | ||||
| 	const struct edid *edid; | ||||
| 	unsigned int hpd_irq; | ||||
| 	int hpd_gpio; | ||||
| 	enum of_gpio_flags hpd_gpio_flags; | ||||
| 
 | ||||
| 	struct drm_encoder encoder; | ||||
| 	struct drm_connector connector; | ||||
|  | ||||
| @ -7,8 +7,6 @@ | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/of_gpio.h> | ||||
| 
 | ||||
| #include <drm/drm_atomic_helper.h> | ||||
| #include <drm/drm_panel.h> | ||||
| #include "drm.h" | ||||
| @ -59,10 +57,17 @@ tegra_output_connector_detect(struct drm_connector *connector, bool force) | ||||
| 	enum drm_connector_status status = connector_status_unknown; | ||||
| 
 | ||||
| 	if (gpio_is_valid(output->hpd_gpio)) { | ||||
| 		if (gpio_get_value(output->hpd_gpio) == 0) | ||||
| 			status = connector_status_disconnected; | ||||
| 		else | ||||
| 			status = connector_status_connected; | ||||
| 		if (output->hpd_gpio_flags & OF_GPIO_ACTIVE_LOW) { | ||||
| 			if (gpio_get_value(output->hpd_gpio) != 0) | ||||
| 				status = connector_status_disconnected; | ||||
| 			else | ||||
| 				status = connector_status_connected; | ||||
| 		} else { | ||||
| 			if (gpio_get_value(output->hpd_gpio) == 0) | ||||
| 				status = connector_status_disconnected; | ||||
| 			else | ||||
| 				status = connector_status_connected; | ||||
| 		} | ||||
| 	} else { | ||||
| 		if (!output->panel) | ||||
| 			status = connector_status_disconnected; | ||||
| @ -97,7 +102,6 @@ static irqreturn_t hpd_irq(int irq, void *data) | ||||
| int tegra_output_probe(struct tegra_output *output) | ||||
| { | ||||
| 	struct device_node *ddc, *panel; | ||||
| 	enum of_gpio_flags flags; | ||||
| 	int err, size; | ||||
| 
 | ||||
| 	if (!output->of_node) | ||||
| @ -128,7 +132,7 @@ int tegra_output_probe(struct tegra_output *output) | ||||
| 
 | ||||
| 	output->hpd_gpio = of_get_named_gpio_flags(output->of_node, | ||||
| 						   "nvidia,hpd-gpio", 0, | ||||
| 						   &flags); | ||||
| 						   &output->hpd_gpio_flags); | ||||
| 	if (gpio_is_valid(output->hpd_gpio)) { | ||||
| 		unsigned long flags; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user