Add support for the new Latency Indication Protocol feature. This adds the opcodes and the wrapper functions.
Showing the changes to include/uapi (2 of 2 files). Show all
Unified · Split
| @@ -1701,6 +1701,188 @@ static inline void cec_ops_request_current_latency(const struct cec_msg *msg, · 1700 unmodified lines | |||
| 1701 | } | 1701 | } |
| 1702 | 1702 | ||
| 1703 | 1703 | ||
| 1704 | /* Latency Indication Protocol Feature */ | ||
| 1705 | /* Only for CEC 2.0 and up */ | ||
| 1706 | static inline void cec_msg_request_lip_support(struct cec_msg *msg, | ||
| 1707 | int reply, __u16 phys_addr) | ||
| 1708 | { | ||
| 1709 | msg->len = 4; | ||
| 1710 | msg->msg[1] = CEC_MSG_REQUEST_LIP_SUPPORT; | ||
| 1711 | msg->msg[2] = phys_addr >> 8; | ||
| 1712 | msg->msg[3] = phys_addr & 0xff; | ||
| 1713 | msg->reply = reply ? CEC_MSG_REPORT_LIP_SUPPORT : 0; | ||
| 1714 | } | ||
| 1715 | |||
| 1716 | static inline void cec_ops_request_lip_support(const struct cec_msg *msg, | ||
| 1717 | __u16 *phys_addr) | ||
| 1718 | { | ||
| 1719 | *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; | ||
| 1720 | } | ||
| 1721 | |||
| 1722 | static inline void cec_msg_report_lip_support(struct cec_msg *msg, __u32 sqid) | ||
| 1723 | { | ||
| 1724 | msg->len = 6; | ||
| 1725 | msg->msg[1] = CEC_MSG_REPORT_LIP_SUPPORT; | ||
| 1726 | msg->msg[2] = sqid >> 24; | ||
| 1727 | msg->msg[3] = (sqid >> 16) & 0xff; | ||
| 1728 | msg->msg[4] = (sqid >> 8) & 0xff; | ||
| 1729 | msg->msg[5] = sqid & 0xff; | ||
| 1730 | } | ||
| 1731 | |||
| 1732 | static inline void cec_ops_report_lip_support(const struct cec_msg *msg, | ||
| 1733 | __u32 *sqid) | ||
| 1734 | { | ||
| 1735 | *sqid = (msg->msg[2] << 24) | (msg->msg[3] << 16) | | ||
| 1736 | (msg->msg[4] << 8) | msg->msg[5]; | ||
| 1737 | } | ||
| 1738 | |||
| 1739 | static inline void cec_msg_request_audio_and_video_latency(struct cec_msg *msg, | ||
| 1740 | int reply, __u8 video_format, | ||
| 1741 | __u8 hdr_format, __u8 vrr_format, | ||
| 1742 | __u8 audio_format, | ||
| 1743 | __u8 audio_format_extension) | ||
| 1744 | { | ||
| 1745 | msg->len = 6; | ||
| 1746 | msg->msg[1] = CEC_MSG_REQUEST_AUDIO_AND_VIDEO_LATENCY; | ||
| 1747 | msg->msg[2] = video_format; | ||
| 1748 | msg->msg[3] = hdr_format; | ||
| 1749 | msg->msg[4] = vrr_format; | ||
| 1750 | msg->msg[5] = audio_format; | ||
| 1751 | if (audio_format >= 1 && audio_format <= 31) { | ||
| 1752 | msg->msg[6] = audio_format_extension; | ||
| 1753 | msg->len++; | ||
| 1754 | } | ||
| 1755 | msg->reply = reply ? CEC_MSG_REPORT_AUDIO_AND_VIDEO_LATENCY : 0; | ||
| 1756 | } | ||
| 1757 | |||
| 1758 | static inline void cec_ops_request_audio_and_video_latency(const struct cec_msg *msg, | ||
| 1759 | __u8 *video_format, | ||
| 1760 | __u8 *hdr_format, | ||
| 1761 | __u8 *vrr_format, | ||
| 1762 | __u8 *audio_format, | ||
| 1763 | __u8 *audio_format_extension) | ||
| 1764 | { | ||
| 1765 | *video_format = msg->msg[2]; | ||
| 1766 | *hdr_format = msg->msg[3]; | ||
| 1767 | *vrr_format = msg->msg[4]; | ||
| 1768 | *audio_format = msg->msg[5]; | ||
| 1769 | *audio_format_extension = msg->len > 6 ? msg->msg[6] : 0; | ||
| 1770 | } | ||
| 1771 | |||
| 1772 | static inline void cec_msg_report_audio_and_video_latency(struct cec_msg *msg, | ||
| 1773 | __u16 video_latency, | ||
| 1774 | __u16 audio_latency) | ||
| 1775 | { | ||
| 1776 | msg->len = 6; | ||
| 1777 | msg->msg[1] = CEC_MSG_REPORT_AUDIO_AND_VIDEO_LATENCY; | ||
| 1778 | msg->msg[2] = video_latency >> 8; | ||
| 1779 | msg->msg[3] = video_latency & 0xff; | ||
| 1780 | msg->msg[4] = audio_latency >> 8; | ||
| 1781 | msg->msg[5] = audio_latency & 0xff; | ||
| 1782 | } | ||
| 1783 | |||
| 1784 | static inline void cec_ops_report_audio_and_video_latency(const struct cec_msg *msg, | ||
| 1785 | __u16 *video_latency, | ||
| 1786 | __u16 *audio_latency) | ||
| 1787 | { | ||
| 1788 | *video_latency = (msg->msg[2] << 8) | msg->msg[3]; | ||
| 1789 | *audio_latency = (msg->msg[4] << 8) | msg->msg[5]; | ||
| 1790 | } | ||
| 1791 | |||
| 1792 | static inline void cec_msg_request_audio_latency(struct cec_msg *msg, | ||
| 1793 | int reply, | ||
| 1794 | __u8 audio_format, | ||
| 1795 | __u8 audio_format_extension) | ||
| 1796 | { | ||
| 1797 | msg->len = 3; | ||
| 1798 | msg->msg[1] = CEC_MSG_REQUEST_AUDIO_LATENCY; | ||
| 1799 | msg->msg[2] = audio_format; | ||
| 1800 | if (audio_format >= 1 && audio_format <= 31) { | ||
| 1801 | msg->msg[3] = audio_format_extension; | ||
| 1802 | msg->len++; | ||
| 1803 | } | ||
| 1804 | msg->reply = reply ? CEC_MSG_REPORT_AUDIO_LATENCY : 0; | ||
| 1805 | } | ||
| 1806 | |||
| 1807 | static inline void cec_ops_request_audio_latency(const struct cec_msg *msg, | ||
| 1808 | __u8 *audio_format, | ||
| 1809 | __u8 *audio_format_extension) | ||
| 1810 | { | ||
| 1811 | *audio_format = msg->msg[2]; | ||
| 1812 | *audio_format_extension = msg->len > 3 ? msg->msg[3] : 0; | ||
| 1813 | } | ||
| 1814 | |||
| 1815 | static inline void cec_msg_report_audio_latency(struct cec_msg *msg, | ||
| 1816 | __u16 audio_latency) | ||
| 1817 | { | ||
| 1818 | msg->len = 4; | ||
| 1819 | msg->msg[1] = CEC_MSG_REPORT_AUDIO_LATENCY; | ||
| 1820 | msg->msg[2] = audio_latency >> 8; | ||
| 1821 | msg->msg[3] = audio_latency & 0xff; | ||
| 1822 | } | ||
| 1823 | |||
| 1824 | static inline void cec_ops_report_audio_latency(const struct cec_msg *msg, | ||
| 1825 | __u16 *audio_latency) | ||
| 1826 | { | ||
| 1827 | *audio_latency = (msg->msg[2] << 8) | msg->msg[3]; | ||
| 1828 | } | ||
| 1829 | |||
| 1830 | static inline void cec_msg_request_video_latency(struct cec_msg *msg, | ||
| 1831 | int reply, __u8 video_format, | ||
| 1832 | __u8 hdr_format, | ||
| 1833 | __u8 vrr_format) | ||
| 1834 | { | ||
| 1835 | msg->len = 5; | ||
| 1836 | msg->msg[1] = CEC_MSG_REQUEST_VIDEO_LATENCY; | ||
| 1837 | msg->msg[2] = video_format; | ||
| 1838 | msg->msg[3] = hdr_format; | ||
| 1839 | msg->msg[4] = vrr_format; | ||
| 1840 | msg->reply = reply ? CEC_MSG_REPORT_VIDEO_LATENCY : 0; | ||
| 1841 | } | ||
| 1842 | |||
| 1843 | static inline void cec_ops_request_video_latency(const struct cec_msg *msg, | ||
| 1844 | __u8 *video_format, | ||
| 1845 | __u8 *hdr_format, | ||
| 1846 | __u8 *vrr_format) | ||
| 1847 | { | ||
| 1848 | *video_format = msg->msg[2]; | ||
| 1849 | *hdr_format = msg->msg[3]; | ||
| 1850 | *vrr_format = msg->msg[4]; | ||
| 1851 | } | ||
| 1852 | |||
| 1853 | static inline void cec_msg_report_video_latency(struct cec_msg *msg, | ||
| 1854 | __u16 video_latency) | ||
| 1855 | { | ||
| 1856 | msg->len = 4; | ||
| 1857 | msg->msg[1] = CEC_MSG_REPORT_VIDEO_LATENCY; | ||
| 1858 | msg->msg[2] = video_latency >> 8; | ||
| 1859 | msg->msg[3] = video_latency & 0xff; | ||
| 1860 | } | ||
| 1861 | |||
| 1862 | static inline void cec_ops_report_video_latency(const struct cec_msg *msg, | ||
| 1863 | __u16 *video_latency) | ||
| 1864 | { | ||
| 1865 | *video_latency = (msg->msg[2] << 8) | msg->msg[3]; | ||
| 1866 | } | ||
| 1867 | |||
| 1868 | static inline void cec_msg_update_sqid(struct cec_msg *msg, __u32 sqid) | ||
| 1869 | { | ||
| 1870 | msg->len = 6; | ||
| 1871 | msg->msg[1] = CEC_MSG_UPDATE_SQID; | ||
| 1872 | msg->msg[2] = sqid >> 24; | ||
| 1873 | msg->msg[3] = (sqid >> 16) & 0xff; | ||
| 1874 | msg->msg[4] = (sqid >> 8) & 0xff; | ||
| 1875 | msg->msg[5] = sqid & 0xff; | ||
| 1876 | } | ||
| 1877 | |||
| 1878 | static inline void cec_ops_update_sqid(const struct cec_msg *msg, | ||
| 1879 | __u32 *sqid) | ||
| 1880 | { | ||
| 1881 | *sqid = (msg->msg[2] << 24) | (msg->msg[3] << 16) | | ||
| 1882 | (msg->msg[4] << 8) | msg->msg[5]; | ||
| 1883 | } | ||
| 1884 | |||
| 1885 | |||
| 1704 | /* Capability Discovery and Control Feature */ | 1886 | /* Capability Discovery and Control Feature */ |
| 1705 | static inline void cec_msg_cdc_hec_inquire_state(struct cec_msg *msg, | 1887 | static inline void cec_msg_cdc_hec_inquire_state(struct cec_msg *msg, |
| 1706 | __u16 phys_addr1, | 1888 | __u16 phys_addr1, |
| @@ -1104,6 +1104,30 @@ struct cec_event { · 1103 unmodified lines | |||
| 1104 | #define CEC_OP_AUD_OUT_COMPENSATED_PARTIAL_DELAY 3 | 1104 | #define CEC_OP_AUD_OUT_COMPENSATED_PARTIAL_DELAY 3 |
| 1105 | 1105 | ||
| 1106 | 1106 | ||
| 1107 | /* Latency Indication Protocol Feature */ | ||
| 1108 | #define CEC_MSG_REQUEST_LIP_SUPPORT 0x50 | ||
| 1109 | #define CEC_MSG_REPORT_LIP_SUPPORT 0x51 | ||
| 1110 | #define CEC_MSG_REQUEST_AUDIO_AND_VIDEO_LATENCY 0x52 | ||
| 1111 | /* HDR Format Operand (hdr_format) */ | ||
| 1112 | #define CEC_OP_HDR_FORMAT_GAMMA_SDR 0 | ||
| 1113 | #define CEC_OP_HDR_FORMAT_GAMMA_HDR 1 | ||
| 1114 | #define CEC_OP_HDR_FORMAT_PQ 2 | ||
| 1115 | #define CEC_OP_HDR_FORMAT_HLG 3 | ||
| 1116 | #define CEC_OP_HDR_FORMAT_DYNAMIC_HDR_TYPE_1 8 | ||
| 1117 | #define CEC_OP_HDR_FORMAT_DYNAMIC_HDR_TYPE_2 9 | ||
| 1118 | #define CEC_OP_HDR_FORMAT_DYNAMIC_HDR_TYPE_4 11 | ||
| 1119 | #define CEC_OP_HDR_FORMAT_DV_SINK_LED 16 | ||
| 1120 | #define CEC_OP_HDR_FORMAT_DV_SOURCE_LED 17 | ||
| 1121 | #define CEC_OP_HDR_FORMAT_HDR10PLUS 24 | ||
| 1122 | #define CEC_OP_HDR_FORMAT_ETSI_TS_103_433 32 | ||
| 1123 | #define CEC_MSG_REPORT_AUDIO_AND_VIDEO_LATENCY 0x53 | ||
| 1124 | #define CEC_MSG_REQUEST_AUDIO_LATENCY 0x54 | ||
| 1125 | #define CEC_MSG_REPORT_AUDIO_LATENCY 0x55 | ||
| 1126 | #define CEC_MSG_REQUEST_VIDEO_LATENCY 0x56 | ||
| 1127 | #define CEC_MSG_REPORT_VIDEO_LATENCY 0x57 | ||
| 1128 | #define CEC_MSG_UPDATE_SQID 0x58 | ||
| 1129 | |||
| 1130 | |||
| 1107 | /* Capability Discovery and Control Feature */ | 1131 | /* Capability Discovery and Control Feature */ |
| 1108 | #define CEC_MSG_CDC_MESSAGE 0xf8 | 1132 | #define CEC_MSG_CDC_MESSAGE 0xf8 |
| 1109 | /* Ethernet-over-HDMI: nobody ever does this... */ | 1133 | /* Ethernet-over-HDMI: nobody ever does this... */ |