162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Copyright (C) 2014 The Android Open Source Project
362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim *
462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Licensed under the Apache License, Version 2.0 (the "License");
562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * you may not use this file except in compliance with the License.
662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * You may obtain a copy of the License at
762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim *
862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim *      http://www.apache.org/licenses/LICENSE-2.0
962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim *
1062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Unless required by applicable law or agreed to in writing, software
1162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * distributed under the License is distributed on an "AS IS" BASIS,
1262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * See the License for the specific language governing permissions and
1462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * limitations under the License.
1562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
1662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
1762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#ifndef ANDROID_INCLUDE_HARDWARE_HDMI_CEC_H
1862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define ANDROID_INCLUDE_HARDWARE_HDMI_CEC_H
1962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
2062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#include <stdint.h>
2162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#include <sys/cdefs.h>
2262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
2362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#include <hardware/hardware.h>
2462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
2562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim__BEGIN_DECLS
2662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
2762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0)
2862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_MODULE_API_VERSION_CURRENT HDMI_MODULE_API_VERSION_1_0
2962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
3062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION(1, 0)
3162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_DEVICE_API_VERSION_CURRENT HDMI_DEVICE_API_VERSION_1_0
3262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
3362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_HARDWARE_MODULE_ID "hdmi_cec"
3462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define HDMI_CEC_HARDWARE_INTERFACE "hdmi_cec_hw_if"
3562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
3662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef enum cec_device_type {
37efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    CEC_DEVICE_INACTIVE = -1,
3862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_TV = 0,
3962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_RECORDER = 1,
4062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_RESERVED = 2,
4162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_TUNER = 3,
4262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_PLAYBACK = 4,
4362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_AUDIO_SYSTEM = 5,
4462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_DEVICE_MAX = CEC_DEVICE_AUDIO_SYSTEM
4562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} cec_device_type_t;
4662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
4762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef enum cec_logical_address {
4862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_TV = 0,
4962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_RECORDER_1 = 1,
5062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_RECORDER_2 = 2,
5162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_TUNER_1 = 3,
5262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_PLAYBACK_1 = 4,
5362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_AUDIO_SYSTEM = 5,
5462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_TUNER_2 = 6,
5562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_TUNER_3 = 7,
5662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_PLAYBACK_2 = 8,
5762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_RECORDER_3 = 9,
5862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_TUNER_4 = 10,
5962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_PLAYBACK_3 = 11,
6062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_RESERVED_1 = 12,
6162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_RESERVED_2 = 13,
6262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_FREE_USE = 14,
6362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_UNREGISTERED = 15,
6462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_ADDR_BROADCAST = 15
6562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} cec_logical_address_t;
6662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
6762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
6862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * HDMI CEC messages
6962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
7062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimenum cec_message_type {
7162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_FEATURE_ABORT = 0x00,
7262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_IMAGE_VIEW_ON = 0x04,
7362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TUNER_STEP_INCREMENT = 0x05,
7462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TUNER_STEP_DECREMENT = 0x06,
7562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TUNER_DEVICE_STATUS = 0x07,
7662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_TUNER_DEVICE_STATUS = 0x08,
7762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_RECORD_ON = 0x09,
7862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_RECORD_STATUS = 0x0A,
7962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_RECORD_OFF = 0x0B,
8062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TEXT_VIEW_ON = 0x0D,
8162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_RECORD_TV_SCREEN = 0x0F,
8262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_DECK_STATUS = 0x1A,
8362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_DECK_STATUS = 0x1B,
8462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_MENU_LANGUAGE = 0x32,
8562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_CLEAR_ANALOG_TIMER = 0x33,
8662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_ANALOG_TIMER = 0x34,
8762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TIMER_STATUS = 0x35,
8862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_STANDBY = 0x36,
8962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_PLAY = 0x41,
9062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_DECK_CONTROL = 0x42,
9162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_TIMER_CLEARED_STATUS = 0x043,
9262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_USER_CONTROL_PRESSED = 0x44,
9362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_USER_CONTROL_RELEASED = 0x45,
945bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_GIVE_OSD_NAME = 0x46,
9562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_OSD_NAME = 0x47,
9662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_OSD_STRING = 0x64,
9762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_TIMER_PROGRAM_TITLE = 0x67,
9862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SYSTEM_AUDIO_MODE_REQUEST = 0x70,
9962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_AUDIO_STATUS = 0x71,
10062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_SYSTEM_AUDIO_MODE = 0x72,
10162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_REPORT_AUDIO_STATUS = 0x7A,
10262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D,
10362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SYSTEM_AUDIO_MODE_STATUS = 0x7E,
10462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_ROUTING_CHANGE = 0x80,
10562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_ROUTING_INFORMATION = 0x81,
10662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_ACTIVE_SOURCE = 0x82,
10762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_PHYSICAL_ADDRESS = 0x83,
10862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_REPORT_PHYSICAL_ADDRESS = 0x84,
10962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_REQUEST_ACTIVE_SOURCE = 0x85,
11062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_STREAM_PATH = 0x86,
11162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_DEVICE_VENDOR_ID = 0x87,
11262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_VENDOR_COMMAND = 0x89,
11362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_VENDOR_REMOTE_BUTTON_DOWN = 0x8A,
11462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_VENDOR_REMOTE_BUTTON_UP = 0x8B,
11562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_DEVICE_VENDOR_ID = 0x8C,
11662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_MENU_REQUEST = 0x8D,
11762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_MENU_STATUS = 0x8E,
11862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GIVE_DEVICE_POWER_STATUS = 0x8F,
11962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_REPORT_POWER_STATUS = 0x90,
12062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GET_MENU_LANGUAGE = 0x91,
12162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SELECT_ANALOG_SERVICE = 0x92,
12262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SELECT_DIGITAL_SERVICE = 0x93,
12362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_DIGITAL_TIMER = 0x97,
12462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_CLEAR_DIGITAL_TIMER = 0x99,
12562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_SET_AUDIO_RATE = 0x9A,
12662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_INACTIVE_SOURCE = 0x9D,
12762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_CEC_VERSION = 0x9E,
12862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_GET_CEC_VERSION = 0x9F,
12962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_VENDOR_COMMAND_WITH_ID = 0xA0,
13062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    CEC_MESSAGE_CLEAR_EXTERNAL_TIMER = 0xA1,
131efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    CEC_MESSAGE_SET_EXTERNAL_TIMER = 0xA2,
1325bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_INITIATE_ARC = 0xC0,
1335bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_REPORT_ARC_INITIATED = 0xC1,
1345bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_REPORT_ARC_TERMINATED = 0xC2,
1355bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_REQUEST_ARC_INITIATION = 0xC3,
1365bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_REQUEST_ARC_TERMINATION = 0xC4,
1375bf671610a6888bc1f6c31f7ea9e4c92c99fbd89Jungshik Jang    CEC_MESSAGE_TERMINATE_ARC = 0xC5,
138efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    CEC_MESSAGE_ABORT = 0xFF
139efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim};
140efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim
141efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim/*
142efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim * Operand description [Abort Reason]
143efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim */
144efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kimenum abort_reason {
145efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_UNRECOGNIZED_MODE = 0,
146efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_NOT_IN_CORRECT_MODE = 1,
147efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_CANNOT_PROVIDE_SOURCE = 2,
148efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_INVALID_OPERAND = 3,
149efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_REFUSED = 4,
150efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    ABORT_UNABLE_TO_DETERMINE = 5
15162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim};
15262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
15362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
15462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * HDMI event type. used for hdmi_event_t.
15562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
15662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimenum {
15762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    HDMI_EVENT_CEC_MESSAGE = 1,
158c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_EVENT_HOT_PLUG = 2,
15962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim};
16062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
16162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
16262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * HDMI hotplug event type. Used when the event
16362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * type is HDMI_EVENT_HOT_PLUG.
16462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
16562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimenum {
16662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    HDMI_NOT_CONNECTED = 0,
16762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    HDMI_CONNECTED = 1
16862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim};
16962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
17062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
171c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim * error code used for send_message.
172c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim */
173c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kimenum {
174c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_RESULT_SUCCESS = 0,
175c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_RESULT_NACK = 1,        /* not acknowledged */
176ada8314004f43423732d6c0b38051f57b355612bJinsuk Kim    HDMI_RESULT_BUSY = 2,        /* bus is busy */
177ada8314004f43423732d6c0b38051f57b355612bJinsuk Kim    HDMI_RESULT_FAIL = 3,
178c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim};
179c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
180c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim/*
181c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim * HDMI port type.
182c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim */
183c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kimtypedef enum hdmi_port_type {
184c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_INPUT = 0,
185c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_OUTPUT = 1
186c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim} hdmi_port_type_t;
187c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
188c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim/*
189c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim * Flags used for set_option()
190c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim */
191c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kimenum {
192c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* When set to false, HAL does not wake up the system upon receiving
193c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * <Image View On> or <Text View On>. Used when user changes the TV
194c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * settings to disable the auto TV on functionality.
195c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * True by default.
196c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
197c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_OPTION_WAKEUP = 1,
198c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
199c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* When set to false, all the CEC commands are discarded. Used when
200c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * user changes the TV settings to disable CEC functionality.
201c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * True by default.
202c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
203c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_OPTION_ENABLE_CEC = 2,
204c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
205c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* Setting this flag to false means Android system will stop handling
206c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * CEC service and yield the control over to the microprocessor that is
207c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * powered on through the standby mode. When set to true, the system
208c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * will gain the control over, hence telling the microprocessor to stop
209c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * handling the cec commands. This is called when system goes
210c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * in and out of standby mode to notify the microprocessor that it should
211c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * start/stop handling CEC commands on behalf of the system.
212c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * False by default.
213c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
214c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    HDMI_OPTION_SYSTEM_CEC_CONTROL = 3,
2158b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim
2168b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim    /* Option 4 not used */
2178b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim
2188b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim    /* Passes the updated language information of Android system.
2198b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim     * Contains 3-byte ASCII code as defined in ISO/FDIS 639-2. Can be
2208b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim     * used for HAL to respond to <Get Menu Language> while in standby mode.
2218b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim     * English(eng), for example, is converted to 0x656e67.
2228b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim     */
2238b7eca867492d8a08285059492ce5697b68b5821Jinsuk Kim    HDMI_OPTION_SET_LANG = 5,
224c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim};
225c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
226c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim/*
22762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Maximum length in bytes of cec message body (exclude header block),
22862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * should not exceed 16 (spec CEC 6 Frame Description)
22962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
23062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#define CEC_MESSAGE_BODY_MAX_LENGTH 16
23162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
23262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef struct cec_message {
233c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* logical address of sender */
23462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    cec_logical_address_t initiator;
23562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
236c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* logical address of receiver */
23762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    cec_logical_address_t destination;
23862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
239c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /* Length in bytes of body, range [0, CEC_MESSAGE_BODY_MAX_LENGTH] */
24062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    size_t length;
24162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    unsigned char body[CEC_MESSAGE_BODY_MAX_LENGTH];
24262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} cec_message_t;
24362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
24462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef struct hotplug_event {
24562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
24662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * true if the cable is connected; otherwise false.
24762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
24862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    int connected;
249ca6fa797034cad0fe827724bf1adb7d8979108bcJinsuk Kim    int port_id;
25062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} hotplug_event_t;
25162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
252c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kimtypedef struct tx_status_event {
253c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    int status;
254c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    int opcode;  /* CEC opcode */
255c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim} tx_status_event_t;
256c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
25762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
25862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * HDMI event generated from HAL.
25962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
26062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef struct hdmi_event {
26162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    int type;
26262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    struct hdmi_cec_device* dev;
26362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    union {
26462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim        cec_message_t cec;
26562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim        hotplug_event_t hotplug;
26662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    };
26762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} hdmi_event_t;
26862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
26962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
270c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim * HDMI port descriptor
271c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim */
272c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kimtypedef struct hdmi_port_info {
273c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    hdmi_port_type_t type;
274ca6fa797034cad0fe827724bf1adb7d8979108bcJinsuk Kim    // Port ID should start from 1 which corresponds to HDMI "port 1".
275ca6fa797034cad0fe827724bf1adb7d8979108bcJinsuk Kim    int port_id;
276c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    int cec_supported;
277c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    int arc_supported;
278c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    uint16_t physical_address;
279c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim} hdmi_port_info_t;
280c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
281c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim/*
28262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Callback function type that will be called by HAL implementation.
28362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * Services can not close/open the device in the callback.
28462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
28570ae777c9abd054cd47f1dcad2c79ba0ce900a39Jinsuk Kimtypedef void (*event_callback_t)(const hdmi_event_t* event, void* arg);
28662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
28762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef struct hdmi_cec_module {
28884d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles    /**
28984d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * Common methods of the HDMI CEC module.  This *must* be the first member of
29084d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * hdmi_cec_module as users of this structure will cast a hw_module_t to hdmi_cec_module
29184d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * pointer in contexts where it's known the hw_module_t references a hdmi_cec_module.
29284d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     */
29362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    struct hw_module_t common;
29462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} hdmi_module_t;
29562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
29662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/*
29762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim * HDMI-CEC HAL interface definition.
29862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim */
29962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimtypedef struct hdmi_cec_device {
30084d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles    /**
30184d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * Common methods of the HDMI CEC device.  This *must* be the first member of
30284d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * hdmi_cec_device as users of this structure will cast a hw_device_t to hdmi_cec_device
30384d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     * pointer in contexts where it's known the hw_device_t references a hdmi_cec_device.
30484d35492b145cebc000f8fd72818eb25b8e65c04Stewart Miles     */
30562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    struct hw_device_t common;
30662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
30762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
308c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*add_logical_address)() passes the logical address that will be used
309c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * in this system.
310f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim     *
311f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim     * HAL may use it to configure the hardware so that the CEC commands addressed
312c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * the given logical address can be filtered in. This method can be called
313c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * as many times as necessary in order to support multiple logical devices.
314c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * addr should be in the range of valid logical addresses for the call
315c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * to succeed.
31662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     *
31762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * Returns 0 on success or -errno on error.
31862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
319f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim    int (*add_logical_address)(const struct hdmi_cec_device* dev, cec_logical_address_t addr);
32062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
32162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
322f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim     * (*clear_logical_address)() tells HAL to reset all the logical addresses.
32398add8956b1a346425df40d2f70a9ca33500f01cJinsuk Kim     *
324c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * It is used when the system doesn't need to process CEC command any more,
325c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * hence to tell HAL to stop receiving commands from the CEC bus, and change
326c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * the state back to the beginning.
32798add8956b1a346425df40d2f70a9ca33500f01cJinsuk Kim     */
328f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim    void (*clear_logical_address)(const struct hdmi_cec_device* dev);
329f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim
33098add8956b1a346425df40d2f70a9ca33500f01cJinsuk Kim    /*
33162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * (*get_physical_address)() returns the CEC physical address. The
33262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * address is written to addr.
33362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     *
33462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * The physical address depends on the topology of the network formed
33562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * by connected HDMI devices. It is therefore likely to change if the cable
33662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * is plugged off and on again. It is advised to call get_physical_address
33762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * to get the updated address when hot plug event takes place.
33862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     *
33962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * Returns 0 on success or -errno on error.
34062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
34162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    int (*get_physical_address)(const struct hdmi_cec_device* dev, uint16_t* addr);
34262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
34362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
344c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*send_message)() transmits HDMI-CEC message to other HDMI device.
34562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     *
346c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * The method should be designed to return in a certain amount of time not
347c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * hanging forever, which can happen if CEC signal line is pulled low for
348c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * some reason. HAL implementation should take the situation into account
349c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * so as not to wait forever for the message to get sent out.
350c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     *
351634e9484ebe324cbeb8aa874f5d71143f8354232Jinsuk Kim     * It should try retransmission at least once as specified in the standard.
352c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     *
353c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * Returns error code. See HDMI_RESULT_SUCCESS, HDMI_RESULT_NACK, and
354c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * HDMI_RESULT_BUSY.
35562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
356efbdb25d1b98389c343c326c5ec1b29b4750e24eJinsuk Kim    int (*send_message)(const struct hdmi_cec_device* dev, const cec_message_t*);
35762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
35862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
35962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * (*register_event_callback)() registers a callback that HDMI-CEC HAL
36062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * can later use for incoming CEC messages or internal HDMI events.
36170ae777c9abd054cd47f1dcad2c79ba0ce900a39Jinsuk Kim     * When calling from C++, use the argument arg to pass the calling object.
36270ae777c9abd054cd47f1dcad2c79ba0ce900a39Jinsuk Kim     * It will be passed back when the callback is invoked so that the context
36370ae777c9abd054cd47f1dcad2c79ba0ce900a39Jinsuk Kim     * can be retrieved.
36462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
36562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    void (*register_event_callback)(const struct hdmi_cec_device* dev,
36670ae777c9abd054cd47f1dcad2c79ba0ce900a39Jinsuk Kim            event_callback_t callback, void* arg);
36762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
36862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
369f02ed91f7a1761fce4474cef55393b23de0316d9Jinsuk Kim     * (*get_version)() returns the CEC version supported by underlying hardware.
37062195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
37162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    void (*get_version)(const struct hdmi_cec_device* dev, int* version);
37262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
37362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /*
37462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * (*get_vendor_id)() returns the identifier of the vendor. It is
37562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * the 24-bit unique company ID obtained from the IEEE Registration
37662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     * Authority Committee (RAC).
37762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim     */
37862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    void (*get_vendor_id)(const struct hdmi_cec_device* dev, uint32_t* vendor_id);
37962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
380c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /*
381c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*get_port_info)() returns the hdmi port information of underlying hardware.
382c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * info is the list of HDMI port information, and 'total' is the number of
383c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * HDMI ports in the system.
384c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
385c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    void (*get_port_info)(const struct hdmi_cec_device* dev,
386c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim            struct hdmi_port_info* list[], int* total);
387c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
388c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /*
389c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*set_option)() passes flags controlling the way HDMI-CEC service works down
390c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * to HAL implementation. Those flags will be used in case the feature needs
391c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * update in HAL itself, firmware or microcontroller.
392c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
393c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    void (*set_option)(const struct hdmi_cec_device* dev, int flag, int value);
394c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
395c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /*
396c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*set_audio_return_channel)() configures ARC circuit in the hardware logic
397c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * to start or stop the feature. Flag can be either 1 to start the feature
398c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * or 0 to stop it.
399c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     *
400c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * Returns 0 on success or -errno on error.
401c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
4024b280b0cd07a380feb4653b911ddcb3a31e73797Jinsuk Kim    void (*set_audio_return_channel)(const struct hdmi_cec_device* dev, int port_id, int flag);
403c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
404c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    /*
405c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * (*is_connected)() returns the connection status of the specified port.
406c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * Returns HDMI_CONNECTED if a device is connected, otherwise HDMI_NOT_CONNECTED.
407c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     * The HAL should watch for +5V power signal to determine the status.
408c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim     */
409ca6fa797034cad0fe827724bf1adb7d8979108bcJinsuk Kim    int (*is_connected)(const struct hdmi_cec_device* dev, int port_id);
410c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim
41162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    /* Reserved for future use to maximum 16 functions. Must be NULL. */
412c4178a66a46720ec0b0e1d410034b02888b6fed5Jinsuk Kim    void* reserved[16 - 11];
41362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim} hdmi_cec_device_t;
41462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
41562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim/** convenience API for opening and closing a device */
41662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
41762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimstatic inline int hdmi_cec_open(const struct hw_module_t* module,
41862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim        struct hdmi_cec_device** device) {
41962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    return module->methods->open(module,
420cc8d9f9fcbc170dedba609a15705e838cf09218bColin Cross            HDMI_CEC_HARDWARE_INTERFACE, TO_HW_DEVICE_T_OPEN(device));
42162195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim}
42262195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
42362195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kimstatic inline int hdmi_cec_close(struct hdmi_cec_device* device) {
42462195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim    return device->common.close(&device->common);
42562195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim}
42662195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
42762195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim__END_DECLS
42862195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim
42962195dc9ac87c819496c5819ccf45473e3538e62Jinsuk Kim#endif /* ANDROID_INCLUDE_HARDWARE_HDMI_CEC_H */
430