Lines Matching refs:dlpc

55 struct dlpc {
70 static inline struct dlpc *bridge_to_dlpc(struct drm_bridge *bridge)
72 return container_of(bridge, struct dlpc, bridge);
110 struct dlpc *dlpc = bridge_to_dlpc(bridge);
111 struct device *dev = dlpc->dev;
112 struct drm_display_mode *mode = &dlpc->mode;
113 struct regmap *regmap = dlpc->regmap;
175 struct dlpc *dlpc = bridge_to_dlpc(bridge);
178 gpiod_set_value(dlpc->enable_gpio, 1);
182 ret = regulator_enable(dlpc->vcc_intf);
184 DRM_DEV_ERROR(dlpc->dev,
187 ret = regulator_enable(dlpc->vcc_flsh);
189 DRM_DEV_ERROR(dlpc->dev,
198 struct dlpc *dlpc = bridge_to_dlpc(bridge);
200 regulator_disable(dlpc->vcc_flsh);
201 regulator_disable(dlpc->vcc_intf);
205 gpiod_set_value(dlpc->enable_gpio, 0);
240 struct dlpc *dlpc = bridge_to_dlpc(bridge);
242 drm_mode_copy(&dlpc->mode, adjusted_mode);
248 struct dlpc *dlpc = bridge_to_dlpc(bridge);
250 return drm_bridge_attach(bridge->encoder, dlpc->next_bridge, bridge, flags);
265 static int dlpc3433_parse_dt(struct dlpc *dlpc)
267 struct device *dev = dlpc->dev;
271 dlpc->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
272 if (IS_ERR(dlpc->enable_gpio))
273 return PTR_ERR(dlpc->enable_gpio);
275 dlpc->vcc_intf = devm_regulator_get(dlpc->dev, "vcc_intf");
276 if (IS_ERR(dlpc->vcc_intf))
277 return dev_err_probe(dev, PTR_ERR(dlpc->vcc_intf),
280 dlpc->vcc_flsh = devm_regulator_get(dlpc->dev, "vcc_flsh");
281 if (IS_ERR(dlpc->vcc_flsh))
282 return dev_err_probe(dev, PTR_ERR(dlpc->vcc_flsh),
285 dlpc->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 1, 0);
286 if (IS_ERR(dlpc->next_bridge))
287 return PTR_ERR(dlpc->next_bridge);
290 dlpc->dsi_lanes = of_property_count_u32_elems(endpoint, "data-lanes");
291 if (dlpc->dsi_lanes < 0 || dlpc->dsi_lanes > 4) {
296 dlpc->host_node = of_graph_get_remote_port_parent(endpoint);
297 if (!dlpc->host_node) {
307 of_node_put(dlpc->host_node);
313 static int dlpc_host_attach(struct dlpc *dlpc)
315 struct device *dev = dlpc->dev;
323 host = of_find_mipi_dsi_host_by_node(dlpc->host_node);
329 dlpc->dsi = mipi_dsi_device_register_full(host, &info);
330 if (IS_ERR(dlpc->dsi)) {
332 return PTR_ERR(dlpc->dsi);
335 dlpc->dsi->mode_flags = MIPI_DSI_MODE_VIDEO_BURST;
336 dlpc->dsi->format = MIPI_DSI_FMT_RGB565;
337 dlpc->dsi->lanes = dlpc->dsi_lanes;
339 return devm_mipi_dsi_attach(dev, dlpc->dsi);
345 struct dlpc *dlpc;
348 dlpc = devm_kzalloc(dev, sizeof(*dlpc), GFP_KERNEL);
349 if (!dlpc)
352 dlpc->dev = dev;
354 dlpc->regmap = devm_regmap_init_i2c(client, &dlpc_regmap_config);
355 if (IS_ERR(dlpc->regmap))
356 return PTR_ERR(dlpc->regmap);
358 ret = dlpc3433_parse_dt(dlpc);
362 dev_set_drvdata(dev, dlpc);
363 i2c_set_clientdata(client, dlpc);
365 dlpc->bridge.funcs = &dlpc_bridge_funcs;
366 dlpc->bridge.of_node = dev->of_node;
367 drm_bridge_add(&dlpc->bridge);
369 ret = dlpc_host_attach(dlpc);
378 drm_bridge_remove(&dlpc->bridge);
384 struct dlpc *dlpc = i2c_get_clientdata(client);
386 drm_bridge_remove(&dlpc->bridge);
387 of_node_put(dlpc->host_node);