--- /dev/null
+#ifndef __BACKPORT_LINUX_HDMI_H
+#define __BACKPORT_LINUX_HDMI_H
+#include_next <linux/hdmi.h>
+
+#include <linux/version.h>
+
+/* 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 */
#include <linux/export.h>
#include <linux/hid.h>
+#include <linux/bug.h>
/*
* Allocator for buffer that is going to be passed to hid_output_report()
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 <linux/hdmi.h>
+
+/**
+ * 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*/