Lines Matching +full:ddc +full:- +full:i2c +full:- +full:bus

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2015-2016 Free Electrons
4 * Copyright (C) 2015-2016 NextThing Co
6 * Maxime Ripard <maxime.ripard@free-electrons.com>
23 struct i2c_adapter *ddc; member
45 if (!vga->ddc) in dumb_vga_get_modes()
48 edid = drm_get_edid(connector, vga->ddc); in dumb_vga_get_modes()
61 * In case we cannot retrieve the EDIDs (broken or missing i2c in dumb_vga_get_modes()
62 * bus), fallback on the XGA standards in dumb_vga_get_modes()
82 * Even if we have an I2C bus, we can't assume that the cable in dumb_vga_connector_detect()
84 * wire the DDC pins, or the I2C bus might not be working at in dumb_vga_connector_detect()
87 if (vga->ddc && drm_probe_ddc(vga->ddc)) in dumb_vga_connector_detect()
107 if (!bridge->encoder) { in dumb_vga_attach()
109 return -ENODEV; in dumb_vga_attach()
112 drm_connector_helper_add(&vga->connector, in dumb_vga_attach()
114 ret = drm_connector_init_with_ddc(bridge->dev, &vga->connector, in dumb_vga_attach()
117 vga->ddc); in dumb_vga_attach()
123 drm_connector_attach_encoder(&vga->connector, in dumb_vga_attach()
124 bridge->encoder); in dumb_vga_attach()
134 if (vga->vdd) in dumb_vga_enable()
135 ret = regulator_enable(vga->vdd); in dumb_vga_enable()
145 if (vga->vdd) in dumb_vga_disable()
146 regulator_disable(vga->vdd); in dumb_vga_disable()
158 struct i2c_adapter *ddc; in dumb_vga_retrieve_ddc() local
160 remote = of_graph_get_remote_node(dev->of_node, 1, -1); in dumb_vga_retrieve_ddc()
162 return ERR_PTR(-EINVAL); in dumb_vga_retrieve_ddc()
164 phandle = of_parse_phandle(remote, "ddc-i2c-bus", 0); in dumb_vga_retrieve_ddc()
167 return ERR_PTR(-ENODEV); in dumb_vga_retrieve_ddc()
169 ddc = of_get_i2c_adapter_by_node(phandle); in dumb_vga_retrieve_ddc()
171 if (!ddc) in dumb_vga_retrieve_ddc()
172 return ERR_PTR(-EPROBE_DEFER); in dumb_vga_retrieve_ddc()
174 return ddc; in dumb_vga_retrieve_ddc()
181 vga = devm_kzalloc(&pdev->dev, sizeof(*vga), GFP_KERNEL); in dumb_vga_probe()
183 return -ENOMEM; in dumb_vga_probe()
186 vga->vdd = devm_regulator_get_optional(&pdev->dev, "vdd"); in dumb_vga_probe()
187 if (IS_ERR(vga->vdd)) { in dumb_vga_probe()
188 int ret = PTR_ERR(vga->vdd); in dumb_vga_probe()
189 if (ret == -EPROBE_DEFER) in dumb_vga_probe()
190 return -EPROBE_DEFER; in dumb_vga_probe()
191 vga->vdd = NULL; in dumb_vga_probe()
192 dev_dbg(&pdev->dev, "No vdd regulator found: %d\n", ret); in dumb_vga_probe()
195 vga->ddc = dumb_vga_retrieve_ddc(&pdev->dev); in dumb_vga_probe()
196 if (IS_ERR(vga->ddc)) { in dumb_vga_probe()
197 if (PTR_ERR(vga->ddc) == -ENODEV) { in dumb_vga_probe()
198 dev_dbg(&pdev->dev, in dumb_vga_probe()
199 "No i2c bus specified. Disabling EDID readout\n"); in dumb_vga_probe()
200 vga->ddc = NULL; in dumb_vga_probe()
202 dev_err(&pdev->dev, "Couldn't retrieve i2c bus\n"); in dumb_vga_probe()
203 return PTR_ERR(vga->ddc); in dumb_vga_probe()
207 vga->bridge.funcs = &dumb_vga_bridge_funcs; in dumb_vga_probe()
208 vga->bridge.of_node = pdev->dev.of_node; in dumb_vga_probe()
209 vga->bridge.timings = of_device_get_match_data(&pdev->dev); in dumb_vga_probe()
211 drm_bridge_add(&vga->bridge); in dumb_vga_probe()
220 drm_bridge_remove(&vga->bridge); in dumb_vga_remove()
222 if (vga->ddc) in dumb_vga_remove()
223 i2c_put_adapter(vga->ddc); in dumb_vga_remove()
268 .compatible = "dumb-vga-dac",
291 .name = "dumb-vga-dac",
297 MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");