Lines Matching full:output
20 struct tegra_output *output = connector_to_output(connector); in tegra_output_connector_get_modes() local
28 if (output->panel) { in tegra_output_connector_get_modes()
29 err = output->panel->funcs->get_modes(output->panel); in tegra_output_connector_get_modes()
34 if (output->edid) in tegra_output_connector_get_modes()
35 edid = kmemdup(output->edid, sizeof(*edid), GFP_KERNEL); in tegra_output_connector_get_modes()
36 else if (output->ddc) in tegra_output_connector_get_modes()
37 edid = drm_get_edid(connector, output->ddc); in tegra_output_connector_get_modes()
39 cec_notifier_set_phys_addr_from_edid(output->notifier, edid); in tegra_output_connector_get_modes()
53 struct tegra_output *output = connector_to_output(connector); in tegra_output_connector_detect() local
56 if (gpio_is_valid(output->hpd_gpio)) { in tegra_output_connector_detect()
57 if (output->hpd_gpio_flags & OF_GPIO_ACTIVE_LOW) { in tegra_output_connector_detect()
58 if (gpio_get_value(output->hpd_gpio) != 0) in tegra_output_connector_detect()
63 if (gpio_get_value(output->hpd_gpio) == 0) in tegra_output_connector_detect()
69 if (!output->panel) in tegra_output_connector_detect()
76 cec_notifier_phys_addr_invalidate(output->notifier); in tegra_output_connector_detect()
94 struct tegra_output *output = data; in hpd_irq() local
96 if (output->connector.dev) in hpd_irq()
97 drm_helper_hpd_irq_event(output->connector.dev); in hpd_irq()
102 int tegra_output_probe(struct tegra_output *output) in tegra_output_probe() argument
107 if (!output->of_node) in tegra_output_probe()
108 output->of_node = output->dev->of_node; in tegra_output_probe()
110 panel = of_parse_phandle(output->of_node, "nvidia,panel", 0); in tegra_output_probe()
112 output->panel = of_drm_find_panel(panel); in tegra_output_probe()
113 if (IS_ERR(output->panel)) in tegra_output_probe()
114 return PTR_ERR(output->panel); in tegra_output_probe()
119 output->edid = of_get_property(output->of_node, "nvidia,edid", &size); in tegra_output_probe()
121 ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0); in tegra_output_probe()
123 output->ddc = of_find_i2c_adapter_by_node(ddc); in tegra_output_probe()
124 if (!output->ddc) { in tegra_output_probe()
133 output->hpd_gpio = of_get_named_gpio_flags(output->of_node, in tegra_output_probe()
135 &output->hpd_gpio_flags); in tegra_output_probe()
136 if (gpio_is_valid(output->hpd_gpio)) { in tegra_output_probe()
139 err = gpio_request_one(output->hpd_gpio, GPIOF_DIR_IN, in tegra_output_probe()
142 dev_err(output->dev, "gpio_request_one(): %d\n", err); in tegra_output_probe()
146 err = gpio_to_irq(output->hpd_gpio); in tegra_output_probe()
148 dev_err(output->dev, "gpio_to_irq(): %d\n", err); in tegra_output_probe()
149 gpio_free(output->hpd_gpio); in tegra_output_probe()
153 output->hpd_irq = err; in tegra_output_probe()
158 err = request_threaded_irq(output->hpd_irq, NULL, hpd_irq, in tegra_output_probe()
159 flags, "hpd", output); in tegra_output_probe()
161 dev_err(output->dev, "failed to request IRQ#%u: %d\n", in tegra_output_probe()
162 output->hpd_irq, err); in tegra_output_probe()
163 gpio_free(output->hpd_gpio); in tegra_output_probe()
167 output->connector.polled = DRM_CONNECTOR_POLL_HPD; in tegra_output_probe()
174 disable_irq(output->hpd_irq); in tegra_output_probe()
180 void tegra_output_remove(struct tegra_output *output) in tegra_output_remove() argument
182 if (gpio_is_valid(output->hpd_gpio)) { in tegra_output_remove()
183 free_irq(output->hpd_irq, output); in tegra_output_remove()
184 gpio_free(output->hpd_gpio); in tegra_output_remove()
187 if (output->ddc) in tegra_output_remove()
188 put_device(&output->ddc->dev); in tegra_output_remove()
191 int tegra_output_init(struct drm_device *drm, struct tegra_output *output) in tegra_output_init() argument
195 if (output->panel) { in tegra_output_init()
196 err = drm_panel_attach(output->panel, &output->connector); in tegra_output_init()
205 if (gpio_is_valid(output->hpd_gpio)) in tegra_output_init()
206 enable_irq(output->hpd_irq); in tegra_output_init()
211 void tegra_output_exit(struct tegra_output *output) in tegra_output_exit() argument
217 if (gpio_is_valid(output->hpd_gpio)) in tegra_output_exit()
218 disable_irq(output->hpd_irq); in tegra_output_exit()
220 if (output->panel) in tegra_output_exit()
221 drm_panel_detach(output->panel); in tegra_output_exit()
224 void tegra_output_find_possible_crtcs(struct tegra_output *output, in tegra_output_find_possible_crtcs() argument
227 struct device *dev = output->dev; in tegra_output_find_possible_crtcs()
239 dev_warn(dev, "missing output definition for heads in DT\n"); in tegra_output_find_possible_crtcs()
243 output->encoder.possible_crtcs = mask; in tegra_output_find_possible_crtcs()