Lines Matching +full:hpd +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0
7 * Based on the omapdrm-specific encoder-opa362 driver
14 #include <linux/gpio/consumer.h>
48 return -EINVAL; in tpd12s015_attach()
50 ret = drm_bridge_attach(encoder, tpd->next_bridge, in tpd12s015_attach()
55 gpiod_set_value_cansleep(tpd->ls_oe_gpio, 1); in tpd12s015_attach()
57 /* DC-DC converter needs at max 300us to get to 90% of 5V. */ in tpd12s015_attach()
67 gpiod_set_value_cansleep(tpd->ls_oe_gpio, 0); in tpd12s015_detach()
74 if (gpiod_get_value_cansleep(tpd->hpd_gpio)) in tpd12s015_detect()
90 gpiod_set_value_cansleep(tpd->ct_cp_hpd_gpio, 1); in tpd12s015_hpd_enable()
97 gpiod_set_value_cansleep(tpd->ct_cp_hpd_gpio, 0); in tpd12s015_hpd_disable()
111 struct drm_bridge *bridge = &tpd->bridge; in tpd12s015_hpd_isr()
122 struct gpio_desc *gpio; in tpd12s015_probe() local
125 tpd = devm_drm_bridge_alloc(&pdev->dev, struct tpd12s015_device, in tpd12s015_probe()
132 tpd->bridge.of_node = pdev->dev.of_node; in tpd12s015_probe()
133 tpd->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in tpd12s015_probe()
134 tpd->bridge.ops = DRM_BRIDGE_OP_DETECT; in tpd12s015_probe()
137 node = of_graph_get_remote_node(pdev->dev.of_node, 1, -1); in tpd12s015_probe()
139 return -ENODEV; in tpd12s015_probe()
141 tpd->next_bridge = of_drm_find_bridge(node); in tpd12s015_probe()
144 if (!tpd->next_bridge) in tpd12s015_probe()
145 return -EPROBE_DEFER; in tpd12s015_probe()
147 /* Get the control and HPD GPIOs. */ in tpd12s015_probe()
148 gpio = devm_gpiod_get_index_optional(&pdev->dev, NULL, 0, in tpd12s015_probe()
150 if (IS_ERR(gpio)) in tpd12s015_probe()
151 return PTR_ERR(gpio); in tpd12s015_probe()
153 tpd->ct_cp_hpd_gpio = gpio; in tpd12s015_probe()
155 gpio = devm_gpiod_get_index_optional(&pdev->dev, NULL, 1, in tpd12s015_probe()
157 if (IS_ERR(gpio)) in tpd12s015_probe()
158 return PTR_ERR(gpio); in tpd12s015_probe()
160 tpd->ls_oe_gpio = gpio; in tpd12s015_probe()
162 gpio = devm_gpiod_get_index(&pdev->dev, NULL, 2, GPIOD_IN); in tpd12s015_probe()
163 if (IS_ERR(gpio)) in tpd12s015_probe()
164 return PTR_ERR(gpio); in tpd12s015_probe()
166 tpd->hpd_gpio = gpio; in tpd12s015_probe()
168 /* Register the IRQ if the HPD GPIO is IRQ-capable. */ in tpd12s015_probe()
169 tpd->hpd_irq = gpiod_to_irq(tpd->hpd_gpio); in tpd12s015_probe()
170 if (tpd->hpd_irq >= 0) { in tpd12s015_probe()
171 ret = devm_request_threaded_irq(&pdev->dev, tpd->hpd_irq, NULL, in tpd12s015_probe()
176 "tpd12s015 hpd", tpd); in tpd12s015_probe()
180 tpd->bridge.ops |= DRM_BRIDGE_OP_HPD; in tpd12s015_probe()
184 drm_bridge_add(&tpd->bridge); in tpd12s015_probe()
193 drm_bridge_remove(&tpd->bridge); in tpd12s015_remove()