93 lines
3.1 KiB
C
93 lines
3.1 KiB
C
|
/***************************************************************************
|
||
|
* __________ __ ___.
|
||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||
|
* \/ \/ \/ \/ \/
|
||
|
* $Id: ascodec-target.h 26116 2010-05-17 20:53:25Z funman $
|
||
|
*
|
||
|
* Module wrapper for AS3543 audio codec, using /dev/afe (afe.ko) of Samsung YP-R0
|
||
|
*
|
||
|
* Copyright (c) 2011 Lorenzo Miori
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 2
|
||
|
* of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||
|
* KIND, either express or implied.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef _ASCODEC_TARGET_H
|
||
|
#define _ASCODEC_TARGET_H
|
||
|
|
||
|
#include "as3514.h"
|
||
|
#include "kernel.h"
|
||
|
#include "adc.h"
|
||
|
#include "ascodec.h"
|
||
|
|
||
|
/* ioctl parameter struct */
|
||
|
|
||
|
struct codec_req_struct {
|
||
|
/* This works for every kind of afe.ko module requests */
|
||
|
unsigned char reg; /* Main register address */
|
||
|
unsigned char subreg; /* Set this only if you are reading/writing a PMU register*/
|
||
|
unsigned char value; /* To be read if reading a register; to be set if writing to a register */
|
||
|
};
|
||
|
|
||
|
int ascodec_init(void);
|
||
|
void ascodec_close(void);
|
||
|
int ascodec_write(unsigned int reg, unsigned int value);
|
||
|
int ascodec_read(unsigned int reg);
|
||
|
void ascodec_write_pmu(unsigned int index, unsigned int subreg, unsigned int value);
|
||
|
int ascodec_read_pmu(unsigned int index, unsigned int subreg);
|
||
|
void ascodec_set(unsigned int reg, unsigned int bits);
|
||
|
void ascodec_clear(unsigned int reg, unsigned int bits);
|
||
|
void ascodec_write_masked(unsigned int reg, unsigned int bits, unsigned int mask);
|
||
|
int ascodec_readbytes(unsigned int index, unsigned int len, unsigned char *data);
|
||
|
unsigned short adc_read(int channel);
|
||
|
void ascodec_lock(void);
|
||
|
void ascodec_unlock(void);
|
||
|
|
||
|
static inline bool ascodec_chg_status(void)
|
||
|
{
|
||
|
return ascodec_read(AS3514_IRQ_ENRD0) & CHG_STATUS;
|
||
|
}
|
||
|
|
||
|
static inline bool ascodec_endofch(void)
|
||
|
{
|
||
|
return ascodec_read(AS3514_IRQ_ENRD0) & CHG_ENDOFCH;
|
||
|
}
|
||
|
|
||
|
static inline void ascodec_monitor_endofch(void)
|
||
|
{
|
||
|
ascodec_write(AS3514_IRQ_ENRD0, IRQ_ENDOFCH);
|
||
|
}
|
||
|
|
||
|
static inline void ascodec_wait_adc_finished(void)
|
||
|
{
|
||
|
/*
|
||
|
* FIXME: not implemented
|
||
|
*
|
||
|
* If irqs are not available on the target platform,
|
||
|
* this should be most likely implemented by polling
|
||
|
* AS3514_IRQ_ENRD2 in the same way powermgmt-ascodec.c
|
||
|
* is polling IRQ_ENDOFCH.
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
static inline void ascodec_write_charger(int value)
|
||
|
{
|
||
|
ascodec_write_pmu(AS3543_CHARGER, 1, value);
|
||
|
}
|
||
|
|
||
|
static inline int ascodec_read_charger(void)
|
||
|
{
|
||
|
return ascodec_read_pmu(AS3543_CHARGER, 1);
|
||
|
}
|
||
|
|
||
|
#endif /* !_ASCODEC_TARGET_H */
|