blob: 2449123922c7c54b80903751d1aaeb95e6384254 [file] [log] [blame]
/* Copyright (c) 2016, 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 __MDSS_HDMI_AUDIO_H__
#define __MDSS_HDMI_AUDIO_H__
#include <linux/mdss_io_util.h>
#include <linux/msm_hdmi.h>
#define AUDIO_ACK_SET_ENABLE BIT(5)
#define AUDIO_ACK_ENABLE BIT(4)
#define AUDIO_ACK_CONNECT BIT(0)
/**
* struct hdmi_audio_status - hdmi audio current status info
* @ack_pending: notification acknowledgment status
* @ack_enabled: acknowledgment feature is enabled or disabled
* @switched: audio notification status for routing
*
* Data for client to query about the current status of audio
*/
struct hdmi_audio_status {
bool ack_pending;
bool ack_enabled;
bool switched;
};
/**
* struct hdmi_audio_ops - audio operations for clients to call
* @on: function pointer to enable audio
* @reset: function pointer to reset the audio current status to default
* @status: function pointer to get the current status of audio
* @notify: function pointer to notify other modules for audio routing
* @ack: function pointer to acknowledge audio routing change
*
* Provides client operations for audio functionalities
*/
struct hdmi_audio_ops {
int (*on)(void *ctx, u32 pclk,
struct msm_hdmi_audio_setup_params *params);
void (*off)(void *ctx);
void (*reset)(void *ctx);
void (*status)(void *ctx, struct hdmi_audio_status *status);
void (*notify)(void *ctx, int val);
void (*ack)(void *ctx, u32 ack, u32 hpd);
};
/**
* struct hdmi_audio_init_data - data needed for initializing audio module
* @io: pointer to register access related data
* @ops: pointer to populate operation functions.
*
* Defines the data needed to be provided while initializing audio module
*/
struct hdmi_audio_init_data {
struct mdss_io_data *io;
struct hdmi_audio_ops *ops;
};
void *hdmi_audio_register(struct hdmi_audio_init_data *data);
void hdmi_audio_unregister(void *data);
#endif /* __MDSS_HDMI_AUDIO_H__ */