mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 10:19:47 +00:00
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
2 changed files with 14 additions and 8 deletions
|
@ -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 a new issue