Lines Matching +full:ips +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0
3 * Asia Better Technology Ltd. Y030XX067A IPS LCD panel driver
12 #include <linux/media-bus-format.h>
128 struct regulator *supply; member
165 struct device *dev = &priv->spi->dev; in y030xx067a_prepare()
168 err = regulator_enable(priv->supply); in y030xx067a_prepare()
170 dev_err(dev, "Failed to enable power supply: %d\n", err); in y030xx067a_prepare()
175 gpiod_set_value_cansleep(priv->reset_gpio, 1); in y030xx067a_prepare()
177 gpiod_set_value_cansleep(priv->reset_gpio, 0); in y030xx067a_prepare()
180 err = regmap_multi_reg_write(priv->map, y030xx067a_init_sequence, in y030xx067a_prepare()
190 regulator_disable(priv->supply); in y030xx067a_prepare()
198 gpiod_set_value_cansleep(priv->reset_gpio, 1); in y030xx067a_unprepare()
199 regulator_disable(priv->supply); in y030xx067a_unprepare()
208 regmap_set_bits(priv->map, 0x06, REG06_XPSAVE); in y030xx067a_enable()
210 if (panel->backlight) { in y030xx067a_enable()
222 regmap_clear_bits(priv->map, 0x06, REG06_XPSAVE); in y030xx067a_disable()
231 const struct y030xx067a_info *panel_info = priv->panel_info; in y030xx067a_get_modes()
235 for (i = 0; i < panel_info->num_modes; i++) { in y030xx067a_get_modes()
236 mode = drm_mode_duplicate(connector->dev, in y030xx067a_get_modes()
237 &panel_info->display_modes[i]); in y030xx067a_get_modes()
239 return -ENOMEM; in y030xx067a_get_modes()
243 mode->type = DRM_MODE_TYPE_DRIVER; in y030xx067a_get_modes()
244 if (panel_info->num_modes == 1) in y030xx067a_get_modes()
245 mode->type |= DRM_MODE_TYPE_PREFERRED; in y030xx067a_get_modes()
250 connector->display_info.bpc = 8; in y030xx067a_get_modes()
251 connector->display_info.width_mm = panel_info->width_mm; in y030xx067a_get_modes()
252 connector->display_info.height_mm = panel_info->height_mm; in y030xx067a_get_modes()
254 drm_display_info_set_bus_formats(&connector->display_info, in y030xx067a_get_modes()
255 &panel_info->bus_format, 1); in y030xx067a_get_modes()
256 connector->display_info.bus_flags = panel_info->bus_flags; in y030xx067a_get_modes()
258 return panel_info->num_modes; in y030xx067a_get_modes()
278 struct device *dev = &spi->dev; in y030xx067a_probe()
284 return -ENOMEM; in y030xx067a_probe()
286 priv->spi = spi; in y030xx067a_probe()
289 priv->map = devm_regmap_init_spi(spi, &y030xx067a_regmap_config); in y030xx067a_probe()
290 if (IS_ERR(priv->map)) { in y030xx067a_probe()
292 return PTR_ERR(priv->map); in y030xx067a_probe()
295 priv->panel_info = of_device_get_match_data(dev); in y030xx067a_probe()
296 if (!priv->panel_info) in y030xx067a_probe()
297 return -EINVAL; in y030xx067a_probe()
299 priv->supply = devm_regulator_get(dev, "power"); in y030xx067a_probe()
300 if (IS_ERR(priv->supply)) in y030xx067a_probe()
301 return dev_err_probe(dev, PTR_ERR(priv->supply), in y030xx067a_probe()
302 "Failed to get power supply\n"); in y030xx067a_probe()
304 priv->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in y030xx067a_probe()
305 if (IS_ERR(priv->reset_gpio)) in y030xx067a_probe()
306 return dev_err_probe(dev, PTR_ERR(priv->reset_gpio), in y030xx067a_probe()
309 drm_panel_init(&priv->panel, dev, &y030xx067a_funcs, in y030xx067a_probe()
312 err = drm_panel_of_backlight(&priv->panel); in y030xx067a_probe()
316 drm_panel_add(&priv->panel); in y030xx067a_probe()
325 drm_panel_remove(&priv->panel); in y030xx067a_remove()
326 drm_panel_disable(&priv->panel); in y030xx067a_remove()
327 drm_panel_unprepare(&priv->panel); in y030xx067a_remove()
374 .name = "abt-y030xx067a",
384 MODULE_DESCRIPTION("Asia Better Technology Ltd. Y030XX067A IPS LCD panel driver");