From: Hans Verkuil <hverkuil@xs4all.nl>
To: Kamil Debski <k.debski@samsung.com>,
dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org
Cc: m.szyprowski@samsung.com, mchehab@osg.samsung.com,
kyungmin.park@samsung.com, thomas@tommie-lie.de, sean@mess.org,
dmitry.torokhov@gmail.com, linux-input@vger.kernel.org,
linux-samsung-soc@vger.kernel.org,
Hans Verkuil <hansverk@cisco.com>
Subject: Re: [PATCH v4 06/10] cec: add HDMI CEC framework
Date: Mon, 27 Apr 2015 11:13:53 +0200 [thread overview]
Message-ID: <553DFDD1.9050803@xs4all.nl> (raw)
In-Reply-To: <1429794192-20541-7-git-send-email-k.debski@samsung.com>
Hi Kamil,
I've added some missing HDMI 2.0 commands:
On 04/23/2015 03:03 PM, Kamil Debski wrote:
> From: Hans Verkuil <hansverk@cisco.com>
>
> The added HDMI CEC framework provides a generic kernel interface for
> HDMI CEC devices.
>
> Signed-off-by: Hans Verkuil <hansverk@cisco.com>
> [k.debski@samsung.com: Merged CEC Updates commit by Hans Verkuil]
> [k.debski@samsung.com: Merged Update author commit by Hans Verkuil]
> [k.debski@samsung.com: change kthread handling when setting logical
> address]
> [k.debski@samsung.com: code cleanup and fixes]
> [k.debski@samsung.com: add missing CEC commands to match spec]
> [k.debski@samsung.com: add RC framework support]
> [k.debski@samsung.com: move and edit documentation]
> [k.debski@samsung.com: add vendor id reporting]
> [k.debski@samsung.com: add possibility to clear assigned logical
> addresses]
> [k.debski@samsung.com: documentation fixes, clenaup and expansion]
> [k.debski@samsung.com: reorder of API structs and add reserved fields]
> [k.debski@samsung.com: fix handling of events and fix 32/64bit timespec
> problem]
> [k.debski@samsung.com: add cec.h to include/uapi/linux/Kbuild]
> Signed-off-by: Kamil Debski <k.debski@samsung.com>
> ---
> Documentation/cec.txt | 396 ++++++++++++++++
> drivers/media/Kconfig | 6 +
> drivers/media/Makefile | 2 +
> drivers/media/cec.c | 1161 +++++++++++++++++++++++++++++++++++++++++++++
> include/media/cec.h | 140 ++++++
> include/uapi/linux/Kbuild | 1 +
> include/uapi/linux/cec.h | 303 ++++++++++++
> 7 files changed, 2009 insertions(+)
> create mode 100644 Documentation/cec.txt
> create mode 100644 drivers/media/cec.c
> create mode 100644 include/media/cec.h
> create mode 100644 include/uapi/linux/cec.h
>
> diff --git a/include/uapi/linux/cec.h b/include/uapi/linux/cec.h
> new file mode 100644
> index 0000000..bb6d66c
> --- /dev/null
> +++ b/include/uapi/linux/cec.h
> @@ -0,0 +1,303 @@
> +#ifndef _CEC_H
> +#define _CEC_H
> +
> +#include <linux/types.h>
> +
> +struct cec_time {
> + __u64 sec;
> + __u64 nsec;
> +};
> +
> +struct cec_msg {
> + struct cec_time ts;
> + __u32 len;
> + __u32 status;
> + __u32 timeout;
> + /* timeout (in ms) is used to timeout CEC_RECEIVE.
> + Set to 0 if you want to wait forever. */
> + __u8 msg[16];
> + __u8 reply;
> + /* If non-zero, then wait for a reply with this opcode.
> + If there was an error when sending the msg or FeatureAbort
> + was returned, then reply is set to 0.
> + If reply is non-zero upon return, then len/msg are set to
> + the received message.
> + If reply is zero upon return and status has the
> + CEC_TX_STATUS_FEATURE_ABORT bit set, then len/msg are set to the
> + received feature abort message.
> + If reply is zero upon return and status has the
> + CEC_TX_STATUS_REPLY_TIMEOUT
> + bit set, then no reply was seen at all.
> + This field is ignored with CEC_RECEIVE.
> + If reply is non-zero for CEC_TRANSMIT and the message is a broadcast,
> + then -EINVAL is returned.
> + if reply is non-zero, then timeout is set to 1000 (the required
> + maximum response time).
> + */
> + __u8 reserved[31];
> +};
> +
> +static inline __u8 cec_msg_initiator(const struct cec_msg *msg)
> +{
> + return msg->msg[0] >> 4;
> +}
> +
> +static inline __u8 cec_msg_destination(const struct cec_msg *msg)
> +{
> + return msg->msg[0] & 0xf;
> +}
> +
> +static inline bool cec_msg_is_broadcast(const struct cec_msg *msg)
> +{
> + return (msg->msg[0] & 0xf) == 0xf;
> +}
> +
> +/* cec status field */
> +#define CEC_TX_STATUS_OK (0)
> +#define CEC_TX_STATUS_ARB_LOST (1 << 0)
> +#define CEC_TX_STATUS_RETRY_TIMEOUT (1 << 1)
> +#define CEC_TX_STATUS_FEATURE_ABORT (1 << 2)
> +#define CEC_TX_STATUS_REPLY_TIMEOUT (1 << 3)
> +#define CEC_RX_STATUS_READY (0)
> +
> +#define CEC_LOG_ADDR_INVALID 0xff
> +
> +/* The maximum number of logical addresses one device can be assigned to.
> + * The CEC 2.0 spec allows for only 2 logical addresses at the moment. The
> + * Analog Devices CEC hardware supports 3. So let's go wild and go for 4. */
> +#define CEC_MAX_LOG_ADDRS 4
> +
> +/* The "Primary Device Type" */
> +#define CEC_PRIM_DEVTYPE_TV 0
> +#define CEC_PRIM_DEVTYPE_RECORD 1
> +#define CEC_PRIM_DEVTYPE_TUNER 3
> +#define CEC_PRIM_DEVTYPE_PLAYBACK 4
> +#define CEC_PRIM_DEVTYPE_AUDIOSYSTEM 5
> +#define CEC_PRIM_DEVTYPE_SWITCH 6
> +#define CEC_PRIM_DEVTYPE_VIDEOPROC 7
> +
> +/* The "All Device Types" flags (CEC 2.0) */
> +#define CEC_FL_ALL_DEVTYPE_TV (1 << 7)
> +#define CEC_FL_ALL_DEVTYPE_RECORD (1 << 6)
> +#define CEC_FL_ALL_DEVTYPE_TUNER (1 << 5)
> +#define CEC_FL_ALL_DEVTYPE_PLAYBACK (1 << 4)
> +#define CEC_FL_ALL_DEVTYPE_AUDIOSYSTEM (1 << 3)
> +#define CEC_FL_ALL_DEVTYPE_SWITCH (1 << 2)
> +/* And if you wondering what happened to VIDEOPROC devices: those should
> + * be mapped to a SWITCH. */
> +
> +/* The logical address types that the CEC device wants to claim */
> +#define CEC_LOG_ADDR_TYPE_TV 0
> +#define CEC_LOG_ADDR_TYPE_RECORD 1
> +#define CEC_LOG_ADDR_TYPE_TUNER 2
> +#define CEC_LOG_ADDR_TYPE_PLAYBACK 3
> +#define CEC_LOG_ADDR_TYPE_AUDIOSYSTEM 4
> +#define CEC_LOG_ADDR_TYPE_SPECIFIC 5
> +#define CEC_LOG_ADDR_TYPE_UNREGISTERED 6
> +/* Switches should use UNREGISTERED.
> + * Video processors should use SPECIFIC. */
> +
> +/* The CEC version */
> +#define CEC_VERSION_1_4B 5
> +#define CEC_VERSION_2_0 6
> +
> +struct cec_event {
> + struct cec_time ts;
> + __u32 event;
> + __u8 reserved[4];
> +};
> +
> +/* The CEC state */
> +#define CEC_STATE_DISABLED 0
> +#define CEC_STATE_ENABLED 1
> +
> +/* Userspace has to configure the adapter state (enable/disable) */
> +#define CEC_CAP_STATE (1 << 0)
> +/* Userspace has to configure the physical address */
> +#define CEC_CAP_PHYS_ADDR (1 << 1)
> +/* Userspace has to configure the logical addresses */
> +#define CEC_CAP_LOG_ADDRS (1 << 2)
> +/* Userspace can transmit messages */
> +#define CEC_CAP_TRANSMIT (1 << 3)
> +/* Userspace can receive messages */
> +#define CEC_CAP_RECEIVE (1 << 4)
> +/* Userspace has to configure the vendor id */
> +#define CEC_CAP_VENDOR_ID (1 << 5)
> +/* The hardware has the possibility to work in the promiscuous mode */
> +#define CEC_CAP_PROMISCUOUS (1 << 6)
> +
> +struct cec_caps {
> + __u32 available_log_addrs;
> + __u32 capabilities;
> + __u32 vendor_id;
> + __u8 version;
> + __u8 reserved[11];
> +};
> +
> +struct cec_log_addrs {
> + __u8 cec_version;
> + __u8 num_log_addrs;
> + __u8 primary_device_type[CEC_MAX_LOG_ADDRS];
> + __u8 log_addr_type[CEC_MAX_LOG_ADDRS];
> + __u8 log_addr[CEC_MAX_LOG_ADDRS];
> +
> + /* CEC 2.0 */
> + __u8 all_device_types;
> + __u8 features[CEC_MAX_LOG_ADDRS][12];
> +
> + __u8 reserved[9];
> +};
> +
> +/* Commands */
> +
> +/* One Touch Play Feature */
> +#define CEC_OP_ACTIVE_SOURCE 0x82
> +#define CEC_OP_IMAGE_VIEW_ON 0x04
> +#define CEC_OP_TEXT_VIEW_ON 0x0d
> +
> +/* Routing Control Feature */
> +#define CEC_OP_ACTIVE_SOURCE 0x82
> +#define CEC_OP_INACTIVE_SOURCE 0x9d
> +#define CEC_OP_REQUEST_ACTIVE_SOURCE 0x85
> +#define CEC_OP_ROUTING_CHANGE 0x80
> +#define CEC_OP_ROUTING_INFORMATION 0x81
> +#define CEC_OP_SET_STREAM_PATH 0x86
> +
> +/* Standby Feature */
> +#define CEC_OP_STANDBY 0x36
> +
> +/* One Touch Record Feature */
> +#define CEC_OP_RECORD_OFF 0x0b
> +#define CEC_OP_RECORD_ON 0x09
> +#define CEC_OP_RECORD_STATUS 0x0a
> +#define CEC_OP_RECORD_TV_SCREEN 0x0f
> +
> +/* Timer Programming Feature */
> +#define CEC_OP_CLEAR_ANALOGUE_TIMER 0x33
> +#define CEC_OP_CLEAR_DIGITAL_TIMER 0x99
> +#define CEC_OP_CLEAR_EXT_TIMER 0xa1
> +#define CEC_OP_SET_ANALOGUE_TIMER 0x34
> +#define CEC_OP_SET_DIGITAL_TIMER 0x97
> +#define CEC_OP_SET_EXT_TIMER 0xa2
> +#define CEC_OP_SET_EXT_PROGRAM_TIMER 0x67
> +#define CEC_OP_TIMER_CLEARED_STATUS 0x43
> +#define CEC_OP_TIMER_STATUS 0x35
> +
> +/* System Information Feature */
> +#define CEC_OP_CEC_VERSION 0x9e
> +#define CEC_OP_GET_CEC_VERSION 0x9f
> +#define CEC_OP_GIVE_PHYSICAL_ADDR 0x83
> +#define CEC_OP_GET_MENU_LANGUAGE 0x91
> +#define CEC_OP_REPORT_PHYSICAL_ADDR 0x84
> +#define CEC_OP_SET_MENU_LANGUAGE 0x32
#define CEC_OP_REPORT_FEATURES 0xa6 /* HDMI 2.0 */
#define CEC_OP_GIVE_FEATURES 0xa5 /* HDMI 2.0 */
> +
> +/* Deck Control Feature */
> +#define CEC_OP_DECK_CONTROL 0x42
> +#define CEC_OP_DECK_STATUS 0x1b
> +#define CEC_OP_GIVE_DECK_STATUS 0x1a
> +#define CEC_OP_PLAY 0x41
> +
> +/* Tuner Control Feature */
> +#define CEC_OP_GIVE_TUNER_DEVICE_STATUS 0x08
> +#define CEC_OP_SELECT_ANALOGUE_SERVICE 0x92
> +#define CEC_OP_SELECT_DIGITAL_SERVICE 0x93
> +#define CEC_OP_TUNER_DEVICE_STATUS 0x07
> +#define CEC_OP_TUNER_STEP_DECREMENT 0x06
> +#define CEC_OP_TUNER_STEP_INCREMENT 0x05
> +
> +/* Vendor Specific Commands Feature */
> +#define CEC_OP_CEC_VERSION 0x9e
> +#define CEC_OP_DEVICE_VENDOR_ID 0x87
> +#define CEC_OP_GET_CEC_VERSION 0x9f
> +#define CEC_OP_GIVE_DEVICE_VENDOR_ID 0x8c
> +#define CEC_OP_VENDOR_COMMAND 0x89
> +#define CEC_OP_VENDOR_COMMAND_WITH_ID 0xa0
> +#define CEC_OP_VENDOR_REMOTE_BUTTON_DOWN 0x8a
> +#define CEC_OP_VENDOR_REMOTE_BUTTON_UP 0x8b
> +
> +/* OSD Display Feature */
> +#define CEC_OP_SET_OSD_STRING 0x64
> +
> +/* Device OSD Transfer Feature */
> +#define CEC_OP_GIVE_OSD_NAME 0x46
> +#define CEC_OP_SET_OSD_NAME 0x47
> +
> +/* Device Menu Control Feature */
> +#define CEC_OP_MENU_REQUEST 0x8d
> +#define CEC_OP_MENU_STATUS 0x8e
> +#define CEC_OP_USER_CONTROL_PRESSED 0x44
> +#define CEC_OP_USER_CONTROL_RELEASED 0x45
> +
> +/* Power Status Feature */
> +#define CEC_OP_GIVE_DEVICE_POWER_STATUS 0x8f
> +#define CEC_OP_REPORT_POWER_STATUS 0x90
> +#define CEC_OP_FEATURE_ABORT 0x00
> +#define CEC_OP_ABORT 0xff
> +
> +/* System Audio Control Feature */
> +#define CEC_OP_GIVE_AUDIO_STATUS 0x71
> +#define CEC_OP_GIVE_SYSTEM_AUDIO_MODE_STATUS 0x7d
> +#define CEC_OP_REPORT_AUDIO_STATUS 0x7a
> +#define CEC_OP_SET_SYSTEM_AUDIO_MODE 0x72
> +#define CEC_OP_SYSTEM_AUDIO_MODE_REQUEST 0x70
> +#define CEC_OP_SYSTEM_AUDIO_MODE_STATUS 0x7e
> +
> +/* Audio Rate Control Feature */
> +#define CEC_OP_SET_AUDIO_RATE 0x9a
> +
/* Audio Return Channel Control Feature */
#define CEC_OP_INITIATE_ARC 0xc0
#define CEC_OP_REPORT_ARC_INITIATED 0xc1
#define CEC_OP_REPORT_ARC_TERMINATED 0xc2
#define CEC_OP_REQUEST_ARC_INITIATION 0xc3
#define CEC_OP_REQUEST_ARC_TERMINATION 0xc4
#define CEC_OP_TERMINATE_ARC 0xc5
/* Dynamic Audio Lipsync Feature, HDMI 2.0 */
#define CEC_OP_REQUEST_CURRENT_LATENCY 0xa7
#define CEC_OP_REPORT_CURRENT_LATENCY 0xa8
/* Capability Discovery and Control Feature */
#define CEC_OP_CDC_MESSAGE 0xf8
Regards,
Hans
next prev parent reply other threads:[~2015-04-27 9:14 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-23 13:03 [PATCH v4 00/10] HDMI CEC framework Kamil Debski
2015-04-23 13:03 ` [PATCH v4 01/10] dts: exynos4*: add HDMI CEC pin definition to pinctrl Kamil Debski
2015-04-23 13:03 ` [PATCH v4 02/10] dts: exynos4: add node for the HDMI CEC device Kamil Debski
2015-04-23 13:03 ` Kamil Debski
2015-04-23 13:03 ` [PATCH v4 03/10] dts: exynos4412-odroid*: enable " Kamil Debski
2015-04-23 13:03 ` [PATCH v4 04/10] HID: add HDMI CEC specific keycodes Kamil Debski
2015-04-23 13:03 ` Kamil Debski
2015-04-23 13:03 ` [PATCH v4 05/10] rc: Add HDMI CEC protoctol handling Kamil Debski
2015-04-23 13:03 ` Kamil Debski
2015-04-23 13:03 ` [PATCH v4 06/10] cec: add HDMI CEC framework Kamil Debski
2015-04-23 14:18 ` Hans Verkuil
2015-04-24 10:03 ` Lars Op den Kamp
2015-04-27 8:09 ` Kamil Debski
2015-04-27 8:09 ` Kamil Debski
2015-04-27 8:19 ` Hans Verkuil
2015-04-27 7:40 ` [PATCH v4 06/10] cec: add HDMI CEC framework: y2038 question Hans Verkuil
2015-05-04 7:42 ` [Y2038] " Hans Verkuil
2015-05-04 10:14 ` Arnd Bergmann
2015-05-06 15:58 ` Hans Verkuil
2015-05-06 16:17 ` Arnd Bergmann
2015-04-27 9:13 ` Hans Verkuil [this message]
2015-04-27 9:22 ` [PATCH v4 06/10] cec: add HDMI CEC framework Hans Verkuil
2015-04-27 9:22 ` Hans Verkuil
2015-04-27 9:30 ` Hans Verkuil
2015-04-27 9:30 ` Hans Verkuil
2015-04-27 11:45 ` Hans Verkuil
2015-04-27 10:04 ` Hans Verkuil
2015-04-27 10:25 ` Hans Verkuil
2015-04-27 10:25 ` Hans Verkuil
2015-04-27 11:27 ` Hans Verkuil
2015-04-27 12:18 ` Kamil Debski
2015-04-27 12:18 ` Kamil Debski
2015-04-23 13:03 ` [PATCH v4 07/10] v4l2-subdev: add HDMI CEC ops Kamil Debski
2015-04-23 13:03 ` [PATCH v4 08/10] cec: adv7604: add cec support Kamil Debski
2015-04-23 13:03 ` Kamil Debski
2015-04-23 13:03 ` [PATCH v4 09/10] cec: adv7511: " Kamil Debski
2015-04-23 13:03 ` Kamil Debski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=553DFDD1.9050803@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=dmitry.torokhov@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hansverk@cisco.com \
--cc=k.debski@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@osg.samsung.com \
--cc=sean@mess.org \
--cc=thomas@tommie-lie.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.