Lines Matching +full:device +full:- +full:tree

17  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
48 * drm_panel_init - initialize a panel
50 * @dev: parent device of the panel
58 void drm_panel_init(struct drm_panel *panel, struct device *dev, in drm_panel_init()
61 INIT_LIST_HEAD(&panel->list); in drm_panel_init()
62 INIT_LIST_HEAD(&panel->followers); in drm_panel_init()
63 mutex_init(&panel->follower_lock); in drm_panel_init()
64 panel->dev = dev; in drm_panel_init()
65 panel->funcs = funcs; in drm_panel_init()
66 panel->connector_type = connector_type; in drm_panel_init()
71 * drm_panel_add - add a panel to the global registry
80 list_add_tail(&panel->list, &panel_list); in drm_panel_add()
86 * drm_panel_remove - remove a panel from the global registry
94 list_del_init(&panel->list); in drm_panel_remove()
100 * drm_panel_prepare - power on a panel
115 return -EINVAL; in drm_panel_prepare()
117 if (panel->prepared) { in drm_panel_prepare()
118 dev_warn(panel->dev, "Skipping prepare of already prepared panel\n"); in drm_panel_prepare()
122 mutex_lock(&panel->follower_lock); in drm_panel_prepare()
124 if (panel->funcs && panel->funcs->prepare) { in drm_panel_prepare()
125 ret = panel->funcs->prepare(panel); in drm_panel_prepare()
129 panel->prepared = true; in drm_panel_prepare()
131 list_for_each_entry(follower, &panel->followers, list) { in drm_panel_prepare()
132 ret = follower->funcs->panel_prepared(follower); in drm_panel_prepare()
134 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_prepare()
135 follower->funcs->panel_prepared, ret); in drm_panel_prepare()
140 mutex_unlock(&panel->follower_lock); in drm_panel_prepare()
147 * drm_panel_unprepare - power off a panel
163 return -EINVAL; in drm_panel_unprepare()
167 * - Your panel driver incorrectly calls drm_panel_unprepare() in its in drm_panel_unprepare()
169 * - You are using panel-edp or panel-simple and your DRM modeset in drm_panel_unprepare()
174 if (!panel->prepared) { in drm_panel_unprepare()
175 dev_warn(panel->dev, "Skipping unprepare of already unprepared panel\n"); in drm_panel_unprepare()
179 mutex_lock(&panel->follower_lock); in drm_panel_unprepare()
181 list_for_each_entry(follower, &panel->followers, list) { in drm_panel_unprepare()
182 ret = follower->funcs->panel_unpreparing(follower); in drm_panel_unprepare()
184 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_unprepare()
185 follower->funcs->panel_unpreparing, ret); in drm_panel_unprepare()
188 if (panel->funcs && panel->funcs->unprepare) { in drm_panel_unprepare()
189 ret = panel->funcs->unprepare(panel); in drm_panel_unprepare()
193 panel->prepared = false; in drm_panel_unprepare()
197 mutex_unlock(&panel->follower_lock); in drm_panel_unprepare()
204 * drm_panel_enable - enable a panel
218 return -EINVAL; in drm_panel_enable()
220 if (panel->enabled) { in drm_panel_enable()
221 dev_warn(panel->dev, "Skipping enable of already enabled panel\n"); in drm_panel_enable()
225 if (panel->funcs && panel->funcs->enable) { in drm_panel_enable()
226 ret = panel->funcs->enable(panel); in drm_panel_enable()
230 panel->enabled = true; in drm_panel_enable()
232 ret = backlight_enable(panel->backlight); in drm_panel_enable()
234 DRM_DEV_INFO(panel->dev, "failed to enable backlight: %d\n", in drm_panel_enable()
242 * drm_panel_disable - disable a panel
256 return -EINVAL; in drm_panel_disable()
260 * - Your panel driver incorrectly calls drm_panel_disable() in its in drm_panel_disable()
262 * - You are using panel-edp or panel-simple and your DRM modeset in drm_panel_disable()
267 if (!panel->enabled) { in drm_panel_disable()
268 dev_warn(panel->dev, "Skipping disable of already disabled panel\n"); in drm_panel_disable()
272 ret = backlight_disable(panel->backlight); in drm_panel_disable()
274 DRM_DEV_INFO(panel->dev, "failed to disable backlight: %d\n", in drm_panel_disable()
277 if (panel->funcs && panel->funcs->disable) { in drm_panel_disable()
278 ret = panel->funcs->disable(panel); in drm_panel_disable()
282 panel->enabled = false; in drm_panel_disable()
289 * drm_panel_get_modes - probe the available display modes of a panel
305 if (panel->funcs && panel->funcs->get_modes) { in drm_panel_get_modes()
308 num = panel->funcs->get_modes(panel, connector); in drm_panel_get_modes()
319 * of_drm_find_panel - look up a panel using a device tree node
320 * @np: device tree node of the panel
322 * Searches the set of registered panels for one that matches the given device
323 * tree node. If a matching panel is found, return a pointer to it.
325 * Return: A pointer to the panel registered for the specified device tree
326 * node or an ERR_PTR() if no panel matching the device tree node can be found.
330 * - EPROBE_DEFER: the panel device has not been probed yet, and the caller
332 * - ENODEV: the device is not available (status != "okay" or "ok")
339 return ERR_PTR(-ENODEV); in of_drm_find_panel()
344 if (panel->dev->of_node == np) { in of_drm_find_panel()
351 return ERR_PTR(-EPROBE_DEFER); in of_drm_find_panel()
356 * of_drm_get_panel_orientation - look up the orientation of the panel through
357 * the "rotation" binding from a device tree node
358 * @np: device tree node of the panel
361 * Looks up the rotation of a panel in the device tree. The orientation of the
362 * panel is expressed as a property name "rotation" in the device tree. The
363 * rotation in the device tree is counter clockwise.
374 if (ret == -EINVAL) { in of_drm_get_panel_orientation()
392 return -EINVAL; in of_drm_get_panel_orientation()
400 * drm_is_panel_follower() - Check if the device is a panel follower
401 * @dev: The 'struct device' to check
403 * This checks to see if a device needs to be power sequenced together with
405 * At the moment panels can only be followed on device tree enabled systems.
410 bool drm_is_panel_follower(struct device *dev) in drm_is_panel_follower()
417 return of_property_present(dev->of_node, "panel"); in drm_is_panel_follower()
422 * drm_panel_add_follower() - Register something to follow panel state.
423 * @follower_dev: The 'struct device' for the follower.
434 * At the moment panels can only be followed on device tree enabled systems.
437 * Return: 0 or an error code. Note that -ENODEV means that we detected that
441 int drm_panel_add_follower(struct device *follower_dev, in drm_panel_add_follower()
448 panel_np = of_parse_phandle(follower_dev->of_node, "panel", 0); in drm_panel_add_follower()
450 return -ENODEV; in drm_panel_add_follower()
457 get_device(panel->dev); in drm_panel_add_follower()
458 follower->panel = panel; in drm_panel_add_follower()
460 mutex_lock(&panel->follower_lock); in drm_panel_add_follower()
462 list_add_tail(&follower->list, &panel->followers); in drm_panel_add_follower()
463 if (panel->prepared) { in drm_panel_add_follower()
464 ret = follower->funcs->panel_prepared(follower); in drm_panel_add_follower()
466 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_add_follower()
467 follower->funcs->panel_prepared, ret); in drm_panel_add_follower()
470 mutex_unlock(&panel->follower_lock); in drm_panel_add_follower()
477 * drm_panel_remove_follower() - Reverse drm_panel_add_follower().
487 struct drm_panel *panel = follower->panel; in drm_panel_remove_follower()
490 mutex_lock(&panel->follower_lock); in drm_panel_remove_follower()
492 if (panel->prepared) { in drm_panel_remove_follower()
493 ret = follower->funcs->panel_unpreparing(follower); in drm_panel_remove_follower()
495 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_remove_follower()
496 follower->funcs->panel_unpreparing, ret); in drm_panel_remove_follower()
498 list_del_init(&follower->list); in drm_panel_remove_follower()
500 mutex_unlock(&panel->follower_lock); in drm_panel_remove_follower()
502 put_device(panel->dev); in drm_panel_remove_follower()
512 * devm_drm_panel_add_follower() - devm version of drm_panel_add_follower()
513 * @follower_dev: The 'struct device' for the follower.
520 int devm_drm_panel_add_follower(struct device *follower_dev, in devm_drm_panel_add_follower()
536 * drm_panel_of_backlight - use backlight device node for backlight
540 * uses device tree and has a backlight phandle.
548 * A typical implementation for a panel driver supporting device tree
559 if (!panel || !panel->dev) in drm_panel_of_backlight()
560 return -EINVAL; in drm_panel_of_backlight()
562 backlight = devm_of_find_backlight(panel->dev); in drm_panel_of_backlight()
567 panel->backlight = backlight; in drm_panel_of_backlight()