Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/mipi-dsi: add more multi functions for better error handling

Add more functions that can benefit from being multi style and mark
older variants as deprecated to eventually convert all mipi_dsi functions
to multi style.

Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Tejas Vipin <tejasvipin76@gmail.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Jessica Zhang <quic_jesszhan@quicinc.com>
[dianders: Fixed whitespace warning when applying]
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240806135949.468636-2-tejasvipin76@gmail.com

authored by

Tejas Vipin and committed by
Douglas Anderson
5ddb0a8a be280fdd

+204
+194
drivers/gpu/drm/drm_mipi_dsi.c
··· 603 603 * mipi_dsi_turn_on_peripheral() - sends a Turn On Peripheral command 604 604 * @dsi: DSI peripheral device 605 605 * 606 + * This function is deprecated. Use mipi_dsi_turn_on_peripheral_multi() instead. 607 + * 606 608 * Return: 0 on success or a negative error code on failure. 607 609 */ 608 610 int mipi_dsi_turn_on_peripheral(struct mipi_dsi_device *dsi) ··· 654 652 * @pps_selector: Select PPS from the table of pre-stored or uploaded PPS entries 655 653 * 656 654 * Enable or disable Display Stream Compression on the peripheral. 655 + * This function is deprecated. Use mipi_dsi_compression_mode_ext_multi() instead. 657 656 * 658 657 * Return: 0 on success or a negative error code on failure. 659 658 */ ··· 706 703 * @pps: VESA DSC 1.1 Picture Parameter Set 707 704 * 708 705 * Transmit the VESA DSC 1.1 Picture Parameter Set to the peripheral. 706 + * This function is deprecated. Use mipi_dsi_picture_parameter_set_multi() instead. 709 707 * 710 708 * Return: 0 on success or a negative error code on failure. 711 709 */ ··· 1041 1037 * mipi_dsi_dcs_nop() - send DCS nop packet 1042 1038 * @dsi: DSI peripheral device 1043 1039 * 1040 + * This function is deprecated. Use mipi_dsi_dcs_nop_multi() instead. 1041 + * 1044 1042 * Return: 0 on success or a negative error code on failure. 1045 1043 */ 1046 1044 int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi) ··· 1060 1054 /** 1061 1055 * mipi_dsi_dcs_soft_reset() - perform a software reset of the display module 1062 1056 * @dsi: DSI peripheral device 1057 + * 1058 + * This function is deprecated. Use mipi_dsi_dcs_soft_reset_multi() instead. 1063 1059 * 1064 1060 * Return: 0 on success or a negative error code on failure. 1065 1061 */ ··· 1132 1124 * display module except interface communication 1133 1125 * @dsi: DSI peripheral device 1134 1126 * 1127 + * This function is deprecated. Use mipi_dsi_dcs_enter_sleep_mode_multi() instead. 1128 + * 1135 1129 * Return: 0 on success or a negative error code on failure. 1136 1130 */ 1137 1131 int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi) ··· 1152 1142 * mipi_dsi_dcs_exit_sleep_mode() - enable all blocks inside the display 1153 1143 * module 1154 1144 * @dsi: DSI peripheral device 1145 + * 1146 + * This function is deprecated. Use mipi_dsi_dcs_exit_sleep_mode_multi() instead. 1155 1147 * 1156 1148 * Return: 0 on success or a negative error code on failure. 1157 1149 */ ··· 1174 1162 * display device 1175 1163 * @dsi: DSI peripheral device 1176 1164 * 1165 + * This function is deprecated. Use mipi_dsi_dcs_set_display_off_multi() instead. 1166 + * 1177 1167 * Return: 0 on success or a negative error code on failure. 1178 1168 */ 1179 1169 int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi) ··· 1194 1180 * mipi_dsi_dcs_set_display_on() - start displaying the image data on the 1195 1181 * display device 1196 1182 * @dsi: DSI peripheral device 1183 + * 1184 + * This function is deprecated. Use mipi_dsi_dcs_set_display_on_multi() instead. 1197 1185 * 1198 1186 * Return: 0 on success or a negative error code on failure 1199 1187 */ ··· 1217 1201 * @dsi: DSI peripheral device 1218 1202 * @start: first column of frame memory 1219 1203 * @end: last column of frame memory 1204 + * 1205 + * This function is deprecated. Use mipi_dsi_dcs_set_column_address_multi() 1206 + * instead. 1220 1207 * 1221 1208 * Return: 0 on success or a negative error code on failure. 1222 1209 */ ··· 1244 1225 * @dsi: DSI peripheral device 1245 1226 * @start: first page of frame memory 1246 1227 * @end: last page of frame memory 1228 + * 1229 + * This function is deprecated. Use mipi_dsi_dcs_set_page_address_multi() 1230 + * instead. 1247 1231 * 1248 1232 * Return: 0 on success or a negative error code on failure. 1249 1233 */ ··· 1290 1268 * @dsi: DSI peripheral device 1291 1269 * @mode: the Tearing Effect Output Line mode 1292 1270 * 1271 + * This function is deprecated. Use mipi_dsi_dcs_set_tear_on_multi() instead. 1272 + * 1293 1273 * Return: 0 on success or a negative error code on failure 1294 1274 */ 1295 1275 int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, ··· 1314 1290 * data used by the interface 1315 1291 * @dsi: DSI peripheral device 1316 1292 * @format: pixel format 1293 + * 1294 + * This function is deprecated. Use mipi_dsi_dcs_set_pixel_format_multi() 1295 + * instead. 1317 1296 * 1318 1297 * Return: 0 on success or a negative error code on failure. 1319 1298 */ ··· 1360 1333 * display 1361 1334 * @dsi: DSI peripheral device 1362 1335 * @brightness: brightness value 1336 + * 1337 + * This function is deprecated. Use mipi_dsi_dcs_set_display_brightness_multi() 1338 + * instead. 1363 1339 * 1364 1340 * Return: 0 on success or a negative error code on failure. 1365 1341 */ ··· 1668 1638 } 1669 1639 } 1670 1640 EXPORT_SYMBOL(mipi_dsi_dcs_set_tear_on_multi); 1641 + 1642 + /** 1643 + * mipi_dsi_turn_on_peripheral_multi() - sends a Turn On Peripheral command 1644 + * @ctx: Context for multiple DSI transactions 1645 + * 1646 + * Like mipi_dsi_turn_on_peripheral() but deals with errors in a way that 1647 + * makes it convenient to make several calls in a row. 1648 + */ 1649 + void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx) 1650 + { 1651 + struct mipi_dsi_device *dsi = ctx->dsi; 1652 + struct device *dev = &dsi->dev; 1653 + int ret; 1654 + 1655 + if (ctx->accum_err) 1656 + return; 1657 + 1658 + ret = mipi_dsi_turn_on_peripheral(dsi); 1659 + if (ret < 0) { 1660 + ctx->accum_err = ret; 1661 + dev_err(dev, "Failed to turn on peripheral: %d\n", 1662 + ctx->accum_err); 1663 + } 1664 + } 1665 + EXPORT_SYMBOL(mipi_dsi_turn_on_peripheral_multi); 1666 + 1667 + /** 1668 + * mipi_dsi_dcs_soft_reset_multi() - perform a software reset of the display module 1669 + * @ctx: Context for multiple DSI transactions 1670 + * 1671 + * Like mipi_dsi_dcs_soft_reset() but deals with errors in a way that 1672 + * makes it convenient to make several calls in a row. 1673 + */ 1674 + void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx) 1675 + { 1676 + struct mipi_dsi_device *dsi = ctx->dsi; 1677 + struct device *dev = &dsi->dev; 1678 + int ret; 1679 + 1680 + if (ctx->accum_err) 1681 + return; 1682 + 1683 + ret = mipi_dsi_dcs_soft_reset(dsi); 1684 + if (ret < 0) { 1685 + ctx->accum_err = ret; 1686 + dev_err(dev, "Failed to mipi_dsi_dcs_soft_reset: %d\n", 1687 + ctx->accum_err); 1688 + } 1689 + } 1690 + EXPORT_SYMBOL(mipi_dsi_dcs_soft_reset_multi); 1691 + 1692 + /** 1693 + * mipi_dsi_dcs_set_display_brightness_multi() - sets the brightness value of 1694 + * the display 1695 + * @ctx: Context for multiple DSI transactions 1696 + * @brightness: brightness value 1697 + * 1698 + * Like mipi_dsi_dcs_set_display_brightness() but deals with errors in a way that 1699 + * makes it convenient to make several calls in a row. 1700 + */ 1701 + void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, 1702 + u16 brightness) 1703 + { 1704 + struct mipi_dsi_device *dsi = ctx->dsi; 1705 + struct device *dev = &dsi->dev; 1706 + int ret; 1707 + 1708 + if (ctx->accum_err) 1709 + return; 1710 + 1711 + ret = mipi_dsi_dcs_set_display_brightness(dsi, brightness); 1712 + if (ret < 0) { 1713 + ctx->accum_err = ret; 1714 + dev_err(dev, "Failed to write display brightness: %d\n", 1715 + ctx->accum_err); 1716 + } 1717 + } 1718 + EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness_multi); 1719 + 1720 + /** 1721 + * mipi_dsi_dcs_set_pixel_format_multi() - sets the pixel format for the RGB image 1722 + * data used by the interface 1723 + * @ctx: Context for multiple DSI transactions 1724 + * @format: pixel format 1725 + * 1726 + * Like mipi_dsi_dcs_set_pixel_format() but deals with errors in a way that 1727 + * makes it convenient to make several calls in a row. 1728 + */ 1729 + void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, 1730 + u8 format) 1731 + { 1732 + struct mipi_dsi_device *dsi = ctx->dsi; 1733 + struct device *dev = &dsi->dev; 1734 + int ret; 1735 + 1736 + if (ctx->accum_err) 1737 + return; 1738 + 1739 + ret = mipi_dsi_dcs_set_pixel_format(dsi, format); 1740 + if (ret < 0) { 1741 + ctx->accum_err = ret; 1742 + dev_err(dev, "Failed to set pixel format: %d\n", 1743 + ctx->accum_err); 1744 + } 1745 + } 1746 + EXPORT_SYMBOL(mipi_dsi_dcs_set_pixel_format_multi); 1747 + 1748 + /** 1749 + * mipi_dsi_dcs_set_column_address_multi() - define the column extent of the 1750 + * frame memory accessed by the host processor 1751 + * @ctx: Context for multiple DSI transactions 1752 + * @start: first column of frame memory 1753 + * @end: last column of frame memory 1754 + * 1755 + * Like mipi_dsi_dcs_set_column_address() but deals with errors in a way that 1756 + * makes it convenient to make several calls in a row. 1757 + */ 1758 + void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, 1759 + u16 start, u16 end) 1760 + { 1761 + struct mipi_dsi_device *dsi = ctx->dsi; 1762 + struct device *dev = &dsi->dev; 1763 + int ret; 1764 + 1765 + if (ctx->accum_err) 1766 + return; 1767 + 1768 + ret = mipi_dsi_dcs_set_column_address(dsi, start, end); 1769 + if (ret < 0) { 1770 + ctx->accum_err = ret; 1771 + dev_err(dev, "Failed to set column address: %d\n", 1772 + ctx->accum_err); 1773 + } 1774 + } 1775 + EXPORT_SYMBOL(mipi_dsi_dcs_set_column_address_multi); 1776 + 1777 + /** 1778 + * mipi_dsi_dcs_set_page_address_multi() - define the page extent of the 1779 + * frame memory accessed by the host processor 1780 + * @ctx: Context for multiple DSI transactions 1781 + * @start: first page of frame memory 1782 + * @end: last page of frame memory 1783 + * 1784 + * Like mipi_dsi_dcs_set_page_address() but deals with errors in a way that 1785 + * makes it convenient to make several calls in a row. 1786 + */ 1787 + void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, 1788 + u16 start, u16 end) 1789 + { 1790 + struct mipi_dsi_device *dsi = ctx->dsi; 1791 + struct device *dev = &dsi->dev; 1792 + int ret; 1793 + 1794 + if (ctx->accum_err) 1795 + return; 1796 + 1797 + ret = mipi_dsi_dcs_set_page_address(dsi, start, end); 1798 + if (ret < 0) { 1799 + ctx->accum_err = ret; 1800 + dev_err(dev, "Failed to set page address: %d\n", 1801 + ctx->accum_err); 1802 + } 1803 + } 1804 + EXPORT_SYMBOL(mipi_dsi_dcs_set_page_address_multi); 1671 1805 1672 1806 static int mipi_dsi_drv_probe(struct device *dev) 1673 1807 {
+10
include/drm/drm_mipi_dsi.h
··· 365 365 void mipi_dsi_dcs_set_display_on_multi(struct mipi_dsi_multi_context *ctx); 366 366 void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, 367 367 enum mipi_dsi_dcs_tear_mode mode); 368 + void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx); 369 + void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx); 370 + void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, 371 + u16 brightness); 372 + void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, 373 + u8 format); 374 + void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, 375 + u16 start, u16 end); 376 + void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, 377 + u16 start, u16 end); 368 378 369 379 /** 370 380 * mipi_dsi_generic_write_seq - transmit data using a generic write packet