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