From: Hauke Mehrtens Date: Wed, 4 Sep 2013 19:41:43 +0000 (+0200) Subject: backports: add hdmi_infoframe_pack() X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=9f3da1e2e63772d882b132b1518158534c3f68be;p=openwrt%2Fstaging%2Fblogic.git backports: add hdmi_infoframe_pack() This adds the missing function hdmi_infoframe_pack() for kernels where the HDMI subsystem is not backported, like all kernel >= 3.9. Signed-off-by: Hauke Mehrtens --- diff --git a/backport/backport-include/linux/hdmi.h b/backport/backport-include/linux/hdmi.h new file mode 100644 index 000000000000..c02787ccfbb3 --- /dev/null +++ b/backport/backport-include/linux/hdmi.h @@ -0,0 +1,31 @@ +#ifndef __BACKPORT_LINUX_HDMI_H +#define __BACKPORT_LINUX_HDMI_H +#include_next + +#include + +/* on kernel < 3.9 hdmi gets backported */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0) + +struct hdmi_any_infoframe { + enum hdmi_infoframe_type type; + unsigned char version; + unsigned char length; +}; + +union hdmi_infoframe { + struct hdmi_any_infoframe any; + struct hdmi_avi_infoframe avi; + struct hdmi_spd_infoframe spd; + struct hdmi_vendor_infoframe vendor; + struct hdmi_audio_infoframe audio; +}; + +#define hdmi_infoframe_pack LINUX_BACKPORT(hdmi_infoframe_pack) +ssize_t +hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer, size_t size); +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0)*/ +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) */ + +#endif /* __BACKPORT_LINUX_HDMI_H */ diff --git a/backport/compat/backport-3.12.c b/backport/compat/backport-3.12.c index 8ca9a8e54dd8..44b98f1ac7f7 100644 --- a/backport/compat/backport-3.12.c +++ b/backport/compat/backport-3.12.c @@ -10,6 +10,7 @@ #include #include +#include /* * Allocator for buffer that is going to be passed to hid_output_report() @@ -26,3 +27,54 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags) return kmalloc(len, flags); } EXPORT_SYMBOL_GPL(hid_alloc_report_buf); + +#ifdef CONFIG_HDMI + +/* on older kernel versions we backport hdmi completely. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) + +#include + +/** + * hdmi_infoframe_pack() - write a HDMI infoframe to binary buffer + * @frame: HDMI infoframe + * @buffer: destination buffer + * @size: size of buffer + * + * Packs the information contained in the @frame structure into a binary + * representation that can be written into the corresponding controller + * registers. Also computes the checksum as required by section 5.3.5 of + * the HDMI 1.4 specification. + * + * Returns the number of bytes packed into the binary buffer or a negative + * error code on failure. + */ +ssize_t +hdmi_infoframe_pack(union hdmi_infoframe *frame, void *buffer, size_t size) +{ + ssize_t length; + + switch (frame->any.type) { + case HDMI_INFOFRAME_TYPE_AVI: + length = hdmi_avi_infoframe_pack(&frame->avi, buffer, size); + break; + case HDMI_INFOFRAME_TYPE_SPD: + length = hdmi_spd_infoframe_pack(&frame->spd, buffer, size); + break; + case HDMI_INFOFRAME_TYPE_AUDIO: + length = hdmi_audio_infoframe_pack(&frame->audio, buffer, size); + break; + case HDMI_INFOFRAME_TYPE_VENDOR: + length = hdmi_vendor_infoframe_pack(&frame->vendor, + buffer, size); + break; + default: + WARN(1, "Bad infoframe type %d\n", frame->any.type); + length = -EINVAL; + } + + return length; +} +EXPORT_SYMBOL(hdmi_infoframe_pack); +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0) */ +#endif /* CONFIG_HDMI*/