• Home
  • Raw
  • Download

Lines Matching +full:panel +full:- +full:mounted

1 // SPDX-License-Identifier: GPL-2.0
6 * Derived from drivers/gpu/drm/panel-samsung-ld9040.c
22 #include "panel-samsung-s6e63m0.h"
47 #define MAX_BRIGHTNESS (NUM_GAMMA_LEVELS - 1)
101 struct drm_panel panel; member
136 static inline struct s6e63m0 *panel_to_s6e63m0(struct drm_panel *panel) in panel_to_s6e63m0() argument
138 return container_of(panel, struct s6e63m0, panel); in panel_to_s6e63m0()
143 int ret = ctx->error; in s6e63m0_clear_error()
145 ctx->error = 0; in s6e63m0_clear_error()
151 if (ctx->error < 0) in s6e63m0_dcs_read()
154 ctx->error = ctx->dcs_read(ctx->dev, cmd, data); in s6e63m0_dcs_read()
159 if (ctx->error < 0 || len == 0) in s6e63m0_dcs_write()
162 ctx->error = ctx->dcs_write(ctx->dev, data, len); in s6e63m0_dcs_write()
182 dev_err(ctx->dev, "error checking LCD type (%d)\n", ret); in s6e63m0_check_lcd_type()
183 ctx->lcd_type = 0x00; in s6e63m0_check_lcd_type()
187 dev_info(ctx->dev, "MTP ID: %02x %02x %02x\n", id1, id2, id3); in s6e63m0_check_lcd_type()
189 /* We attempt to detect what panel is mounted on the controller */ in s6e63m0_check_lcd_type()
192 dev_info(ctx->dev, "detected LCD panel AMS397GE MIPI M2\n"); in s6e63m0_check_lcd_type()
196 dev_info(ctx->dev, "detected LCD panel AMS397GE MIPI SM2\n"); in s6e63m0_check_lcd_type()
199 dev_info(ctx->dev, "unknown LCD panel type %02x\n", id2); in s6e63m0_check_lcd_type()
203 ctx->lcd_type = id2; in s6e63m0_check_lcd_type()
285 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in s6e63m0_power_on()
292 gpiod_set_value(ctx->reset_gpio, 1); in s6e63m0_power_on()
294 gpiod_set_value(ctx->reset_gpio, 0); in s6e63m0_power_on()
304 gpiod_set_value(ctx->reset_gpio, 1); in s6e63m0_power_off()
307 ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in s6e63m0_power_off()
314 static int s6e63m0_disable(struct drm_panel *panel) in s6e63m0_disable() argument
316 struct s6e63m0 *ctx = panel_to_s6e63m0(panel); in s6e63m0_disable()
318 if (!ctx->enabled) in s6e63m0_disable()
321 backlight_disable(ctx->bl_dev); in s6e63m0_disable()
328 ctx->enabled = false; in s6e63m0_disable()
333 static int s6e63m0_unprepare(struct drm_panel *panel) in s6e63m0_unprepare() argument
335 struct s6e63m0 *ctx = panel_to_s6e63m0(panel); in s6e63m0_unprepare()
338 if (!ctx->prepared) in s6e63m0_unprepare()
347 ctx->prepared = false; in s6e63m0_unprepare()
352 static int s6e63m0_prepare(struct drm_panel *panel) in s6e63m0_prepare() argument
354 struct s6e63m0 *ctx = panel_to_s6e63m0(panel); in s6e63m0_prepare()
357 if (ctx->prepared) in s6e63m0_prepare()
378 s6e63m0_unprepare(panel); in s6e63m0_prepare()
380 ctx->prepared = true; in s6e63m0_prepare()
385 static int s6e63m0_enable(struct drm_panel *panel) in s6e63m0_enable() argument
387 struct s6e63m0 *ctx = panel_to_s6e63m0(panel); in s6e63m0_enable()
389 if (ctx->enabled) in s6e63m0_enable()
402 backlight_enable(ctx->bl_dev); in s6e63m0_enable()
404 ctx->enabled = true; in s6e63m0_enable()
409 static int s6e63m0_get_modes(struct drm_panel *panel, in s6e63m0_get_modes() argument
414 mode = drm_mode_duplicate(connector->dev, &default_mode); in s6e63m0_get_modes()
416 dev_err(panel->dev, "failed to add mode %ux%u@%u\n", in s6e63m0_get_modes()
419 return -ENOMEM; in s6e63m0_get_modes()
424 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in s6e63m0_get_modes()
442 int brightness = bd->props.brightness; in s6e63m0_set_brightness()
465 struct device *dev = ctx->dev; in s6e63m0_backlight_register()
468 ctx->bl_dev = devm_backlight_device_register(dev, "panel", dev, ctx, in s6e63m0_backlight_register()
471 if (IS_ERR(ctx->bl_dev)) { in s6e63m0_backlight_register()
472 ret = PTR_ERR(ctx->bl_dev); in s6e63m0_backlight_register()
489 return -ENOMEM; in s6e63m0_probe()
491 ctx->dcs_read = dcs_read; in s6e63m0_probe()
492 ctx->dcs_write = dcs_write; in s6e63m0_probe()
495 ctx->dev = dev; in s6e63m0_probe()
496 ctx->enabled = false; in s6e63m0_probe()
497 ctx->prepared = false; in s6e63m0_probe()
499 ctx->supplies[0].supply = "vdd3"; in s6e63m0_probe()
500 ctx->supplies[1].supply = "vci"; in s6e63m0_probe()
501 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), in s6e63m0_probe()
502 ctx->supplies); in s6e63m0_probe()
508 ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in s6e63m0_probe()
509 if (IS_ERR(ctx->reset_gpio)) { in s6e63m0_probe()
510 dev_err(dev, "cannot get reset-gpios %ld\n", PTR_ERR(ctx->reset_gpio)); in s6e63m0_probe()
511 return PTR_ERR(ctx->reset_gpio); in s6e63m0_probe()
514 drm_panel_init(&ctx->panel, dev, &s6e63m0_drm_funcs, in s6e63m0_probe()
522 drm_panel_add(&ctx->panel); in s6e63m0_probe()
532 drm_panel_remove(&ctx->panel); in s6e63m0_remove()