Lines Matching full:output

23 	struct tegra_output *output = connector_to_output(connector);
31 if (output->panel) {
32 err = drm_panel_get_modes(output->panel, connector);
37 if (output->drm_edid)
38 drm_edid = drm_edid_dup(output->drm_edid);
39 else if (output->ddc)
40 drm_edid = drm_edid_read_ddc(connector, output->ddc);
43 cec_notifier_set_phys_addr(output->cec,
55 struct tegra_output *output = connector_to_output(connector);
58 if (output->hpd_gpio) {
59 if (gpiod_get_value(output->hpd_gpio) == 0)
64 if (!output->panel)
71 cec_notifier_phys_addr_invalidate(output->cec);
78 struct tegra_output *output = connector_to_output(connector);
80 if (output->cec)
81 cec_notifier_conn_unregister(output->cec);
89 struct tegra_output *output = data;
91 if (output->connector.dev)
92 drm_helper_hpd_irq_event(output->connector.dev);
97 int tegra_output_probe(struct tegra_output *output)
104 if (!output->of_node)
105 output->of_node = output->dev->of_node;
107 err = drm_of_find_panel_or_bridge(output->of_node, -1, -1,
108 &output->panel, &output->bridge);
112 panel = of_parse_phandle(output->of_node, "nvidia,panel", 0);
118 WARN_ON(output->panel || output->bridge);
120 output->panel = of_drm_find_panel(panel);
123 if (IS_ERR(output->panel))
124 return PTR_ERR(output->panel);
127 ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0);
129 output->ddc = of_get_i2c_adapter_by_node(ddc);
132 if (!output->ddc) {
138 edid = of_get_property(output->of_node, "nvidia,edid", &size);
139 output->drm_edid = drm_edid_alloc(edid, size);
141 output->hpd_gpio = devm_fwnode_gpiod_get(output->dev,
142 of_fwnode_handle(output->of_node),
146 if (IS_ERR(output->hpd_gpio)) {
147 if (PTR_ERR(output->hpd_gpio) != -ENOENT) {
148 err = PTR_ERR(output->hpd_gpio);
152 output->hpd_gpio = NULL;
155 if (output->hpd_gpio) {
156 err = gpiod_to_irq(output->hpd_gpio);
158 dev_err(output->dev, "gpiod_to_irq(): %d\n", err);
162 output->hpd_irq = err;
167 err = request_threaded_irq(output->hpd_irq, NULL, hpd_irq,
168 flags, "hpd", output);
170 dev_err(output->dev, "failed to request IRQ#%u: %d\n",
171 output->hpd_irq, err);
175 output->connector.polled = DRM_CONNECTOR_POLL_HPD;
182 disable_irq(output->hpd_irq);
188 if (output->ddc)
189 i2c_put_adapter(output->ddc);
191 drm_edid_free(output->drm_edid);
196 void tegra_output_remove(struct tegra_output *output)
198 if (output->hpd_gpio)
199 free_irq(output->hpd_irq, output);
201 if (output->ddc)
202 i2c_put_adapter(output->ddc);
204 drm_edid_free(output->drm_edid);
207 int tegra_output_init(struct drm_device *drm, struct tegra_output *output)
215 if (output->hpd_gpio)
216 enable_irq(output->hpd_irq);
218 connector_type = output->connector.connector_type;
226 cec_fill_conn_info_from_drm(&conn_info, &output->connector);
227 output->cec = cec_notifier_conn_register(output->dev, NULL,
229 if (!output->cec)
236 void tegra_output_exit(struct tegra_output *output)
242 if (output->hpd_gpio)
243 disable_irq(output->hpd_irq);
246 void tegra_output_find_possible_crtcs(struct tegra_output *output,
249 struct device *dev = output->dev;
261 dev_warn(dev, "missing output definition for heads in DT\n");
265 output->encoder.possible_crtcs = mask;
268 int tegra_output_suspend(struct tegra_output *output)
270 if (output->hpd_irq)
271 disable_irq(output->hpd_irq);
276 int tegra_output_resume(struct tegra_output *output)
278 if (output->hpd_irq)
279 enable_irq(output->hpd_irq);