Lines Matching +full:width +full:- +full:mm

1 // SPDX-License-Identifier: GPL-2.0+
31 unsigned int width; member
53 if (lvds->backlight) { in panel_lvds_disable()
54 lvds->backlight->props.power = FB_BLANK_POWERDOWN; in panel_lvds_disable()
55 lvds->backlight->props.state |= BL_CORE_FBBLANK; in panel_lvds_disable()
56 backlight_update_status(lvds->backlight); in panel_lvds_disable()
66 if (lvds->enable_gpio) in panel_lvds_unprepare()
67 gpiod_set_value_cansleep(lvds->enable_gpio, 0); in panel_lvds_unprepare()
69 if (lvds->supply) in panel_lvds_unprepare()
70 regulator_disable(lvds->supply); in panel_lvds_unprepare()
79 if (lvds->supply) { in panel_lvds_prepare()
82 err = regulator_enable(lvds->supply); in panel_lvds_prepare()
84 dev_err(lvds->dev, "failed to enable supply: %d\n", in panel_lvds_prepare()
90 if (lvds->enable_gpio) in panel_lvds_prepare()
91 gpiod_set_value_cansleep(lvds->enable_gpio, 1); in panel_lvds_prepare()
100 if (lvds->backlight) { in panel_lvds_enable()
101 lvds->backlight->props.state &= ~BL_CORE_FBBLANK; in panel_lvds_enable()
102 lvds->backlight->props.power = FB_BLANK_UNBLANK; in panel_lvds_enable()
103 backlight_update_status(lvds->backlight); in panel_lvds_enable()
112 struct drm_connector *connector = lvds->panel.connector; in panel_lvds_get_modes()
115 mode = drm_mode_create(lvds->panel.drm); in panel_lvds_get_modes()
119 drm_display_mode_from_videomode(&lvds->video_mode, mode); in panel_lvds_get_modes()
120 mode->type |= DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in panel_lvds_get_modes()
123 connector->display_info.width_mm = lvds->width; in panel_lvds_get_modes()
124 connector->display_info.height_mm = lvds->height; in panel_lvds_get_modes()
125 drm_display_info_set_bus_formats(&connector->display_info, in panel_lvds_get_modes()
126 &lvds->bus_format, 1); in panel_lvds_get_modes()
127 connector->display_info.bus_flags = lvds->data_mirror in panel_lvds_get_modes()
144 struct device_node *np = lvds->dev->of_node; in panel_lvds_parse_dt()
149 ret = of_get_display_timing(np, "panel-timing", &timing); in panel_lvds_parse_dt()
151 dev_err(lvds->dev, "%pOF: problems parsing panel-timing (%d)\n", in panel_lvds_parse_dt()
156 videomode_from_timing(&timing, &lvds->video_mode); in panel_lvds_parse_dt()
158 ret = of_property_read_u32(np, "width-mm", &lvds->width); in panel_lvds_parse_dt()
160 dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n", in panel_lvds_parse_dt()
161 np, "width-mm"); in panel_lvds_parse_dt()
162 return -ENODEV; in panel_lvds_parse_dt()
164 ret = of_property_read_u32(np, "height-mm", &lvds->height); in panel_lvds_parse_dt()
166 dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n", in panel_lvds_parse_dt()
167 np, "height-mm"); in panel_lvds_parse_dt()
168 return -ENODEV; in panel_lvds_parse_dt()
171 of_property_read_string(np, "label", &lvds->label); in panel_lvds_parse_dt()
173 ret = of_property_read_string(np, "data-mapping", &mapping); in panel_lvds_parse_dt()
175 dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n", in panel_lvds_parse_dt()
176 np, "data-mapping"); in panel_lvds_parse_dt()
177 return -ENODEV; in panel_lvds_parse_dt()
180 if (!strcmp(mapping, "jeida-18")) { in panel_lvds_parse_dt()
181 lvds->bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG; in panel_lvds_parse_dt()
182 } else if (!strcmp(mapping, "jeida-24")) { in panel_lvds_parse_dt()
183 lvds->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA; in panel_lvds_parse_dt()
184 } else if (!strcmp(mapping, "vesa-24")) { in panel_lvds_parse_dt()
185 lvds->bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG; in panel_lvds_parse_dt()
187 dev_err(lvds->dev, "%pOF: invalid or missing %s DT property\n", in panel_lvds_parse_dt()
188 np, "data-mapping"); in panel_lvds_parse_dt()
189 return -EINVAL; in panel_lvds_parse_dt()
192 lvds->data_mirror = of_property_read_bool(np, "data-mirror"); in panel_lvds_parse_dt()
203 lvds = devm_kzalloc(&pdev->dev, sizeof(*lvds), GFP_KERNEL); in panel_lvds_probe()
205 return -ENOMEM; in panel_lvds_probe()
207 lvds->dev = &pdev->dev; in panel_lvds_probe()
213 lvds->supply = devm_regulator_get_optional(lvds->dev, "power"); in panel_lvds_probe()
214 if (IS_ERR(lvds->supply)) { in panel_lvds_probe()
215 ret = PTR_ERR(lvds->supply); in panel_lvds_probe()
217 if (ret != -ENODEV) { in panel_lvds_probe()
218 if (ret != -EPROBE_DEFER) in panel_lvds_probe()
219 dev_err(lvds->dev, "failed to request regulator: %d\n", in panel_lvds_probe()
224 lvds->supply = NULL; in panel_lvds_probe()
228 lvds->enable_gpio = devm_gpiod_get_optional(lvds->dev, "enable", in panel_lvds_probe()
230 if (IS_ERR(lvds->enable_gpio)) { in panel_lvds_probe()
231 ret = PTR_ERR(lvds->enable_gpio); in panel_lvds_probe()
232 dev_err(lvds->dev, "failed to request %s GPIO: %d\n", in panel_lvds_probe()
237 lvds->reset_gpio = devm_gpiod_get_optional(lvds->dev, "reset", in panel_lvds_probe()
239 if (IS_ERR(lvds->reset_gpio)) { in panel_lvds_probe()
240 ret = PTR_ERR(lvds->reset_gpio); in panel_lvds_probe()
241 dev_err(lvds->dev, "failed to request %s GPIO: %d\n", in panel_lvds_probe()
246 np = of_parse_phandle(lvds->dev->of_node, "backlight", 0); in panel_lvds_probe()
248 lvds->backlight = of_find_backlight_by_node(np); in panel_lvds_probe()
251 if (!lvds->backlight) in panel_lvds_probe()
252 return -EPROBE_DEFER; in panel_lvds_probe()
263 drm_panel_init(&lvds->panel); in panel_lvds_probe()
264 lvds->panel.dev = lvds->dev; in panel_lvds_probe()
265 lvds->panel.funcs = &panel_lvds_funcs; in panel_lvds_probe()
267 ret = drm_panel_add(&lvds->panel); in panel_lvds_probe()
271 dev_set_drvdata(lvds->dev, lvds); in panel_lvds_probe()
275 put_device(&lvds->backlight->dev); in panel_lvds_probe()
281 struct panel_lvds *lvds = dev_get_drvdata(&pdev->dev); in panel_lvds_remove()
283 drm_panel_remove(&lvds->panel); in panel_lvds_remove()
285 panel_lvds_disable(&lvds->panel); in panel_lvds_remove()
287 if (lvds->backlight) in panel_lvds_remove()
288 put_device(&lvds->backlight->dev); in panel_lvds_remove()
294 { .compatible = "panel-lvds", },
304 .name = "panel-lvds",