127 lines
3.8 KiB
C
127 lines
3.8 KiB
C
/*
|
|
* ALSA SoC - Samsung ABOX driver
|
|
*
|
|
* Copyright (c) 2016 Samsung Electronics Co. Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __ABOX_H
|
|
#define __ABOX_H
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/irqreturn.h>
|
|
#include <sound/soc.h>
|
|
#include <sound/samsung/abox_ipc.h>
|
|
|
|
/**
|
|
* abox irq handler type definition
|
|
* @param[in] ipc_id id of ipc
|
|
* @param[in] dev_id cookie which would be summitted with irq_handler
|
|
* @param[in] msg message data
|
|
* @return reference irqreturn_t
|
|
*/
|
|
typedef irqreturn_t (*abox_irq_handler_t)(int ipc_id, void *dev_id,
|
|
ABOX_IPC_MSG *msg);
|
|
|
|
#ifdef CONFIG_SND_SOC_SAMSUNG_ABOX
|
|
/**
|
|
* Check ABOX is on
|
|
* @return true if A-Box is on, false on otherwise
|
|
*/
|
|
extern bool abox_is_on(void);
|
|
|
|
/**
|
|
* Get INT frequency required by ABOX
|
|
* @return INT frequency in kHz
|
|
*/
|
|
extern unsigned int abox_get_requiring_int_freq_in_khz(void);
|
|
|
|
/**
|
|
* Start abox IPC
|
|
* @param[in] dev pointer to abox device
|
|
* @param[in] hw_irq hardware IRQ number
|
|
* @param[in] supplement pointer to data
|
|
* @param[in] size size of data which are pointed by supplement
|
|
* @param[in] atomic 1, if caller context is atomic. 0, if not.
|
|
* @param[in] sync 1 to wait for ack. 0 if not.
|
|
* @return error code if any
|
|
*/
|
|
extern int abox_request_ipc(struct device *dev,
|
|
int hw_irq, const void *supplement,
|
|
size_t size, int atomic, int sync);
|
|
|
|
/**
|
|
* Start abox IPC
|
|
* @param[in] dev pointer to abox device
|
|
* @param[in] hw_irq hardware IRQ number
|
|
* @param[in] supplement pointer to data
|
|
* @param[in] size size of data which are pointed by supplement
|
|
* @param[in] atomic 1, if caller context is atomic. 0, if not.
|
|
* @param[in] sync 1 to wait for ack. 0 if not.
|
|
* @return error code if any
|
|
*/
|
|
static inline int abox_start_ipc_transaction(struct device *dev,
|
|
int hw_irq, const void *supplement,
|
|
size_t size, int atomic, int sync)
|
|
{
|
|
return abox_request_ipc(dev, hw_irq, supplement, size, atomic, sync);
|
|
}
|
|
|
|
/**
|
|
* Register irq handler to abox
|
|
* @param[in] dev pointer to abox device
|
|
* @param[in] ipc_id id of ipc
|
|
* @param[in] irq_handler abox irq handler to register
|
|
* @param[in] dev_id cookie which would be summitted with irq_handler
|
|
* @return error code if any
|
|
*/
|
|
extern int abox_register_irq_handler(struct device *dev, int ipc_id,
|
|
abox_irq_handler_t irq_handler, void *dev_id);
|
|
|
|
/**
|
|
* UAIF/DSIF hw params fixup helper
|
|
* @param[in] rtd snd_soc_pcm_runtime
|
|
* @param[out] params snd_pcm_hw_params
|
|
* @return error code if any
|
|
*/
|
|
extern int abox_hw_params_fixup_helper(struct snd_soc_pcm_runtime *rtd,
|
|
struct snd_pcm_hw_params *params);
|
|
|
|
/**
|
|
* Enable or disable MCLK
|
|
* @param[in] on 1 to enable mclk. 0 if not.
|
|
*/
|
|
extern void abox_enable_mclk(unsigned int on);
|
|
extern void abox_disable_callback(void);
|
|
|
|
/**
|
|
* ABOX disable called from power down function
|
|
*/
|
|
extern void abox_disable_callback(void);
|
|
|
|
#else /* !CONFIG_SND_SOC_SAMSUNG_ABOX */
|
|
static inline bool abox_is_on(void) { return false; }
|
|
static inline unsigned int abox_get_requiring_int_freq_in_khz(void)
|
|
{ return 0; }
|
|
static inline int abox_request_ipc(struct device *dev,
|
|
int hw_irq, const void *supplement,
|
|
size_t size, int atomic, int sync) { return -ENODEV; }
|
|
static inline int abox_start_ipc_transaction(struct device *dev,
|
|
int hw_irq, const void *supplement,
|
|
size_t size, int atomic, int sync)
|
|
{
|
|
return abox_request_ipc(dev, hw_irq, supplement, size, atomic, sync);
|
|
}
|
|
static inline int abox_register_irq_handler(struct device *dev, int ipc_id,
|
|
abox_irq_handler_t irq_handler, void *dev_id)
|
|
{ return -ENODEV; }
|
|
static inline int abox_hw_params_fixup_helper(struct snd_soc_pcm_runtime *rtd,
|
|
struct snd_pcm_hw_params *params) { return -ENODEV; }
|
|
#endif /* !CONFIG_SND_SOC_SAMSUNG_ABOX */
|
|
|
|
#endif /* __ABOX_H */
|
|
|