diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 2c713b277934..6003b2e9b894 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -1176,6 +1176,59 @@ int mipi_dsi_driver_register_full(struct mipi_dsi_driver *drv, } EXPORT_SYMBOL(mipi_dsi_driver_register_full); +int mipi_dsi_dcs_get_elvss_data(struct mipi_dsi_device *dsi) +{ + u8 payload_f0[2] = { 0x5A, 0x5A }; + u8 payload_b0 = 0x07; + ssize_t err; + + err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0, sizeof(payload_f0)); + err = mipi_dsi_dcs_write(dsi, 0xB0, &payload_b0, sizeof(payload_b0)); + + if (err < 0) + return err; + + return 0; +} +EXPORT_SYMBOL(mipi_dsi_dcs_get_elvss_data); + +int mipi_dsi_dcs_get_elvss_data_1(struct mipi_dsi_device *dsi) +{ + u8 payload_f0_1[2] = { 0xA5, 0xA5 }; + ssize_t err; + err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0_1, sizeof(payload_f0_1)); + + if (err < 0) + return err; + + return 0; +} +EXPORT_SYMBOL(mipi_dsi_dcs_get_elvss_data_1); + +int mipi_dsi_dcs_set_elvss_dim_off(struct mipi_dsi_device *dsi, + u8 val) +{ + u8 payload_f0[2] = { 0x5A, 0x5A }; + u8 payload_f0_1[2] = { 0xA5, 0xA5 }; + u8 payload_b7[2] = { 0x01, 0x5B }; + u8 payload_b0 = 0x07; + ssize_t err; + + pr_info("set elvss data:%d\n", val); + + err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0, sizeof(payload_f0)); + err = mipi_dsi_dcs_write(dsi, 0xB7, payload_b7, sizeof(payload_b7)); + err = mipi_dsi_dcs_write(dsi, 0xB0, &payload_b0, sizeof(payload_b0)); + err = mipi_dsi_dcs_write(dsi, 0xB7, &val, sizeof(val)); + err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0_1, sizeof(payload_f0_1)); + + if (err < 0) + return err; + + return 0; +} +EXPORT_SYMBOL(mipi_dsi_dcs_set_elvss_dim_off); + /** * mipi_dsi_driver_unregister() - unregister a driver for DSI devices * @drv: DSI driver structure diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 5cc2671d0b3c..dcdeaed3e2da 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -322,6 +322,10 @@ static inline void mipi_dsi_set_drvdata(struct mipi_dsi_device *dsi, void *data) dev_set_drvdata(&dsi->dev, data); } +int mipi_dsi_dcs_get_elvss_data(struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_get_elvss_data_1(struct mipi_dsi_device *dsi); +int mipi_dsi_dcs_set_elvss_dim_off(struct mipi_dsi_device *dsi, u8 val); + int mipi_dsi_driver_register_full(struct mipi_dsi_driver *driver, struct module *owner); void mipi_dsi_driver_unregister(struct mipi_dsi_driver *driver);