Lines Matching refs:output
17 struct tegra_output *output = connector_to_output(connector); in tegra_output_connector_get_modes() local
25 if (output->panel) { in tegra_output_connector_get_modes()
26 err = output->panel->funcs->get_modes(output->panel); in tegra_output_connector_get_modes()
31 if (output->edid) in tegra_output_connector_get_modes()
32 edid = kmemdup(output->edid, sizeof(*edid), GFP_KERNEL); in tegra_output_connector_get_modes()
33 else if (output->ddc) in tegra_output_connector_get_modes()
34 edid = drm_get_edid(connector, output->ddc); in tegra_output_connector_get_modes()
36 cec_notifier_set_phys_addr_from_edid(output->cec, edid); in tegra_output_connector_get_modes()
50 struct tegra_output *output = connector_to_output(connector); in tegra_output_connector_detect() local
53 if (output->hpd_gpio) { in tegra_output_connector_detect()
54 if (gpiod_get_value(output->hpd_gpio) == 0) in tegra_output_connector_detect()
59 if (!output->panel) in tegra_output_connector_detect()
66 cec_notifier_phys_addr_invalidate(output->cec); in tegra_output_connector_detect()
84 struct tegra_output *output = data; in hpd_irq() local
86 if (output->connector.dev) in hpd_irq()
87 drm_helper_hpd_irq_event(output->connector.dev); in hpd_irq()
92 int tegra_output_probe(struct tegra_output *output) in tegra_output_probe() argument
98 if (!output->of_node) in tegra_output_probe()
99 output->of_node = output->dev->of_node; in tegra_output_probe()
101 panel = of_parse_phandle(output->of_node, "nvidia,panel", 0); in tegra_output_probe()
103 output->panel = of_drm_find_panel(panel); in tegra_output_probe()
104 if (IS_ERR(output->panel)) in tegra_output_probe()
105 return PTR_ERR(output->panel); in tegra_output_probe()
110 output->edid = of_get_property(output->of_node, "nvidia,edid", &size); in tegra_output_probe()
112 ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0); in tegra_output_probe()
114 output->ddc = of_find_i2c_adapter_by_node(ddc); in tegra_output_probe()
115 if (!output->ddc) { in tegra_output_probe()
124 output->hpd_gpio = devm_gpiod_get_from_of_node(output->dev, in tegra_output_probe()
125 output->of_node, in tegra_output_probe()
129 if (IS_ERR(output->hpd_gpio)) { in tegra_output_probe()
130 if (PTR_ERR(output->hpd_gpio) != -ENOENT) in tegra_output_probe()
131 return PTR_ERR(output->hpd_gpio); in tegra_output_probe()
133 output->hpd_gpio = NULL; in tegra_output_probe()
136 if (output->hpd_gpio) { in tegra_output_probe()
137 err = gpiod_to_irq(output->hpd_gpio); in tegra_output_probe()
139 dev_err(output->dev, "gpiod_to_irq(): %d\n", err); in tegra_output_probe()
143 output->hpd_irq = err; in tegra_output_probe()
148 err = request_threaded_irq(output->hpd_irq, NULL, hpd_irq, in tegra_output_probe()
149 flags, "hpd", output); in tegra_output_probe()
151 dev_err(output->dev, "failed to request IRQ#%u: %d\n", in tegra_output_probe()
152 output->hpd_irq, err); in tegra_output_probe()
156 output->connector.polled = DRM_CONNECTOR_POLL_HPD; in tegra_output_probe()
163 disable_irq(output->hpd_irq); in tegra_output_probe()
166 output->cec = cec_notifier_get(output->dev); in tegra_output_probe()
167 if (!output->cec) in tegra_output_probe()
173 void tegra_output_remove(struct tegra_output *output) in tegra_output_remove() argument
175 if (output->cec) in tegra_output_remove()
176 cec_notifier_put(output->cec); in tegra_output_remove()
178 if (output->hpd_gpio) in tegra_output_remove()
179 free_irq(output->hpd_irq, output); in tegra_output_remove()
181 if (output->ddc) in tegra_output_remove()
182 put_device(&output->ddc->dev); in tegra_output_remove()
185 int tegra_output_init(struct drm_device *drm, struct tegra_output *output) in tegra_output_init() argument
189 if (output->panel) { in tegra_output_init()
190 err = drm_panel_attach(output->panel, &output->connector); in tegra_output_init()
199 if (output->hpd_gpio) in tegra_output_init()
200 enable_irq(output->hpd_irq); in tegra_output_init()
205 void tegra_output_exit(struct tegra_output *output) in tegra_output_exit() argument
211 if (output->hpd_gpio) in tegra_output_exit()
212 disable_irq(output->hpd_irq); in tegra_output_exit()
214 if (output->panel) in tegra_output_exit()
215 drm_panel_detach(output->panel); in tegra_output_exit()
218 void tegra_output_find_possible_crtcs(struct tegra_output *output, in tegra_output_find_possible_crtcs() argument
221 struct device *dev = output->dev; in tegra_output_find_possible_crtcs()
237 output->encoder.possible_crtcs = mask; in tegra_output_find_possible_crtcs()