summaryrefslogtreecommitdiff
path: root/include/video/msm_dba.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/video/msm_dba.h')
-rw-r--r--include/video/msm_dba.h604
1 files changed, 604 insertions, 0 deletions
diff --git a/include/video/msm_dba.h b/include/video/msm_dba.h
new file mode 100644
index 000000000000..8ce2138044c3
--- /dev/null
+++ b/include/video/msm_dba.h
@@ -0,0 +1,604 @@
+/*
+ * Copyright (c) 2015,2018, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _MSM_DBA_H
+#define _MSM_DBA_H
+
+#include <linux/types.h>
+#include <linux/bitops.h>
+
+#define MSM_DBA_CHIP_NAME_MAX_LEN 20
+#define MSM_DBA_CLIENT_NAME_LEN 20
+
+#define MSM_DBA_DEFER_PROPERTY_FLAG 0x1
+#define MSM_DBA_ASYNC_FLAG 0x2
+
+/**
+ * enum msm_dba_callback_event - event types for callback notification
+ * @MSM_DBA_CB_REMOTE_INT: Event associated with remote devices on an interface
+ * that supports a bi-directional control channel.
+ * @MSM_DBA_CB_HDCP_LINK_AUTHENTICATED: Authentication session is successful.
+ * The link is authenticated and encryption
+ * can be enabled if not enabled already.
+ * @MSM_DBA_CB_HDCP_LINK_UNAUTHENTICATED: A previously authenticated link has
+ * failed. The content on the interface
+ * is no longer secure.
+ * @MSM_DBA_CB_HPD_CONNECT: Detected a cable connect event.
+ * @MSM_DBA_CB_HPD_DISCONNECT: Detected a cable disconnect event.
+ * @MSM_DBA_CB_VIDEO_FAILURE: Detected a failure with respect to video data on
+ * the interface. This is a generic failure and
+ * client should request a debug dump to debug the
+ * issue. Client can also attempt a reset to recover
+ * the device.
+ * @MSM_DBA_CB_AUDIO_FAILURE: Detected a failure with respect to audio data on
+ * the interface. This is a generic failure and
+ * client should request a debug dump. Client can
+ * also attempt a reset to recover the device.
+ * @MSM_DBA_CB_CEC_WRITE_SUCCESS: The asynchronous CEC write request is
+ * successful.
+ * @MSM_DBA_CB_CEC_WRITE_FAIL: The asynchronous CEC write request failed.
+ * @MSM_DBA_CB_CEC_READ_PENDING: There is a pending CEC read message.
+ * @MSM_DBA_CB_PRE_RESET: This callback is called just before the device is
+ * being reset.
+ * @MSM_DBA_CB_POST_RESET: This callback is called after device reset is
+ * complete and the driver has applied back all the
+ * properties.
+ * @MSM_DBA_CB_DDC_I2C_ERROR: Detected a failure in DDC block for i2c error.
+ * @MSM_DBA_CB_DDC_TIMEOUT: Detected a failure in DDC block for timed out
+ * waiting for downstream receiver.
+ *
+ * Clients for this driver can register for receiving callbacks for specific
+ * events. This enum defines the type of events supported by the driver. An
+ * event mask is typically used to denote multiple events.
+ */
+enum msm_dba_callback_event {
+ MSM_DBA_CB_REMOTE_INT = BIT(0),
+ MSM_DBA_CB_HDCP_LINK_AUTHENTICATED = BIT(1),
+ MSM_DBA_CB_HDCP_LINK_UNAUTHENTICATED = BIT(2),
+ MSM_DBA_CB_HPD_CONNECT = BIT(3),
+ MSM_DBA_CB_HPD_DISCONNECT = BIT(4),
+ MSM_DBA_CB_VIDEO_FAILURE = BIT(5),
+ MSM_DBA_CB_AUDIO_FAILURE = BIT(6),
+ MSM_DBA_CB_CEC_WRITE_SUCCESS = BIT(7),
+ MSM_DBA_CB_CEC_WRITE_FAIL = BIT(8),
+ MSM_DBA_CB_CEC_READ_PENDING = BIT(9),
+ MSM_DBA_CB_PRE_RESET = BIT(10),
+ MSM_DBA_CB_POST_RESET = BIT(11),
+ MSM_DBA_CB_DDC_I2C_ERROR = BIT(12),
+ MSM_DBA_CB_DDC_TIMEOUT = BIT(13),
+};
+
+/**
+ * enum msm_dba_audio_interface_type - audio interface type
+ * @MSM_DBA_AUDIO_I2S_INTERFACE: I2S interface for audio
+ * @MSM_DBA_AUDIO_SPDIF_INTERFACE: SPDIF interface for audio
+ */
+enum msm_dba_audio_interface_type {
+ MSM_DBA_AUDIO_I2S_INTERFACE = BIT(0),
+ MSM_DBA_AUDIO_SPDIF_INTERFACE = BIT(1),
+};
+
+/**
+ * enum msm_dba_audio_format_type - audio format type
+ * @MSM_DBA_AUDIO_FMT_UNCOMPRESSED_LPCM: uncompressed format
+ * @MSM_DBA_AUDIO_FMT_COMPRESSED: compressed formats
+ */
+enum msm_dba_audio_format_type {
+ MSM_DBA_AUDIO_FMT_UNCOMPRESSED_LPCM = BIT(0),
+ MSM_DBA_AUDIO_FMT_COMPRESSED = BIT(1),
+};
+
+/**
+ * enum msm_dba_audio_copyright_type - audio copyright
+ * @MSM_DBA_AUDIO_COPYRIGHT_PROTECTED: copy right protected
+ * @MSM_DBA_AUDIO_COPYRIGHT_NOT_PROTECTED: not copy right protected
+ */
+enum msm_dba_audio_copyright_type {
+ MSM_DBA_AUDIO_COPYRIGHT_PROTECTED = BIT(0),
+ MSM_DBA_AUDIO_COPYRIGHT_NOT_PROTECTED = BIT(1),
+};
+
+/**
+ * enum msm_dba_audio_pre_emphasis_type - pre-emphasis
+ * @MSM_DBA_AUDIO_NO_PRE_EMPHASIS: 2 audio channels w/o pre-emphasis
+ * @MSM_DBA_AUDIO_PRE_EMPHASIS_50_15us: 2 audio channels with 50/15uS
+ */
+enum msm_dba_audio_pre_emphasis_type {
+ MSM_DBA_AUDIO_NO_PRE_EMPHASIS = BIT(0),
+ MSM_DBA_AUDIO_PRE_EMPHASIS_50_15us = BIT(1),
+};
+
+/**
+ * enum msm_dba_audio_clock_accuracy - Audio Clock Accuracy
+ * @MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL1: normal accuracy +/-1000 x 10^-6
+ * @MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL2: high accuracy +/- 50 x 10^-6
+ * @MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL3: variable pitch shifted clock
+ */
+enum msm_dba_audio_clock_accuracy {
+ MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL1 = BIT(1),
+ MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL2 = BIT(0),
+ MSM_DBA_AUDIO_CLOCK_ACCURACY_LVL3 = BIT(2),
+};
+
+/**
+ * enum msm_dba_channel_status_source - CS override
+ * @MSM_DBA_AUDIO_CS_SOURCE_I2S_STREAM: use channel status bits from I2S stream
+ * @MSM_DBA_AUDIO_CS_SOURCE_REGISTERS: use channel status bits from registers
+ */
+enum msm_dba_channel_status_source {
+ MSM_DBA_AUDIO_CS_SOURCE_I2S_STREAM,
+ MSM_DBA_AUDIO_CS_SOURCE_REGISTERS
+};
+
+/**
+ * enum msm_dba_audio_sampling_rates_type - audio sampling rates
+ * @MSM_DBA_AUDIO_32KHZ: 32KHz sampling rate
+ * @MSM_DBA_AUDIO_44P1KHZ: 44.1KHz sampling rate
+ * @MSM_DBA_AUDIO_48KHZ: 48KHz sampling rate
+ * @MSM_DBA_AUDIO_96KHZ: 96KHz sampling rate
+ * @MSM_DBA_AUDIO_192KHZ: 192KHz sampling rate
+ */
+enum msm_dba_audio_sampling_rates_type {
+ MSM_DBA_AUDIO_32KHZ = BIT(0),
+ MSM_DBA_AUDIO_44P1KHZ = BIT(1),
+ MSM_DBA_AUDIO_48KHZ = BIT(2),
+ MSM_DBA_AUDIO_88P2KHZ = BIT(1),
+ MSM_DBA_AUDIO_96KHZ = BIT(3),
+ MSM_DBA_AUDIO_176P4KHZ = BIT(1),
+ MSM_DBA_AUDIO_192KHZ = BIT(4),
+};
+
+/**
+ * enum msm_dba_audio_word_bit_depth - audio word size
+ * @MSM_DBA_AUDIO_WORD_16BIT: 16 bits per word
+ * @MSM_DBA_AUDIO_WORD_24BIT: 24 bits per word
+ * @MSM_DBA_AUDIO_WORD_32BIT: 32 bits per word
+ */
+enum msm_dba_audio_word_bit_depth {
+ MSM_DBA_AUDIO_WORD_16BIT = BIT(0),
+ MSM_DBA_AUDIO_WORD_24BIT = BIT(1),
+ MSM_DBA_AUDIO_WORD_32BIT = BIT(2),
+};
+
+/**
+ * enum msm_dba_audio_channel_count - audio channel count
+ * @MSM_DBA_AUDIO_CHANNEL_2: 2 channel audio
+ * @MSM_DBA_AUDIO_CHANNEL_4: 4 channel audio
+ * @MSM_DBA_AUDIO_CHANNEL_8: 8 channel audio
+ */
+enum msm_dba_audio_channel_count {
+ MSM_DBA_AUDIO_CHANNEL_2 = BIT(0),
+ MSM_DBA_AUDIO_CHANNEL_4 = BIT(1),
+ MSM_DBA_AUDIO_CHANNEL_8 = BIT(2),
+};
+
+/**
+ * enum msm_dba_audio_i2s_format - i2s audio data format
+ * @MSM_DBA_AUDIO_I2S_FMT_STANDARD: Standard format
+ * @MSM_DBA_AUDIO_I2S_FMT_RIGHT_JUSTIFIED: i2s data is right justified
+ * @MSM_DBA_AUDIO_I2S_FMT_LEFT_JUSTIFIED: i2s data is left justified
+ * @MSM_DBA_AUDIO_I2S_FMT_AES3_DIRECT: AES signal format
+ */
+enum msm_dba_audio_i2s_format {
+ MSM_DBA_AUDIO_I2S_FMT_STANDARD = 0,
+ MSM_DBA_AUDIO_I2S_FMT_RIGHT_JUSTIFIED,
+ MSM_DBA_AUDIO_I2S_FMT_LEFT_JUSTIFIED,
+ MSM_DBA_AUDIO_I2S_FMT_AES3_DIRECT,
+ MSM_DBA_AUDIO_I2S_FMT_MAX,
+};
+
+enum msm_dba_video_aspect_ratio {
+ MSM_DBA_AR_UNKNOWN = 0,
+ MSM_DBA_AR_4_3,
+ MSM_DBA_AR_5_4,
+ MSM_DBA_AR_16_9,
+ MSM_DBA_AR_16_10,
+ MSM_DBA_AR_64_27,
+ MSM_DBA_AR_256_135,
+ MSM_DBA_AR_MAX
+};
+
+enum msm_dba_audio_word_endian_type {
+ MSM_DBA_AUDIO_WORD_LITTLE_ENDIAN = 0,
+ MSM_DBA_AUDIO_WORD_BIG_ENDIAN,
+ MSM_DBA_AUDIO_WORD_ENDIAN_MAX
+};
+
+/**
+ * msm_dba_audio_op_mode - i2s audio operation mode
+ * @MSM_DBA_AUDIO_MODE_MANUAL: Manual mode
+ * @MSM_DBA_AUDIO_MODE_AUTOMATIC: Automatic mode
+ */
+enum msm_dba_audio_op_mode {
+ MSM_DBA_AUDIO_MODE_MANUAL,
+ MSM_DBA_AUDIO_MODE_AUTOMATIC,
+};
+
+/**
+ * typedef *msm_dba_cb() - Prototype for callback function
+ * @data: Pointer to user data provided with register API
+ * @event: Event type associated with callback. This can be a bitmask.
+ */
+typedef void (*msm_dba_cb)(void *data, enum msm_dba_callback_event event);
+
+/**
+ * struct msm_dba_reg_info - Client information used with register API
+ * @client_name: Name of the client for debug purposes
+ * @chip_name: Bridge chip ID
+ * @instance_id: Instance ID of the bridge chip in case of multiple instances
+ * @cb: callback function called in case of events.
+ * @cb_data: pointer to a data structure that will be returned with callback
+ *
+ * msm_dba_reg_info structure will be used to provide information during
+ * registering with driver. This structure will contain the information required
+ * to identify the specific bridge chip the client wants to use.
+ *
+ * Client should also specify the callback function which needs to be called in
+ * case of events. There is an optional data field which is a pointer that will
+ * be returned as one of arguments in the callback function. This data field can
+ * be NULL if client does not wish to use it.
+ */
+struct msm_dba_reg_info {
+ char client_name[MSM_DBA_CLIENT_NAME_LEN];
+ char chip_name[MSM_DBA_CHIP_NAME_MAX_LEN];
+ u32 instance_id;
+ msm_dba_cb cb;
+ void *cb_data;
+};
+
+/**
+ * struct msm_dba_video_caps_info - video capabilities of the bridge chip
+ * @hdcp_support: if hdcp is supported
+ * @edid_support: if reading edid from sink is supported
+ * @data_lanes_lp_support: if low power mode is supported on data lanes
+ * @clock_lanes_lp_support: If low power mode is supported on clock lanes
+ * @max_pclk_khz: maximum pixel clock supported
+ * @num_of_input_lanes: Number of input data lanes supported by the bridge chip
+ */
+struct msm_dba_video_caps_info {
+ bool hdcp_support;
+ bool edid_support;
+ bool data_lanes_lp_support;
+ bool clock_lanes_lp_support;
+ u32 max_pclk_khz;
+ u32 num_of_input_lanes;
+};
+
+/**
+ * struct msm_dba_audio_caps_info - audio capabilities of the bridge chip
+ * @audio_support: if audio is supported
+ * @audio_rates: audio sampling rates supported
+ * @audio_fmts: audio formats supported
+ */
+struct msm_dba_audio_caps_info {
+ u32 audio_support;
+ u32 audio_rates;
+ u32 audio_fmts;
+};
+
+/**
+ * struct msm_dba_capabilities - general capabilities of the bridge chip
+ * @vid_caps: video capabilities
+ * @aud_caps: audio capabilities
+ * @av_mute_support: av mute support in bridge chip
+ * @deferred_commit_support: support for deferred commit
+ */
+struct msm_dba_capabilities {
+ struct msm_dba_video_caps_info vid_caps;
+ struct msm_dba_audio_caps_info aud_caps;
+ bool av_mute_support;
+ bool deferred_commit_support;
+};
+
+/**
+ * struct msm_dba_audio_cfg - Structure for audio configuration
+ * @interface: Specifies audio interface type. Client should check the
+ * capabilities for the interfaces supported by the bridge.
+ * @format: Compressed vs Uncompressed formats.
+ * @channels: Number of channels.
+ * @i2s_fmt: I2S data packing format. This is valid only if interface is I2S.
+ * @sampling_rate: sampling rate of audio data
+ * @word_size: word size
+ * @word_endianness: little or big endian words
+ */
+struct msm_dba_audio_cfg {
+ enum msm_dba_audio_interface_type interface;
+ enum msm_dba_audio_format_type format;
+ enum msm_dba_audio_channel_count channels;
+ enum msm_dba_audio_i2s_format i2s_fmt;
+ enum msm_dba_audio_sampling_rates_type sampling_rate;
+ enum msm_dba_audio_word_bit_depth word_size;
+ enum msm_dba_audio_word_endian_type word_endianness;
+ enum msm_dba_audio_copyright_type copyright;
+ enum msm_dba_audio_pre_emphasis_type pre_emphasis;
+ enum msm_dba_audio_clock_accuracy clock_accuracy;
+ enum msm_dba_channel_status_source channel_status_source;
+ enum msm_dba_audio_op_mode mode;
+
+ u32 channel_status_category_code;
+ u32 channel_status_source_number;
+ u32 channel_status_v_bit;
+ u32 channel_allocation;
+ u32 channel_status_word_length;
+
+ u32 n;
+ u32 cts;
+};
+
+/**
+ * struct msm_dba_video_cfg - video configuration data
+ * @h_active: active width of the video signal
+ * @h_front_porch: horizontal front porch in pixels
+ * @h_pulse_width: pulse width of hsync in pixels
+ * @h_back_porch: horizontal back porch in pixels
+ * @h_polarity: polarity of hsync signal
+ * @v_active: active height of the video signal
+ * @v_front_porch: vertical front porch in lines
+ * @v_pulse_width: pulse width of vsync in lines
+ * @v_back_porch: vertical back porch in lines
+ * @v_polarity: polarity of vsync signal
+ * @pclk_khz: pixel clock in KHz
+ * @interlaced: if video is interlaced
+ * @vic: video indetification code
+ * @hdmi_mode: hdmi or dvi mode for the sink
+ * @ar: aspect ratio of the signal
+ * @num_of_input_lanes: number of input lanes in case of DSI/LVDS
+ */
+struct msm_dba_video_cfg {
+ u32 h_active;
+ u32 h_front_porch;
+ u32 h_pulse_width;
+ u32 h_back_porch;
+ bool h_polarity;
+ u32 v_active;
+ u32 v_front_porch;
+ u32 v_pulse_width;
+ u32 v_back_porch;
+ bool v_polarity;
+ u32 pclk_khz;
+ bool interlaced;
+ u32 vic;
+ bool hdmi_mode;
+ enum msm_dba_video_aspect_ratio ar;
+ u32 num_of_input_lanes;
+ u8 scaninfo;
+};
+
+/**
+ * struct msm_dba_ops- operation supported by bridge chip
+ * @get_caps: returns the bridge chip capabilities
+ * DEFER and ASYNC flags are not supported.
+ * @power_on: powers on/off the bridge chip. This usually involves turning on
+ * the power regulators and bringing the chip out of reset. Chip
+ * should be capable of raising interrupts at this point.
+ * DEFER and ASYNC flags are supported.
+ * @video_on: turn on/off video stream. This function also requires the video
+ * timing information that might be needed for programming the bridge
+ * chip.
+ * DEFER flag is supported.
+ * ASYNC flag is not supported.
+ * @audio_on: turn on/off audio stream.
+ * DEFER flag is supported.
+ * ASYNC flag is not supported.
+ * @configure_audio: setup audio configuration
+ * DEFER flag is supported.
+ * ASYNC flag is not supported.
+ * @av_mute: controls av mute functionalities if supported. AV mute is different
+ * from audio_on and video_on where in even though the actual data is
+ * sent, mute is specified through control packets.
+ * DEFER flag is supported.
+ * ASYNC flag is not supported.
+ * @interupts_enable: enables interrupts to get event callbacks. Clients need
+ * to specify an event mask of the events they are
+ * interested in. If a client provides an event as part of
+ * the mask, it will receive the interrupt regardless of the
+ * client modifying the property.
+ * DEFER flag is supported.
+ * ASYNC flag is not supported.
+ * @hdcp_enable: enable/disable hdcp. If HDCP is enabled, this function will
+ * start a new authentication session. There is a separate
+ * argument for enabling encryption. Encryption can be enabled any
+ * time after HDCP has been fully authenticated. This function
+ * will support an asynchronous mode where calling this function
+ * will kick off HDCP and return to the caller. Caller has to wait
+ * for MSM_DBA_CB_HDCP_SUCCESS callback to ensure link is
+ * authenticated.
+ * DEFER flag is not supported.
+ * ASYNC flag is supported.
+ * @hdcp_get_ksv_list_size: returns the KSV list size. In case of a simple sink
+ * the size will be 1. In case of a repeater, this can
+ * be more than one.
+ * DEFER and ASYNC flags are not supported.
+ * @hdcp_get_ksv_list: return the KSV list. Client can query the KSV information
+ * from the bridge. Client should call
+ * hdcp_get_ksv_list_size first and then allocate 40*size
+ * bytes to hold all the KSVs.
+ * DEFER and ASYNC flags are not supported.
+ * @hdmi_cec_on: enable or disable cec module. Clients need to enable CEC
+ * feature before they do read or write CEC messages.
+ * @hdmi_cec_write: perform a CEC write. For bridges with HDMI as output
+ * interface, this function allows clients to send a CEC
+ * message. Client should pack the data according to the CEC
+ * specification and provide the final buffer. Since CEC writes
+ * can take longer time to ascertaining if they are successful,
+ * this function supports the ASYNC flag. Driver will return
+ * either MSM_DBA_CB_CEC_WRITE_SUCCESS or
+ * MSM_DBA_CB_CEC_WRITE_FAIL callbacks.
+ * DEFER is not supported.
+ * ASYNC flag is supported.
+ * @hdmi_cec_read: get a pending CEC read message. In case of an incoming CEC
+ * message, driver will return MSM_DBA_CB_CEC_READ_PENDING
+ * callback. On getting this event callback, client should call
+ * hdmi_cec_read to get the message. The buffer should at least
+ * be 15 bytes or more. Client should read the CEC message from
+ * a thread different from the callback.
+ * DEFER and ASYNC flags are not supported.
+ * @get_edid_size: returns size of the edid.
+ * DEFER and ASYNC flags are not supported.
+ * @get_raw_edid: returns raw edid data.
+ * DEFER and ASYNC flags are not supported.
+ * @enable_remote_comm: enable/disable remote communication. Some interfaces
+ * like FPDLINK III support a bi-directional control
+ * channel that could be used to send control data using an
+ * I2C or SPI protocol. This Function will enable this
+ * control channel if supported.
+ * DEFER and ASYNC flags are not supported.
+ * @add_remote_device: add slaves on remote side for enabling communication. For
+ * interfaces that support bi directional control channel,
+ * this function allows clients to specify slave IDs of
+ * devices on remote bus. Messages addressed to these IDs
+ * will be trapped by the bridge chip and put on the remote
+ * bus.
+ * DEFER and ASYNC flags are not supported.
+ * @commit_deferred_props: commits deferred properties
+ * DEFER and ASYNC flags are not supported.
+ * @force_reset: reset the device forcefully. In case the device goes into a bad
+ * state, a client can force reset to try and recover the device.
+ * The reset will be applied in spite of different configurations
+ * from other clients. Driver will apply all the properties that
+ * have been applied so far after the reset is complete. In case
+ * of multiple clients, driver will issue a reset callback.
+ * @dump_debug_info: dumps debug information to dmesg.
+ * @check_hpd: Check if cable is connected or not. if cable is connected we
+ * send notification to display framework.
+ * @set_audio_block: This function will populate the raw audio speaker block
+ * data along with size of each block in bridgechip buffer.
+ * @get_audio_block: This function will return the raw audio speaker block
+ * along with size of each block.
+ *
+ * The msm_dba_ops structure represents a set of operations that can be
+ * supported by each bridge chip. Depending on the functionality supported by a
+ * specific bridge chip, some of the operations need not be supported. For
+ * example if a bridge chip does not support reading EDID from a sink device,
+ * get_edid_size and get_raw_edid can be NULL.
+ *
+ * Deferring properties: The deferred flag allows us to address any quirks with
+ * respect to specific bridge chips. If there is a need for some properties to
+ * be committed together, turning on video and audio at the same time, the
+ * deferred flag can be used. Properties that are set using a DEFER flag will
+ * not be committed to hardware until commit_deferred_props() function is
+ * called.
+ *
+ */
+struct msm_dba_ops {
+ int (*get_caps)(void *client,
+ struct msm_dba_capabilities *caps);
+
+ int (*power_on)(void *client,
+ bool on,
+ u32 flags);
+
+ int (*video_on)(void *client,
+ bool on,
+ struct msm_dba_video_cfg *cfg,
+ u32 flags);
+
+ int (*audio_on)(void *client,
+ bool on,
+ u32 flags);
+
+ int (*configure_audio)(void *client,
+ struct msm_dba_audio_cfg *cfg,
+ u32 flags);
+
+ int (*av_mute)(void *client,
+ bool video_mute,
+ bool audio_mute,
+ u32 flags);
+
+ int (*interrupts_enable)(void *client,
+ bool on,
+ u32 event_mask,
+ u32 flags);
+
+ int (*hdcp_enable)(void *client,
+ bool hdcp_on,
+ bool enc_on,
+ u32 flags);
+
+ int (*hdcp_get_ksv_list_size)(void *client,
+ u32 *count,
+ u32 flags);
+
+ int (*hdcp_get_ksv_list)(void *client,
+ u32 count,
+ char *buf,
+ u32 flags);
+
+ int (*hdmi_cec_on)(void *client,
+ bool enable,
+ u32 flags);
+
+ int (*hdmi_cec_write)(void *client,
+ u32 size,
+ char *buf,
+ u32 flags);
+
+ int (*hdmi_cec_read)(void *client,
+ u32 *size,
+ char *buf,
+ u32 flags);
+
+ int (*get_edid_size)(void *client,
+ u32 *size,
+ u32 flags);
+
+ int (*get_raw_edid)(void *client,
+ u32 size,
+ char *buf,
+ u32 flags);
+
+ int (*enable_remote_comm)(void *client,
+ bool on,
+ u32 flags);
+
+ int (*add_remote_device)(void *client,
+ u32 *slave_ids,
+ u32 count,
+ u32 flags);
+
+ int (*commit_deferred_props)(void *client,
+ u32 flags);
+
+ int (*force_reset)(void *client, u32 flags);
+ int (*dump_debug_info)(void *client, u32 flags);
+ int (*check_hpd)(void *client, u32 flags);
+ void (*set_audio_block)(void *client, u32 size, void *buf);
+ void (*get_audio_block)(void *client, u32 size, void *buf);
+};
+
+/**
+ * msm_dba_register_client() - Allows a client to register with the driver.
+ * @info: Client information along with the bridge chip id the client wishes to
+ * program.
+ * @ops: Function pointers to bridge chip operations. Some function pointers can
+ * be NULL depending on the functionalities supported by bridge chip.
+ *
+ * The register API supports multiple clients to register for the same bridge
+ * chip. If Successful, this will return a pointer that should be used as a
+ * handle for all subsequent function calls.
+ */
+void *msm_dba_register_client(struct msm_dba_reg_info *info,
+ struct msm_dba_ops *ops);
+
+/**
+ * msm_dba_deregister_client() - Allows client to de-register with the driver.
+ * @client: client handle returned by register API.
+ *
+ * This function will release all the resources used by a particular client. If
+ * it is the only client using the bridge chip, the bridge chip will be powered
+ * down and put into reset.
+ */
+int msm_dba_deregister_client(void *client);
+
+#endif /* _MSM_DBA_H */