Lines Matching +full:- +full:p

1 // SPDX-License-Identifier: GPL-2.0
5 * Author: Guochun Huang <hero.huang@rock-chips.com>
21 #include <dm/uclass-id.h>
22 #include <linux/media-bus-format.h>
30 void *p; in kmemdup() local
32 p = kmalloc(len, gfp); in kmemdup()
33 if (p) in kmemdup()
34 memcpy(p, src, len); in kmemdup()
35 return p; in kmemdup()
47 return -EINVAL; in dsi_panel_parse_cmds()
51 return -ENOMEM; in dsi_panel_parse_cmds()
60 if (dchdr->dlen > len) { in dsi_panel_parse_cmds()
61 pr_err("%s: error, len=%d", __func__, dchdr->dlen); in dsi_panel_parse_cmds()
62 return -EINVAL; in dsi_panel_parse_cmds()
66 len -= sizeof(*dchdr); in dsi_panel_parse_cmds()
67 bp += dchdr->dlen; in dsi_panel_parse_cmds()
68 len -= dchdr->dlen; in dsi_panel_parse_cmds()
75 return -EINVAL; in dsi_panel_parse_cmds()
78 pcmds->cmds = kcalloc(cnt, sizeof(struct cmd_desc), GFP_KERNEL); in dsi_panel_parse_cmds()
79 if (!pcmds->cmds) { in dsi_panel_parse_cmds()
81 return -ENOMEM; in dsi_panel_parse_cmds()
84 pcmds->cmd_cnt = cnt; in dsi_panel_parse_cmds()
85 pcmds->buf = buf; in dsi_panel_parse_cmds()
86 pcmds->blen = blen; in dsi_panel_parse_cmds()
92 len -= sizeof(*dchdr); in dsi_panel_parse_cmds()
94 pcmds->cmds[i].dchdr = *dchdr; in dsi_panel_parse_cmds()
95 pcmds->cmds[i].payload = bp; in dsi_panel_parse_cmds()
96 bp += dchdr->dlen; in dsi_panel_parse_cmds()
97 len -= dchdr->dlen; in dsi_panel_parse_cmds()
110 np = ofnode_find_subnode(dsi_np, "rk628-panel"); in dsi_panel_get_cmds()
112 return -EINVAL; in dsi_panel_get_cmds()
114 data = ofnode_get_property(np, "panel-init-sequence", &len); in dsi_panel_get_cmds()
116 rk628->panel->on_cmds = kcalloc(1, sizeof(struct panel_cmds), GFP_KERNEL); in dsi_panel_get_cmds()
117 if (!rk628->panel->on_cmds) in dsi_panel_get_cmds()
118 return -ENOMEM; in dsi_panel_get_cmds()
120 err = dsi_panel_parse_cmds(data, len, rk628->panel->on_cmds); in dsi_panel_get_cmds()
128 data = ofnode_get_property(np, "panel-exit-sequence", &len); in dsi_panel_get_cmds()
130 rk628->panel->off_cmds = kcalloc(1, sizeof(struct panel_cmds), GFP_KERNEL); in dsi_panel_get_cmds()
131 if (!rk628->panel->off_cmds) { in dsi_panel_get_cmds()
132 ret = -ENOMEM; in dsi_panel_get_cmds()
136 err = dsi_panel_parse_cmds(data, len, rk628->panel->off_cmds); in dsi_panel_get_cmds()
147 kfree(rk628->panel->off_cmds); in dsi_panel_get_cmds()
149 kfree(rk628->panel->on_cmds->cmds); in dsi_panel_get_cmds()
150 kfree(rk628->panel->on_cmds->buf); in dsi_panel_get_cmds()
152 kfree(rk628->panel->on_cmds); in dsi_panel_get_cmds()
160 struct udevice *dev = rk628->dev; in rk628_panel_info_get()
165 return -ENOMEM; in rk628_panel_info_get()
167 ret = uclass_get_device_by_phandle(UCLASS_REGULATOR, dev, "panel-power-supply", &panel->supply); in rk628_panel_info_get()
168 if (ret && ret != -ENOENT) { in rk628_panel_info_get()
173 ret = gpio_request_by_name(dev, "panel-enable-gpios", 0, in rk628_panel_info_get()
174 &panel->enable_gpio, GPIOD_IS_OUT); in rk628_panel_info_get()
175 if (ret && ret != -ENOENT) { in rk628_panel_info_get()
180 ret = gpio_request_by_name(dev, "panel-reset-gpios", 0, in rk628_panel_info_get()
181 &panel->reset_gpio, GPIOD_IS_OUT); in rk628_panel_info_get()
182 if (ret && ret != -ENOENT) { in rk628_panel_info_get()
188 "panel-backlight", &panel->backlight); in rk628_panel_info_get()
189 if (ret && ret != -ENOENT) { in rk628_panel_info_get()
194 panel->delay.prepare = dev_read_u32_default(dev, "panel-prepare-delay-ms", 0); in rk628_panel_info_get()
195 panel->delay.enable = dev_read_u32_default(dev, "panel-enable-delay-ms", 0); in rk628_panel_info_get()
196 panel->delay.disable = dev_read_u32_default(dev, "panel-disable-delay-ms", 0); in rk628_panel_info_get()
197 panel->delay.unprepare = dev_read_u32_default(dev, "panel-unprepare-delay-ms", 0); in rk628_panel_info_get()
198 panel->delay.reset = dev_read_u32_default(dev, "panel-reset-delay-ms", 0); in rk628_panel_info_get()
199 panel->delay.init = dev_read_u32_default(dev, "panel-init-delay-ms", 0); in rk628_panel_info_get()
201 rk628->panel = panel; in rk628_panel_info_get()
216 struct rk628_panel_simple *p = rk628->panel; in rk628_panel_prepare() local
218 if (!p) in rk628_panel_prepare()
221 if (p->supply) in rk628_panel_prepare()
222 regulator_set_enable(p->supply, 1); in rk628_panel_prepare()
224 if (dm_gpio_is_valid(&p->enable_gpio)) in rk628_panel_prepare()
225 dm_gpio_set_value(&p->enable_gpio, 1); in rk628_panel_prepare()
227 if (p->delay.prepare) in rk628_panel_prepare()
228 mdelay(p->delay.prepare); in rk628_panel_prepare()
230 if (dm_gpio_is_valid(&p->reset_gpio)) in rk628_panel_prepare()
231 dm_gpio_set_value(&p->reset_gpio, 1); in rk628_panel_prepare()
233 if (p->delay.reset) in rk628_panel_prepare()
234 mdelay(p->delay.reset); in rk628_panel_prepare()
236 if (dm_gpio_is_valid(&p->reset_gpio)) in rk628_panel_prepare()
237 dm_gpio_set_value(&p->reset_gpio, 0); in rk628_panel_prepare()
239 if (p->delay.init) in rk628_panel_prepare()
240 mdelay(p->delay.init); in rk628_panel_prepare()
245 struct rk628_panel_simple *p = rk628->panel; in rk628_panel_enable() local
247 if (!p) in rk628_panel_enable()
250 if (p->delay.enable) in rk628_panel_enable()
251 mdelay(p->delay.enable); in rk628_panel_enable()
254 if (p->backlight) in rk628_panel_enable()
255 backlight_enable(p->backlight); in rk628_panel_enable()
260 struct rk628_panel_simple *p = rk628->panel; in rk628_panel_unprepare() local
262 if (!p) in rk628_panel_unprepare()
265 if (dm_gpio_is_valid(&p->reset_gpio)) in rk628_panel_unprepare()
266 dm_gpio_set_value(&p->reset_gpio, 1); in rk628_panel_unprepare()
268 if (dm_gpio_is_valid(&p->enable_gpio)) in rk628_panel_unprepare()
269 dm_gpio_set_value(&p->enable_gpio, 0); in rk628_panel_unprepare()
271 if (rk628->panel->supply) in rk628_panel_unprepare()
272 regulator_set_enable(p->supply, 0); in rk628_panel_unprepare()
274 if (p->delay.unprepare) in rk628_panel_unprepare()
275 mdelay(p->delay.unprepare); in rk628_panel_unprepare()
280 struct rk628_panel_simple *p = rk628->panel; in rk628_panel_disable() local
282 if (!p) in rk628_panel_disable()
285 if (p->backlight) in rk628_panel_disable()
286 backlight_disable(p->backlight); in rk628_panel_disable()
288 if (p->delay.disable) in rk628_panel_disable()
289 mdelay(p->delay.disable); in rk628_panel_disable()