You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
ASoC: UDA134x codec driver
Signed-off-by: Christian Pellegrin <chripell@fsfe.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
committed by
Mark Brown
parent
6e5d9db271
commit
1cad1de1b2
@@ -0,0 +1,18 @@
|
||||
#ifndef _L3_H_
|
||||
#define _L3_H_ 1
|
||||
|
||||
struct l3_pins {
|
||||
void (*setdat)(int);
|
||||
void (*setclk)(int);
|
||||
void (*setmode)(int);
|
||||
int data_hold;
|
||||
int data_setup;
|
||||
int clock_high;
|
||||
int mode_hold;
|
||||
int mode;
|
||||
int mode_setup;
|
||||
};
|
||||
|
||||
int l3_write(struct l3_pins *adap, u8 addr, u8 *data, int len);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* uda134x.h -- UDA134x ALSA SoC Codec driver
|
||||
*
|
||||
* Copyright 2007 Dension Audio Systems Ltd.
|
||||
* Author: Zoltan Devai
|
||||
*
|
||||
* 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 _UDA134X_H
|
||||
#define _UDA134X_H
|
||||
|
||||
#include <sound/l3.h>
|
||||
|
||||
struct uda134x_platform_data {
|
||||
struct l3_pins l3;
|
||||
void (*power) (int);
|
||||
int model;
|
||||
#define UDA134X_UDA1340 1
|
||||
#define UDA134X_UDA1341 2
|
||||
#define UDA134X_UDA1344 3
|
||||
};
|
||||
|
||||
#endif /* _UDA134X_H */
|
||||
@@ -10,6 +10,7 @@ config SND_SOC_ALL_CODECS
|
||||
select SND_SOC_TLV320AIC26 if SPI_MASTER
|
||||
select SND_SOC_TLV320AIC3X if I2C
|
||||
select SND_SOC_TWL4030 if TWL4030_CORE
|
||||
select SND_SOC_UDA134X
|
||||
select SND_SOC_UDA1380 if I2C
|
||||
select SND_SOC_WM8510 if (I2C || SPI_MASTER)
|
||||
select SND_SOC_WM8580 if I2C
|
||||
@@ -66,6 +67,9 @@ config SND_SOC_CS4270_VD33_ERRATA
|
||||
bool
|
||||
depends on SND_SOC_CS4270
|
||||
|
||||
config SND_SOC_L3
|
||||
tristate
|
||||
|
||||
config SND_SOC_SSM2602
|
||||
tristate
|
||||
|
||||
@@ -85,6 +89,10 @@ config SND_SOC_TWL4030
|
||||
tristate
|
||||
depends on TWL4030_CORE
|
||||
|
||||
config SND_SOC_UDA134X
|
||||
tristate
|
||||
select SND_SOC_L3
|
||||
|
||||
config SND_SOC_UDA1380
|
||||
tristate
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ snd-soc-ad1980-objs := ad1980.o
|
||||
snd-soc-ad73311-objs := ad73311.o
|
||||
snd-soc-ak4535-objs := ak4535.o
|
||||
snd-soc-cs4270-objs := cs4270.o
|
||||
snd-soc-l3-objs := l3.o
|
||||
snd-soc-ssm2602-objs := ssm2602.o
|
||||
snd-soc-tlv320aic23-objs := tlv320aic23.o
|
||||
snd-soc-tlv320aic26-objs := tlv320aic26.o
|
||||
snd-soc-tlv320aic3x-objs := tlv320aic3x.o
|
||||
snd-soc-twl4030-objs := twl4030.o
|
||||
snd-soc-uda134x-objs := uda134x.o
|
||||
snd-soc-uda1380-objs := uda1380.o
|
||||
snd-soc-wm8510-objs := wm8510.o
|
||||
snd-soc-wm8580-objs := wm8580.o
|
||||
@@ -27,11 +29,13 @@ obj-$(CONFIG_SND_SOC_AD1980) += snd-soc-ad1980.o
|
||||
obj-$(CONFIG_SND_SOC_AD73311) += snd-soc-ad73311.o
|
||||
obj-$(CONFIG_SND_SOC_AK4535) += snd-soc-ak4535.o
|
||||
obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o
|
||||
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
|
||||
obj-$(CONFIG_SND_SOC_SSM2602) += snd-soc-ssm2602.o
|
||||
obj-$(CONFIG_SND_SOC_TLV320AIC23) += snd-soc-tlv320aic23.o
|
||||
obj-$(CONFIG_SND_SOC_TLV320AIC26) += snd-soc-tlv320aic26.o
|
||||
obj-$(CONFIG_SND_SOC_TLV320AIC3X) += snd-soc-tlv320aic3x.o
|
||||
obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
|
||||
obj-$(CONFIG_SND_SOC_UDA134X) += snd-soc-uda134x.o
|
||||
obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
|
||||
obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
|
||||
obj-$(CONFIG_SND_SOC_WM8580) += snd-soc-wm8580.o
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* L3 code
|
||||
*
|
||||
* Copyright (C) 2008, Christian Pellegrin <chripell@evolware.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*
|
||||
* based on:
|
||||
*
|
||||
* L3 bus algorithm module.
|
||||
*
|
||||
* Copyright (C) 2001 Russell King, All Rights Reserved.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <sound/l3.h>
|
||||
|
||||
/*
|
||||
* Send one byte of data to the chip. Data is latched into the chip on
|
||||
* the rising edge of the clock.
|
||||
*/
|
||||
static void sendbyte(struct l3_pins *adap, unsigned int byte)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
adap->setclk(0);
|
||||
udelay(adap->data_hold);
|
||||
adap->setdat(byte & 1);
|
||||
udelay(adap->data_setup);
|
||||
adap->setclk(1);
|
||||
udelay(adap->clock_high);
|
||||
byte >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Send a set of bytes to the chip. We need to pulse the MODE line
|
||||
* between each byte, but never at the start nor at the end of the
|
||||
* transfer.
|
||||
*/
|
||||
static void sendbytes(struct l3_pins *adap, const u8 *buf,
|
||||
int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i) {
|
||||
udelay(adap->mode_hold);
|
||||
adap->setmode(0);
|
||||
udelay(adap->mode);
|
||||
}
|
||||
adap->setmode(1);
|
||||
udelay(adap->mode_setup);
|
||||
sendbyte(adap, buf[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int l3_write(struct l3_pins *adap, u8 addr, u8 *data, int len)
|
||||
{
|
||||
adap->setclk(1);
|
||||
adap->setdat(1);
|
||||
adap->setmode(1);
|
||||
udelay(adap->mode);
|
||||
|
||||
adap->setmode(0);
|
||||
udelay(adap->mode_setup);
|
||||
sendbyte(adap, addr);
|
||||
udelay(adap->mode_hold);
|
||||
|
||||
sendbytes(adap, data, len);
|
||||
|
||||
adap->setclk(1);
|
||||
adap->setdat(1);
|
||||
adap->setmode(0);
|
||||
|
||||
return len;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(l3_write);
|
||||
|
||||
MODULE_DESCRIPTION("L3 bit-banging driver");
|
||||
MODULE_AUTHOR("Christian Pellegrin <chripell@evolware.org>");
|
||||
MODULE_LICENSE("GPL");
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
||||
#ifndef _UDA134X_CODEC_H
|
||||
#define _UDA134X_CODEC_H
|
||||
|
||||
#define UDA134X_L3ADDR 5
|
||||
#define UDA134X_DATA0_ADDR ((UDA134X_L3ADDR << 2) | 0)
|
||||
#define UDA134X_DATA1_ADDR ((UDA134X_L3ADDR << 2) | 1)
|
||||
#define UDA134X_STATUS_ADDR ((UDA134X_L3ADDR << 2) | 2)
|
||||
|
||||
#define UDA134X_EXTADDR_PREFIX 0xC0
|
||||
#define UDA134X_EXTDATA_PREFIX 0xE0
|
||||
|
||||
/* UDA134X registers */
|
||||
#define UDA134X_EA000 0
|
||||
#define UDA134X_EA001 1
|
||||
#define UDA134X_EA010 2
|
||||
#define UDA134X_EA011 3
|
||||
#define UDA134X_EA100 4
|
||||
#define UDA134X_EA101 5
|
||||
#define UDA134X_EA110 6
|
||||
#define UDA134X_EA111 7
|
||||
#define UDA134X_STATUS0 8
|
||||
#define UDA134X_STATUS1 9
|
||||
#define UDA134X_DATA000 10
|
||||
#define UDA134X_DATA001 11
|
||||
#define UDA134X_DATA010 12
|
||||
#define UDA134X_DATA1 13
|
||||
|
||||
#define UDA134X_REGS_NUM 14
|
||||
|
||||
#define STATUS0_DAIFMT_MASK (~(7<<1))
|
||||
#define STATUS0_SYSCLK_MASK (~(3<<4))
|
||||
|
||||
extern struct snd_soc_dai uda134x_dai;
|
||||
extern struct snd_soc_codec_device soc_codec_dev_uda134x;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user