Lines Matching refs:panel

59 void drm_panel_init(struct drm_panel *panel, struct device *dev,  in drm_panel_init()  argument
65 INIT_LIST_HEAD(&panel->list); in drm_panel_init()
66 INIT_LIST_HEAD(&panel->followers); in drm_panel_init()
67 mutex_init(&panel->follower_lock); in drm_panel_init()
68 panel->dev = dev; in drm_panel_init()
69 panel->funcs = funcs; in drm_panel_init()
70 panel->connector_type = connector_type; in drm_panel_init()
82 void drm_panel_add(struct drm_panel *panel) in drm_panel_add() argument
85 list_add_tail(&panel->list, &panel_list); in drm_panel_add()
96 void drm_panel_remove(struct drm_panel *panel) in drm_panel_remove() argument
99 list_del_init(&panel->list); in drm_panel_remove()
114 void drm_panel_prepare(struct drm_panel *panel) in drm_panel_prepare() argument
119 if (!panel) in drm_panel_prepare()
122 if (panel->prepared) { in drm_panel_prepare()
123 dev_warn(panel->dev, "Skipping prepare of already prepared panel\n"); in drm_panel_prepare()
127 mutex_lock(&panel->follower_lock); in drm_panel_prepare()
129 if (panel->funcs && panel->funcs->prepare) { in drm_panel_prepare()
130 ret = panel->funcs->prepare(panel); in drm_panel_prepare()
134 panel->prepared = true; in drm_panel_prepare()
136 list_for_each_entry(follower, &panel->followers, list) { in drm_panel_prepare()
139 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_prepare()
144 mutex_unlock(&panel->follower_lock); in drm_panel_prepare()
157 void drm_panel_unprepare(struct drm_panel *panel) in drm_panel_unprepare() argument
162 if (!panel) 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()
184 dev_info(panel->dev, "%ps failed: %d\n", 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()
196 mutex_unlock(&panel->follower_lock); in drm_panel_unprepare()
210 void drm_panel_enable(struct drm_panel *panel) in drm_panel_enable() argument
214 if (!panel) in drm_panel_enable()
217 if (panel->enabled) { in drm_panel_enable()
218 dev_warn(panel->dev, "Skipping enable of already enabled panel\n"); in drm_panel_enable()
222 if (panel->funcs && panel->funcs->enable) { in drm_panel_enable()
223 ret = panel->funcs->enable(panel); in drm_panel_enable()
227 panel->enabled = true; in drm_panel_enable()
229 ret = backlight_enable(panel->backlight); in drm_panel_enable()
231 DRM_DEV_INFO(panel->dev, "failed to enable backlight: %d\n", in drm_panel_enable()
244 void drm_panel_disable(struct drm_panel *panel) in drm_panel_disable() argument
248 if (!panel) in drm_panel_disable()
260 if (!panel->enabled) { in drm_panel_disable()
261 dev_warn(panel->dev, "Skipping disable of already disabled panel\n"); in drm_panel_disable()
265 ret = backlight_disable(panel->backlight); in drm_panel_disable()
267 DRM_DEV_INFO(panel->dev, "failed to disable backlight: %d\n", in drm_panel_disable()
270 if (panel->funcs && panel->funcs->disable) { in drm_panel_disable()
271 ret = panel->funcs->disable(panel); in drm_panel_disable()
275 panel->enabled = false; in drm_panel_disable()
290 int drm_panel_get_modes(struct drm_panel *panel, in drm_panel_get_modes() argument
293 if (!panel) in drm_panel_get_modes()
296 if (panel->funcs && panel->funcs->get_modes) { in drm_panel_get_modes()
299 num = panel->funcs->get_modes(panel, connector); in drm_panel_get_modes()
310 struct drm_panel *panel = container_of(kref, struct drm_panel, refcount); in __drm_panel_free() local
312 kfree(panel->container); in __drm_panel_free()
323 struct drm_panel *drm_panel_get(struct drm_panel *panel) in drm_panel_get() argument
325 if (!panel) in drm_panel_get()
326 return panel; in drm_panel_get()
328 kref_get(&panel->refcount); in drm_panel_get()
330 return panel; in drm_panel_get()
341 void drm_panel_put(struct drm_panel *panel) in drm_panel_put() argument
343 if (panel) in drm_panel_put()
344 kref_put(&panel->refcount, __drm_panel_free); in drm_panel_put()
358 struct drm_panel *panel = (struct drm_panel *)data; in drm_panel_put_void() local
360 drm_panel_put(panel); in drm_panel_put_void()
368 struct drm_panel *panel; in __devm_drm_panel_alloc() local
380 panel = container + offset; in __devm_drm_panel_alloc()
381 panel->container = container; in __devm_drm_panel_alloc()
382 panel->funcs = funcs; in __devm_drm_panel_alloc()
383 kref_init(&panel->refcount); in __devm_drm_panel_alloc()
385 err = devm_add_action_or_reset(dev, drm_panel_put_void, panel); in __devm_drm_panel_alloc()
389 drm_panel_init(panel, dev, funcs, connector_type); in __devm_drm_panel_alloc()
414 struct drm_panel *panel; in of_drm_find_panel() local
421 list_for_each_entry(panel, &panel_list, list) { in of_drm_find_panel()
422 if (panel->dev->of_node == np) { in of_drm_find_panel()
424 return panel; in of_drm_find_panel()
480 struct drm_panel *panel; in find_panel_by_fwnode() local
487 list_for_each_entry(panel, &panel_list, list) { in find_panel_by_fwnode()
488 if (dev_fwnode(panel->dev) == fwnode) { in find_panel_by_fwnode()
490 return panel; in find_panel_by_fwnode()
503 struct drm_panel *panel; in find_panel_by_dev() local
509 panel = find_panel_by_fwnode(fwnode); in find_panel_by_dev()
512 return panel; in find_panel_by_dev()
559 struct drm_panel *panel; in drm_panel_add_follower() local
562 panel = find_panel_by_dev(follower_dev); in drm_panel_add_follower()
563 if (IS_ERR(panel)) in drm_panel_add_follower()
564 return PTR_ERR(panel); in drm_panel_add_follower()
566 get_device(panel->dev); in drm_panel_add_follower()
567 follower->panel = panel; in drm_panel_add_follower()
569 mutex_lock(&panel->follower_lock); in drm_panel_add_follower()
571 list_add_tail(&follower->list, &panel->followers); in drm_panel_add_follower()
572 if (panel->prepared) { in drm_panel_add_follower()
575 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_add_follower()
579 mutex_unlock(&panel->follower_lock); in drm_panel_add_follower()
596 struct drm_panel *panel = follower->panel; in drm_panel_remove_follower() local
599 mutex_lock(&panel->follower_lock); in drm_panel_remove_follower()
601 if (panel->prepared) { in drm_panel_remove_follower()
604 dev_info(panel->dev, "%ps failed: %d\n", in drm_panel_remove_follower()
609 mutex_unlock(&panel->follower_lock); in drm_panel_remove_follower()
611 put_device(panel->dev); in drm_panel_remove_follower()
664 int drm_panel_of_backlight(struct drm_panel *panel) in drm_panel_of_backlight() argument
668 if (!panel || !panel->dev) in drm_panel_of_backlight()
671 backlight = devm_of_find_backlight(panel->dev); in drm_panel_of_backlight()
676 panel->backlight = backlight; in drm_panel_of_backlight()