Lines Matching refs:path

16 static struct mmp_overlay *path_get_overlay(struct mmp_path *path,
19 if (path && overlay_id < path->overlay_num)
20 return &path->overlays[overlay_id];
24 static int path_check_status(struct mmp_path *path)
27 for (i = 0; i < path->overlay_num; i++)
28 if (path->overlays[i].status)
41 static int path_get_modelist(struct mmp_path *path,
44 BUG_ON(!path || !modelist);
46 if (path->panel && path->panel->get_modelist)
47 return path->panel->get_modelist(path->panel, modelist);
53 * panel list is used to pair panel/path when path/panel registered
54 * path list is used for both buffer driver and platdriver
55 * plat driver do path register/unregister
57 * buffer driver get registered path
64 * mmp_register_panel - register panel to panel_list and connect to path
68 * to panel_list and connect to path which matchs panel->plat_path_name.
69 * no error returns when no matching path is found as path register after
74 struct mmp_path *path;
81 /* try to register to path */
82 list_for_each_entry(path, &path_list, node) {
83 if (!strcmp(panel->plat_path_name, path->name)) {
84 dev_info(panel->dev, "connect to path %s\n",
85 path->name);
86 path->panel = panel;
100 * from panel_list and disconnect from path.
104 struct mmp_path *path;
109 list_for_each_entry(path, &path_list, node) {
110 if (path->panel && path->panel == panel) {
111 dev_info(panel->dev, "disconnect from path %s\n",
112 path->name);
113 path->panel = NULL;
122 * mmp_get_path - get path by name
123 * @p: path name
125 * this function checks path name in path_list and return matching path
126 * return NULL if no matching path
130 struct mmp_path *path = NULL, *iter;
135 path = iter;
141 return path;
146 * mmp_register_path - init and register path by path_info
147 * @p: path info provided by display controller
149 * this function init by path info and register path to path_list
150 * this function also try to connect path with panel by name
155 struct mmp_path *path = NULL;
158 path = kzalloc(struct_size(path, overlays, info->overlay_num),
160 if (!path)
163 /* path set */
164 mutex_init(&path->access_ok);
165 path->dev = info->dev;
166 path->id = info->id;
167 path->name = info->name;
168 path->output_type = info->output_type;
169 path->overlay_num = info->overlay_num;
170 path->plat_data = info->plat_data;
171 path->ops.set_mode = info->set_mode;
177 dev_info(path->dev, "get panel %s\n", panel->name);
178 path->panel = panel;
183 dev_info(path->dev, "register %s, overlay_num %d\n",
184 path->name, path->overlay_num);
187 if (!path->ops.check_status)
188 path->ops.check_status = path_check_status;
189 if (!path->ops.get_overlay)
190 path->ops.get_overlay = path_get_overlay;
191 if (!path->ops.get_modelist)
192 path->ops.get_modelist = path_get_modelist;
195 for (i = 0; i < path->overlay_num; i++) {
196 path->overlays[i].path = path;
197 path->overlays[i].id = i;
198 mutex_init(&path->overlays[i].access_ok);
199 path->overlays[i].ops = info->overlay_ops;
203 list_add_tail(&path->node, &path_list);
206 return path;
211 * mmp_unregister_path - unregister and destroy path
212 * @p: path to be destroyed.
214 * this function registers path and destroys it.
216 void mmp_unregister_path(struct mmp_path *path)
220 if (!path)
225 list_del(&path->node);
228 for (i = 0; i < path->overlay_num; i++)
229 mutex_destroy(&path->overlays[i].access_ok);
231 mutex_destroy(&path->access_ok);
233 kfree(path);