Lines Matching defs:output
19 struct tegra_output *output = connector_to_output(connector);
27 if (output->panel) {
28 err = drm_panel_get_modes(output->panel, connector);
33 if (output->edid)
34 edid = kmemdup(output->edid, sizeof(*edid), GFP_KERNEL);
35 else if (output->ddc)
36 edid = drm_get_edid(connector, output->ddc);
38 cec_notifier_set_phys_addr_from_edid(output->cec, edid);
52 struct tegra_output *output = connector_to_output(connector);
55 if (output->hpd_gpio) {
56 if (gpiod_get_value(output->hpd_gpio) == 0)
61 if (!output->panel)
68 cec_notifier_phys_addr_invalidate(output->cec);
75 struct tegra_output *output = connector_to_output(connector);
77 if (output->cec)
78 cec_notifier_conn_unregister(output->cec);
86 struct tegra_output *output = data;
88 if (output->connector.dev)
89 drm_helper_hpd_irq_event(output->connector.dev);
94 int tegra_output_probe(struct tegra_output *output)
100 if (!output->of_node)
101 output->of_node = output->dev->of_node;
103 err = drm_of_find_panel_or_bridge(output->of_node, -1, -1,
104 &output->panel, &output->bridge);
108 panel = of_parse_phandle(output->of_node, "nvidia,panel", 0);
114 WARN_ON(output->panel || output->bridge);
116 output->panel = of_drm_find_panel(panel);
119 if (IS_ERR(output->panel))
120 return PTR_ERR(output->panel);
123 output->edid = of_get_property(output->of_node, "nvidia,edid", &size);
125 ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0);
127 output->ddc = of_get_i2c_adapter_by_node(ddc);
130 if (!output->ddc) {
136 output->hpd_gpio = devm_gpiod_get_from_of_node(output->dev,
137 output->of_node,
141 if (IS_ERR(output->hpd_gpio)) {
142 if (PTR_ERR(output->hpd_gpio) != -ENOENT)
143 return PTR_ERR(output->hpd_gpio);
145 output->hpd_gpio = NULL;
148 if (output->hpd_gpio) {
149 err = gpiod_to_irq(output->hpd_gpio);
151 dev_err(output->dev, "gpiod_to_irq(): %d\n", err);
155 output->hpd_irq = err;
160 err = request_threaded_irq(output->hpd_irq, NULL, hpd_irq,
161 flags, "hpd", output);
163 dev_err(output->dev, "failed to request IRQ#%u: %d\n",
164 output->hpd_irq, err);
168 output->connector.polled = DRM_CONNECTOR_POLL_HPD;
175 disable_irq(output->hpd_irq);
181 void tegra_output_remove(struct tegra_output *output)
183 if (output->hpd_gpio)
184 free_irq(output->hpd_irq, output);
186 if (output->ddc)
187 i2c_put_adapter(output->ddc);
190 int tegra_output_init(struct drm_device *drm, struct tegra_output *output)
198 if (output->hpd_gpio)
199 enable_irq(output->hpd_irq);
201 connector_type = output->connector.connector_type;
209 cec_fill_conn_info_from_drm(&conn_info, &output->connector);
210 output->cec = cec_notifier_conn_register(output->dev, NULL,
212 if (!output->cec)
219 void tegra_output_exit(struct tegra_output *output)
225 if (output->hpd_gpio)
226 disable_irq(output->hpd_irq);
229 void tegra_output_find_possible_crtcs(struct tegra_output *output,
232 struct device *dev = output->dev;
244 dev_warn(dev, "missing output definition for heads in DT\n");
248 output->encoder.possible_crtcs = mask;
251 int tegra_output_suspend(struct tegra_output *output)
253 if (output->hpd_irq)
254 disable_irq(output->hpd_irq);
259 int tegra_output_resume(struct tegra_output *output)
261 if (output->hpd_irq)
262 enable_irq(output->hpd_irq);