Lines Matching refs:ctx
118 static int ld9040_clear_error(struct ld9040 *ctx) in ld9040_clear_error() argument
120 int ret = ctx->error; in ld9040_clear_error()
122 ctx->error = 0; in ld9040_clear_error()
126 static int ld9040_spi_write_word(struct ld9040 *ctx, u16 data) in ld9040_spi_write_word() argument
128 struct spi_device *spi = to_spi_device(ctx->dev); in ld9040_spi_write_word()
141 static void ld9040_dcs_write(struct ld9040 *ctx, const u8 *data, size_t len) in ld9040_dcs_write() argument
145 if (ctx->error < 0 || len == 0) in ld9040_dcs_write()
148 dev_dbg(ctx->dev, "writing dcs seq: %*ph\n", (int)len, data); in ld9040_dcs_write()
149 ret = ld9040_spi_write_word(ctx, *data); in ld9040_dcs_write()
153 ret = ld9040_spi_write_word(ctx, *data | 0x100); in ld9040_dcs_write()
157 dev_err(ctx->dev, "error %d writing dcs seq: %*ph\n", ret, in ld9040_dcs_write()
159 ctx->error = ret; in ld9040_dcs_write()
165 #define ld9040_dcs_write_seq_static(ctx, seq...) \ argument
168 ld9040_dcs_write(ctx, d, ARRAY_SIZE(d));\
171 static void ld9040_brightness_set(struct ld9040 *ctx) in ld9040_brightness_set() argument
173 ld9040_dcs_write(ctx, ld9040_gammas[ctx->brightness], in ld9040_brightness_set()
174 ARRAY_SIZE(ld9040_gammas[ctx->brightness])); in ld9040_brightness_set()
176 ld9040_dcs_write_seq_static(ctx, MCS_GAMMA_CTRL, 0x02, 0x5a); in ld9040_brightness_set()
179 static void ld9040_init(struct ld9040 *ctx) in ld9040_init() argument
181 ld9040_dcs_write_seq_static(ctx, MCS_USER_SETTING, 0x5a, 0x5a); in ld9040_init()
182 ld9040_dcs_write_seq_static(ctx, MCS_PANEL_CONDITION, in ld9040_init()
186 ld9040_dcs_write_seq_static(ctx, MCS_DISPCTL, in ld9040_init()
188 ld9040_dcs_write_seq_static(ctx, MCS_MANPWR, 0x04); in ld9040_init()
189 ld9040_dcs_write_seq_static(ctx, MCS_POWER_CTRL, in ld9040_init()
191 ld9040_dcs_write_seq_static(ctx, MCS_ELVSS_ON, 0x0d, 0x00, 0x16); in ld9040_init()
192 ld9040_dcs_write_seq_static(ctx, MCS_GTCON, 0x09, 0x00, 0x00); in ld9040_init()
193 ld9040_brightness_set(ctx); in ld9040_init()
194 ld9040_dcs_write_seq_static(ctx, MIPI_DCS_EXIT_SLEEP_MODE); in ld9040_init()
195 ld9040_dcs_write_seq_static(ctx, MIPI_DCS_SET_DISPLAY_ON); in ld9040_init()
198 static int ld9040_power_on(struct ld9040 *ctx) in ld9040_power_on() argument
202 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in ld9040_power_on()
206 msleep(ctx->power_on_delay); in ld9040_power_on()
207 gpiod_set_value(ctx->reset_gpio, 0); in ld9040_power_on()
208 msleep(ctx->reset_delay); in ld9040_power_on()
209 gpiod_set_value(ctx->reset_gpio, 1); in ld9040_power_on()
210 msleep(ctx->reset_delay); in ld9040_power_on()
215 static int ld9040_power_off(struct ld9040 *ctx) in ld9040_power_off() argument
217 return regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in ld9040_power_off()
227 struct ld9040 *ctx = panel_to_ld9040(panel); in ld9040_unprepare() local
230 ld9040_dcs_write_seq_static(ctx, MIPI_DCS_SET_DISPLAY_OFF); in ld9040_unprepare()
231 ld9040_dcs_write_seq_static(ctx, MIPI_DCS_ENTER_SLEEP_MODE); in ld9040_unprepare()
234 ld9040_clear_error(ctx); in ld9040_unprepare()
236 return ld9040_power_off(ctx); in ld9040_unprepare()
241 struct ld9040 *ctx = panel_to_ld9040(panel); in ld9040_prepare() local
244 ret = ld9040_power_on(ctx); in ld9040_prepare()
248 ld9040_init(ctx); in ld9040_prepare()
250 ret = ld9040_clear_error(ctx); in ld9040_prepare()
266 struct ld9040 *ctx = panel_to_ld9040(panel); in ld9040_get_modes() local
275 drm_display_mode_from_videomode(&ctx->vm, mode); in ld9040_get_modes()
276 mode->width_mm = ctx->width_mm; in ld9040_get_modes()
277 mode->height_mm = ctx->height_mm; in ld9040_get_modes()
295 static int ld9040_parse_dt(struct ld9040 *ctx) in ld9040_parse_dt() argument
297 struct device *dev = ctx->dev; in ld9040_parse_dt()
301 ret = of_get_videomode(np, &ctx->vm, 0); in ld9040_parse_dt()
305 of_property_read_u32(np, "power-on-delay", &ctx->power_on_delay); in ld9040_parse_dt()
306 of_property_read_u32(np, "reset-delay", &ctx->reset_delay); in ld9040_parse_dt()
307 of_property_read_u32(np, "panel-width-mm", &ctx->width_mm); in ld9040_parse_dt()
308 of_property_read_u32(np, "panel-height-mm", &ctx->height_mm); in ld9040_parse_dt()
316 struct ld9040 *ctx; in ld9040_probe() local
319 ctx = devm_kzalloc(dev, sizeof(struct ld9040), GFP_KERNEL); in ld9040_probe()
320 if (!ctx) in ld9040_probe()
323 spi_set_drvdata(spi, ctx); in ld9040_probe()
325 ctx->dev = dev; in ld9040_probe()
326 ctx->brightness = ARRAY_SIZE(ld9040_gammas) - 1; in ld9040_probe()
328 ret = ld9040_parse_dt(ctx); in ld9040_probe()
332 ctx->supplies[0].supply = "vdd3"; in ld9040_probe()
333 ctx->supplies[1].supply = "vci"; in ld9040_probe()
334 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), in ld9040_probe()
335 ctx->supplies); in ld9040_probe()
339 ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in ld9040_probe()
340 if (IS_ERR(ctx->reset_gpio)) { in ld9040_probe()
342 PTR_ERR(ctx->reset_gpio)); in ld9040_probe()
343 return PTR_ERR(ctx->reset_gpio); in ld9040_probe()
353 drm_panel_init(&ctx->panel); in ld9040_probe()
354 ctx->panel.dev = dev; in ld9040_probe()
355 ctx->panel.funcs = &ld9040_drm_funcs; in ld9040_probe()
357 return drm_panel_add(&ctx->panel); in ld9040_probe()
362 struct ld9040 *ctx = spi_get_drvdata(spi); in ld9040_remove() local
364 ld9040_power_off(ctx); in ld9040_remove()
365 drm_panel_remove(&ctx->panel); in ld9040_remove()