diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-01-07 14:40:05 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-01-07 14:40:05 +0000 |
commit | 123656d4cc8c946f578ebd18c2050f5251720428 (patch) | |
tree | 3d5432eff034a3b9cfdc98b37e245abe5695342d /sound/i2c | |
parent | a62c80e559809e6c7851ec04d30575e85ad6f6ed (diff) | |
parent | 0aec63e67c69545ca757a73a66f5dcf05fa484bf (diff) |
Merge with Linus' kernel.
Diffstat (limited to 'sound/i2c')
-rw-r--r-- | sound/i2c/cs8427.c | 142 | ||||
-rw-r--r-- | sound/i2c/i2c.c | 79 | ||||
-rw-r--r-- | sound/i2c/l3/uda1341.c | 233 | ||||
-rw-r--r-- | sound/i2c/other/ak4114.c | 122 | ||||
-rw-r--r-- | sound/i2c/other/ak4117.c | 122 | ||||
-rw-r--r-- | sound/i2c/other/ak4xxx-adda.c | 49 | ||||
-rw-r--r-- | sound/i2c/other/tea575x-tuner.c | 8 | ||||
-rw-r--r-- | sound/i2c/tea6330t.c | 88 |
8 files changed, 503 insertions, 340 deletions
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c index 1a05cfbdc7c..9deba80a587 100644 --- a/sound/i2c/cs8427.c +++ b/sound/i2c/cs8427.c @@ -30,7 +30,7 @@ #include <sound/cs8427.h> #include <sound/asoundef.h> -static void snd_cs8427_reset(snd_i2c_device_t *cs8427); +static void snd_cs8427_reset(struct snd_i2c_device *cs8427); MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); MODULE_DESCRIPTION("IEC958 (S/PDIF) receiver & transmitter by Cirrus Logic"); @@ -38,22 +38,22 @@ MODULE_LICENSE("GPL"); #define CS8427_ADDR (0x20>>1) /* fixed address */ -typedef struct { - snd_pcm_substream_t *substream; +struct cs8427_stream { + struct snd_pcm_substream *substream; char hw_status[24]; /* hardware status */ char def_status[24]; /* default status */ char pcm_status[24]; /* PCM private status */ char hw_udata[32]; - snd_kcontrol_t *pcm_ctl; -} cs8427_stream_t; + struct snd_kcontrol *pcm_ctl; +}; -typedef struct { +struct cs8427 { unsigned char regmap[0x14]; /* map of first 1 + 13 registers */ unsigned int rate; unsigned int reset_timeout; - cs8427_stream_t playback; - cs8427_stream_t capture; -} cs8427_t; + struct cs8427_stream playback; + struct cs8427_stream capture; +}; static unsigned char swapbits(unsigned char val) { @@ -67,7 +67,8 @@ static unsigned char swapbits(unsigned char val) return res; } -int snd_cs8427_reg_write(snd_i2c_device_t *device, unsigned char reg, unsigned char val) +int snd_cs8427_reg_write(struct snd_i2c_device *device, unsigned char reg, + unsigned char val) { int err; unsigned char buf[2]; @@ -81,7 +82,7 @@ int snd_cs8427_reg_write(snd_i2c_device_t *device, unsigned char reg, unsigned c return 0; } -static int snd_cs8427_reg_read(snd_i2c_device_t *device, unsigned char reg) +static int snd_cs8427_reg_read(struct snd_i2c_device *device, unsigned char reg) { int err; unsigned char buf; @@ -97,28 +98,29 @@ static int snd_cs8427_reg_read(snd_i2c_device_t *device, unsigned char reg) return buf; } -static int snd_cs8427_select_corudata(snd_i2c_device_t *device, int udata) +static int snd_cs8427_select_corudata(struct snd_i2c_device *device, int udata) { - cs8427_t *chip = device->private_data; + struct cs8427 *chip = device->private_data; int err; udata = udata ? CS8427_BSEL : 0; if (udata != (chip->regmap[CS8427_REG_CSDATABUF] & udata)) { chip->regmap[CS8427_REG_CSDATABUF] &= ~CS8427_BSEL; chip->regmap[CS8427_REG_CSDATABUF] |= udata; - err = snd_cs8427_reg_write(device, CS8427_REG_CSDATABUF, chip->regmap[CS8427_REG_CSDATABUF]); + err = snd_cs8427_reg_write(device, CS8427_REG_CSDATABUF, + chip->regmap[CS8427_REG_CSDATABUF]); if (err < 0) return err; } return 0; } -static int snd_cs8427_send_corudata(snd_i2c_device_t *device, +static int snd_cs8427_send_corudata(struct snd_i2c_device *device, int udata, unsigned char *ndata, int count) { - cs8427_t *chip = device->private_data; + struct cs8427 *chip = device->private_data; char *hw_data = udata ? chip->playback.hw_udata : chip->playback.hw_status; char data[32]; int err, idx; @@ -133,7 +135,8 @@ static int snd_cs8427_send_corudata(snd_i2c_device_t *device, if (memcmp(hw_data, data, count) == 0) { chip->regmap[CS8427_REG_UDATABUF] &= ~CS8427_UBMMASK; chip->regmap[CS8427_REG_UDATABUF] |= CS8427_UBMZEROS | CS8427_EFTUI; - if ((err = snd_cs8427_reg_write(device, CS8427_REG_UDATABUF, chip->regmap[CS8427_REG_UDATABUF])) < 0) + if ((err = snd_cs8427_reg_write(device, CS8427_REG_UDATABUF, + chip->regmap[CS8427_REG_UDATABUF])) < 0) return err; return 0; } @@ -146,15 +149,15 @@ static int snd_cs8427_send_corudata(snd_i2c_device_t *device, return 1; } -static void snd_cs8427_free(snd_i2c_device_t *device) +static void snd_cs8427_free(struct snd_i2c_device *device) { kfree(device->private_data); } -int snd_cs8427_create(snd_i2c_bus_t *bus, +int snd_cs8427_create(struct snd_i2c_bus *bus, unsigned char addr, unsigned int reset_timeout, - snd_i2c_device_t **r_cs8427) + struct snd_i2c_device **r_cs8427) { static unsigned char initvals1[] = { CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC, @@ -194,11 +197,12 @@ int snd_cs8427_create(snd_i2c_bus_t *bus, CS8427_UD | CS8427_EFTUI | CS8427_DETUI, }; int err; - cs8427_t *chip; - snd_i2c_device_t *device; + struct cs8427 *chip; + struct snd_i2c_device *device; unsigned char buf[24]; - if ((err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7), &device)) < 0) + if ((err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7), + &device)) < 0) return err; chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { @@ -208,9 +212,13 @@ int snd_cs8427_create(snd_i2c_bus_t *bus, device->private_free = snd_cs8427_free; snd_i2c_lock(bus); - if ((err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER)) != CS8427_VER8427A) { + if ((err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER)) != + CS8427_VER8427A) { snd_i2c_unlock(bus); - snd_printk(KERN_ERR "unable to find CS8427 signature (expected 0x%x, read 0x%x), initialization is not completed\n", CS8427_VER8427A, err); + snd_printk(KERN_ERR "unable to find CS8427 signature " + "(expected 0x%x, read 0x%x),\n", + CS8427_VER8427A, err); + snd_printk(KERN_ERR " initialization is not completed\n"); return -EFAULT; } /* turn off run bit while making changes to configuration */ @@ -279,9 +287,9 @@ int snd_cs8427_create(snd_i2c_bus_t *bus, * put back AES3INPUT. This workaround is described in latest * CS8427 datasheet, otherwise TXDSERIAL will not work. */ -static void snd_cs8427_reset(snd_i2c_device_t *cs8427) +static void snd_cs8427_reset(struct snd_i2c_device *cs8427) { - cs8427_t *chip; + struct cs8427 *chip; unsigned long end_time; int data; @@ -289,10 +297,12 @@ static void snd_cs8427_reset(snd_i2c_device_t *cs8427) chip = cs8427->private_data; snd_i2c_lock(cs8427->bus); chip->regmap[CS8427_REG_CLOCKSOURCE] &= ~(CS8427_RUN | CS8427_RXDMASK); - snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, chip->regmap[CS8427_REG_CLOCKSOURCE]); + snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, + chip->regmap[CS8427_REG_CLOCKSOURCE]); udelay(200); chip->regmap[CS8427_REG_CLOCKSOURCE] |= CS8427_RUN | CS8427_RXDILRCK; - snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, chip->regmap[CS8427_REG_CLOCKSOURCE]); + snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, + chip->regmap[CS8427_REG_CLOCKSOURCE]); udelay(200); snd_i2c_unlock(cs8427->bus); end_time = jiffies + chip->reset_timeout; @@ -307,12 +317,13 @@ static void snd_cs8427_reset(snd_i2c_device_t *cs8427) snd_i2c_lock(cs8427->bus); chip->regmap[CS8427_REG_CLOCKSOURCE] &= ~CS8427_RXDMASK; chip->regmap[CS8427_REG_CLOCKSOURCE] |= CS8427_RXDAES3INPUT; - snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, chip->regmap[CS8427_REG_CLOCKSOURCE]); + snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, + chip->regmap[CS8427_REG_CLOCKSOURCE]); snd_i2c_unlock(cs8427->bus); } -static int snd_cs8427_in_status_info(snd_kcontrol_t *kcontrol, - snd_ctl_elem_info_t *uinfo) +static int snd_cs8427_in_status_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; uinfo->count = 1; @@ -321,10 +332,10 @@ static int snd_cs8427_in_status_info(snd_kcontrol_t *kcontrol, return 0; } -static int snd_cs8427_in_status_get(snd_kcontrol_t *kcontrol, - snd_ctl_elem_value_t *ucontrol) +static int snd_cs8427_in_status_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol); + struct snd_i2c_device *device = snd_kcontrol_chip(kcontrol); int data; snd_i2c_lock(device->bus); @@ -336,18 +347,18 @@ static int snd_cs8427_in_status_get(snd_kcontrol_t *kcontrol, return 0; } -static int snd_cs8427_qsubcode_info(snd_kcontrol_t *kcontrol, - snd_ctl_elem_info_t *uinfo) +static int snd_cs8427_qsubcode_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES; uinfo->count = 10; return 0; } -static int snd_cs8427_qsubcode_get(snd_kcontrol_t *kcontrol, - snd_ctl_elem_value_t *ucontrol) +static int snd_cs8427_qsubcode_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol); + struct snd_i2c_device *device = snd_kcontrol_chip(kcontrol); unsigned char reg = CS8427_REG_QSUBCODE; int err; @@ -366,18 +377,18 @@ static int snd_cs8427_qsubcode_get(snd_kcontrol_t *kcontrol, return 0; } -static int snd_cs8427_spdif_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_cs8427_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; uinfo->count = 1; return 0; } -static int snd_cs8427_spdif_get(snd_kcontrol_t * kcontrol, - snd_ctl_elem_value_t * ucontrol) +static int snd_cs8427_spdif_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol); - cs8427_t *chip = device->private_data; + struct snd_i2c_device *device = snd_kcontrol_chip(kcontrol); + struct cs8427 *chip = device->private_data; snd_i2c_lock(device->bus); memcpy(ucontrol->value.iec958.status, chip->playback.def_status, 24); @@ -385,13 +396,15 @@ static int snd_cs8427_spdif_get(snd_kcontrol_t * kcontrol, return 0; } -static int snd_cs8427_spdif_put(snd_kcontrol_t * kcontrol, - snd_ctl_elem_value_t * ucontrol) +static int snd_cs8427_spdif_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol); - cs8427_t *chip = device->private_data; - unsigned char *status = kcontrol->private_value ? chip->playback.pcm_status : chip->playback.def_status; - snd_pcm_runtime_t *runtime = chip->playback.substream ? chip->playback.substream->runtime : NULL; + struct snd_i2c_device *device = snd_kcontrol_chip(kcontrol); + struct cs8427 *chip = device->private_data; + unsigned char *status = kcontrol->private_value ? + chip->playback.pcm_status : chip->playback.def_status; + struct snd_pcm_runtime *runtime = chip->playback.substream ? + chip->playback.substream->runtime : NULL; int err, change; snd_i2c_lock(device->bus); @@ -406,21 +419,22 @@ static int snd_cs8427_spdif_put(snd_kcontrol_t * kcontrol, return change; } -static int snd_cs8427_spdif_mask_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_cs8427_spdif_mask_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; uinfo->count = 1; return 0; } -static int snd_cs8427_spdif_mask_get(snd_kcontrol_t * kcontrol, - snd_ctl_elem_value_t * ucontrol) +static int snd_cs8427_spdif_mask_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { memset(ucontrol->value.iec958.status, 0xff, 24); return 0; } -static snd_kcontrol_new_t snd_cs8427_iec958_controls[] = { +static struct snd_kcontrol_new snd_cs8427_iec958_controls[] = { { .iface = SNDRV_CTL_ELEM_IFACE_PCM, .info = snd_cs8427_in_status_info, @@ -469,12 +483,12 @@ static snd_kcontrol_new_t snd_cs8427_iec958_controls[] = { .get = snd_cs8427_qsubcode_get }}; -int snd_cs8427_iec958_build(snd_i2c_device_t *cs8427, - snd_pcm_substream_t *play_substream, - snd_pcm_substream_t *cap_substream) +int snd_cs8427_iec958_build(struct snd_i2c_device *cs8427, + struct snd_pcm_substream *play_substream, + struct snd_pcm_substream *cap_substream) { - cs8427_t *chip = cs8427->private_data; - snd_kcontrol_t *kctl; + struct cs8427 *chip = cs8427->private_data; + struct snd_kcontrol *kctl; unsigned int idx; int err; @@ -498,9 +512,9 @@ int snd_cs8427_iec958_build(snd_i2c_device_t *cs8427, return 0; } -int snd_cs8427_iec958_active(snd_i2c_device_t *cs8427, int active) +int snd_cs8427_iec958_active(struct snd_i2c_device *cs8427, int active) { - cs8427_t *chip; + struct cs8427 *chip; snd_assert(cs8427, return -ENXIO); chip = cs8427->private_data; @@ -512,9 +526,9 @@ int snd_cs8427_iec958_active(snd_i2c_device_t *cs8427, int active) return 0; } -int snd_cs8427_iec958_pcm(snd_i2c_device_t *cs8427, unsigned int rate) +int snd_cs8427_iec958_pcm(struct snd_i2c_device *cs8427, unsigned int rate) { - cs8427_t *chip; + struct cs8427 *chip; char *status; int err, reset; diff --git a/sound/i2c/i2c.c b/sound/i2c/i2c.c index e4e505b9d88..c4e1f2c23ce 100644 --- a/sound/i2c/i2c.c +++ b/sound/i2c/i2c.c @@ -32,20 +32,23 @@ MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); MODULE_DESCRIPTION("Generic i2c interface for ALSA"); MODULE_LICENSE("GPL"); -static int snd_i2c_bit_sendbytes(snd_i2c_device_t *device, unsigned char *bytes, int count); -static int snd_i2c_bit_readbytes(snd_i2c_device_t *device, unsigned char *bytes, int count); -static int snd_i2c_bit_probeaddr(snd_i2c_bus_t *bus, unsigned short addr); - -static snd_i2c_ops_t snd_i2c_bit_ops = { +static int snd_i2c_bit_sendbytes(struct snd_i2c_device *device, + unsigned char *bytes, int count); +static int snd_i2c_bit_readbytes(struct snd_i2c_device *device, + unsigned char *bytes, int count); +static int snd_i2c_bit_probeaddr(struct snd_i2c_bus *bus, + unsigned short addr); + +static struct snd_i2c_ops snd_i2c_bit_ops = { .sendbytes = snd_i2c_bit_sendbytes, .readbytes = snd_i2c_bit_readbytes, .probeaddr = snd_i2c_bit_probeaddr, }; -static int snd_i2c_bus_free(snd_i2c_bus_t *bus) +static int snd_i2c_bus_free(struct snd_i2c_bus *bus) { - snd_i2c_bus_t *slave; - snd_i2c_device_t *device; + struct snd_i2c_bus *slave; + struct snd_i2c_device *device; snd_assert(bus != NULL, return -EINVAL); while (!list_empty(&bus->devices)) { @@ -66,17 +69,18 @@ static int snd_i2c_bus_free(snd_i2c_bus_t *bus) return 0; } -static int snd_i2c_bus_dev_free(snd_device_t *device) +static int snd_i2c_bus_dev_free(struct snd_device *device) { - snd_i2c_bus_t *bus = device->device_data; + struct snd_i2c_bus *bus = device->device_data; return snd_i2c_bus_free(bus); } -int snd_i2c_bus_create(snd_card_t *card, const char *name, snd_i2c_bus_t *master, snd_i2c_bus_t **ri2c) +int snd_i2c_bus_create(struct snd_card *card, const char *name, + struct snd_i2c_bus *master, struct snd_i2c_bus **ri2c) { - snd_i2c_bus_t *bus; + struct snd_i2c_bus *bus; int err; - static snd_device_ops_t ops = { + static struct snd_device_ops ops = { .dev_free = snd_i2c_bus_dev_free, }; @@ -102,9 +106,10 @@ int snd_i2c_bus_create(snd_card_t *card, const char *name, snd_i2c_bus_t *master return 0; } -int snd_i2c_device_create(snd_i2c_bus_t *bus, const char *name, unsigned char addr, snd_i2c_device_t **rdevice) +int snd_i2c_device_create(struct snd_i2c_bus *bus, const char *name, + unsigned char addr, struct snd_i2c_device **rdevice) { - snd_i2c_device_t *device; + struct snd_i2c_device *device; *rdevice = NULL; snd_assert(bus != NULL, return -EINVAL); @@ -119,7 +124,7 @@ int snd_i2c_device_create(snd_i2c_bus_t *bus, const char *name, unsigned char ad return 0; } -int snd_i2c_device_free(snd_i2c_device_t *device) +int snd_i2c_device_free(struct snd_i2c_device *device) { if (device->bus) list_del(&device->list); @@ -129,18 +134,18 @@ int snd_i2c_device_free(snd_i2c_device_t *device) return 0; } -int snd_i2c_sendbytes(snd_i2c_device_t *device, unsigned char *bytes, int count) +int snd_i2c_sendbytes(struct snd_i2c_device *device, unsigned char *bytes, int count) { return device->bus->ops->sendbytes(device, bytes, count); } -int snd_i2c_readbytes(snd_i2c_device_t *device, unsigned char *bytes, int count) +int snd_i2c_readbytes(struct snd_i2c_device *device, unsigned char *bytes, int count) { return device->bus->ops->readbytes(device, bytes, count); } -int snd_i2c_probeaddr(snd_i2c_bus_t *bus, unsigned short addr) +int snd_i2c_probeaddr(struct snd_i2c_bus *bus, unsigned short addr) { return bus->ops->probeaddr(bus, addr); } @@ -149,31 +154,31 @@ int snd_i2c_probeaddr(snd_i2c_bus_t *bus, unsigned short addr) * bit-operations */ -static inline void snd_i2c_bit_hw_start(snd_i2c_bus_t *bus) +static inline void snd_i2c_bit_hw_start(struct snd_i2c_bus *bus) { if (bus->hw_ops.bit->start) bus->hw_ops.bit->start(bus); } -static inline void snd_i2c_bit_hw_stop(snd_i2c_bus_t *bus) +static inline void snd_i2c_bit_hw_stop(struct snd_i2c_bus *bus) { if (bus->hw_ops.bit->stop) bus->hw_ops.bit->stop(bus); } -static void snd_i2c_bit_direction(snd_i2c_bus_t *bus, int clock, int data) +static void snd_i2c_bit_direction(struct snd_i2c_bus *bus, int clock, int data) { if (bus->hw_ops.bit->direction) bus->hw_ops.bit->direction(bus, clock, data); } -static void snd_i2c_bit_set(snd_i2c_bus_t *bus, int clock, int data) +static void snd_i2c_bit_set(struct snd_i2c_bus *bus, int clock, int data) { bus->hw_ops.bit->setlines(bus, clock, data); } #if 0 -static int snd_i2c_bit_clock(snd_i2c_bus_t *bus) +static int snd_i2c_bit_clock(struct snd_i2c_bus *bus) { if (bus->hw_ops.bit->getclock) return bus->hw_ops.bit->getclock(bus); @@ -181,12 +186,12 @@ static int snd_i2c_bit_clock(snd_i2c_bus_t *bus) } #endif -static int snd_i2c_bit_data(snd_i2c_bus_t *bus, int ack) +static int snd_i2c_bit_data(struct snd_i2c_bus *bus, int ack) { return bus->hw_ops.bit->getdata(bus, ack); } -static void snd_i2c_bit_start(snd_i2c_bus_t *bus) +static void snd_i2c_bit_start(struct snd_i2c_bus *bus) { snd_i2c_bit_hw_start(bus); snd_i2c_bit_direction(bus, 1, 1); /* SCL - wr, SDA - wr */ @@ -195,7 +200,7 @@ static void snd_i2c_bit_start(snd_i2c_bus_t *bus) snd_i2c_bit_set(bus, 0, 0); } -static void snd_i2c_bit_stop(snd_i2c_bus_t *bus) +static void snd_i2c_bit_stop(struct snd_i2c_bus *bus) { snd_i2c_bit_set(bus, 0, 0); snd_i2c_bit_set(bus, 1, 0); @@ -203,14 +208,14 @@ static void snd_i2c_bit_stop(snd_i2c_bus_t *bus) snd_i2c_bit_hw_stop(bus); } -static void snd_i2c_bit_send(snd_i2c_bus_t *bus, int data) +static void snd_i2c_bit_send(struct snd_i2c_bus *bus, int data) { snd_i2c_bit_set(bus, 0, data); snd_i2c_bit_set(bus, 1, data); snd_i2c_bit_set(bus, 0, data); } -static int snd_i2c_bit_ack(snd_i2c_bus_t *bus) +static int snd_i2c_bit_ack(struct snd_i2c_bus *bus) { int ack; @@ -223,7 +228,7 @@ static int snd_i2c_bit_ack(snd_i2c_bus_t *bus) return ack ? -EIO : 0; } -static int snd_i2c_bit_sendbyte(snd_i2c_bus_t *bus, unsigned char data) +static int snd_i2c_bit_sendbyte(struct snd_i2c_bus *bus, unsigned char data) { int i, err; @@ -234,7 +239,7 @@ static int snd_i2c_bit_sendbyte(snd_i2c_bus_t *bus, unsigned char data) return 0; } -static int snd_i2c_bit_readbyte(snd_i2c_bus_t *bus, int last) +static int snd_i2c_bit_readbyte(struct snd_i2c_bus *bus, int last) { int i; unsigned char data = 0; @@ -252,9 +257,10 @@ static int snd_i2c_bit_readbyte(snd_i2c_bus_t *bus, int last) return data; } -static int snd_i2c_bit_sendbytes(snd_i2c_device_t *device, unsigned char *bytes, int count) +static int snd_i2c_bit_sendbytes(struct snd_i2c_device *device, + unsigned char *bytes, int count) { - snd_i2c_bus_t *bus = device->bus; + struct snd_i2c_bus *bus = device->bus; int err, res = 0; if (device->flags & SND_I2C_DEVICE_ADDRTEN) @@ -275,9 +281,10 @@ static int snd_i2c_bit_sendbytes(snd_i2c_device_t *device, unsigned char *bytes, return res; } -static int snd_i2c_bit_readbytes(snd_i2c_device_t *device, unsigned char *bytes, int count) +static int snd_i2c_bit_readbytes(struct snd_i2c_device *device, + unsigned char *bytes, int count) { - snd_i2c_bus_t *bus = device->bus; + struct snd_i2c_bus *bus = device->bus; int err, res = 0; if (device->flags & SND_I2C_DEVICE_ADDRTEN) @@ -299,7 +306,7 @@ static int snd_i2c_bit_readbytes(snd_i2c_device_t *device, unsigned char *bytes, return res; } -static int snd_i2c_bit_probeaddr(snd_i2c_bus_t *bus, unsigned short addr) +static int snd_i2c_bit_probeaddr(struct snd_i2c_bus *bus, unsigned short addr) { int err; diff --git a/sound/i2c/l3/uda1341.c b/sound/i2c/l3/uda1341.c index 103a7dcd0dd..746500e0695 100644 --- a/sound/i2c/l3/uda1341.c +++ b/sound/i2c/l3/uda1341.c @@ -17,7 +17,7 @@ * 2002-05-12 Tomas Kasparek another code cleanup */ -/* $Id: uda1341.c,v 1.16 2005/09/09 13:22:34 tiwai Exp $ */ +/* $Id: uda1341.c,v 1.18 2005/11/17 14:17:21 tiwai Exp $ */ #include <sound/driver.h> #include <linux/module.h> @@ -56,6 +56,33 @@ /* }}} */ + +static const char *peak_names[] = { + "before", + "after", +}; + +static const char *filter_names[] = { + "flat", + "min", + "min", + "max", +}; + +static const char *mixer_names[] = { + "double differential", + "input channel 1 (line in)", + "input channel 2 (microphone)", + "digital mixer", +}; + +static const char *deemp_names[] = { + "none", + "32 kHz", + "44.1 kHz", + "48 kHz", +}; + enum uda1341_regs_names { stat0, stat1, @@ -73,7 +100,7 @@ enum uda1341_regs_names { uda1341_reg_last, }; -const char *uda1341_reg_names[] = { +static const char *uda1341_reg_names[] = { "stat 0 ", "stat 1 ", "data 00", @@ -89,7 +116,7 @@ const char *uda1341_reg_names[] = { "ext 6", }; -const int uda1341_enum_items[] = { +static const int uda1341_enum_items[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, //peak - before/after 4, //deemp - none/32/44.1/48 @@ -100,7 +127,7 @@ const int uda1341_enum_items[] = { 0, 0, 0, 0, 0, }; -const char ** uda1341_enum_names[] = { +static const char ** uda1341_enum_names[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, peak_names, //peak - before/after deemp_names, //deemp - none/32/44.1/48 @@ -113,15 +140,13 @@ const char ** uda1341_enum_names[] = { typedef int uda1341_cfg[CMD_LAST]; -typedef struct uda1341 uda1341_t; - struct uda1341 { int (*write) (struct l3_client *uda1341, unsigned short reg, unsigned short val); int (*read) (struct l3_client *uda1341, unsigned short reg); unsigned char regs[uda1341_reg_last]; int active; spinlock_t reg_lock; - snd_card_t *card; + struct snd_card *card; uda1341_cfg cfg; #ifdef CONFIG_PM unsigned char suspend_regs[uda1341_reg_last]; @@ -129,11 +154,9 @@ struct uda1341 { #endif }; -//hack for ALSA magic casting -typedef struct l3_client l3_client_t; - /* transfer 8bit integer into string with binary representation */ -void int2str_bin8(uint8_t val, char *buf){ +static void int2str_bin8(uint8_t val, char *buf) +{ const int size = sizeof(val) * 8; int i; @@ -146,7 +169,7 @@ void int2str_bin8(uint8_t val, char *buf){ /* {{{ HW manipulation routines */ -int snd_uda1341_codec_write(struct l3_client *clnt, unsigned short reg, unsigned short val) +static int snd_uda1341_codec_write(struct l3_client *clnt, unsigned short reg, unsigned short val) { struct uda1341 *uda = clnt->driver_data; unsigned char buf[2] = { 0xc0, 0xe0 }; // for EXT addressing @@ -171,7 +194,7 @@ int snd_uda1341_codec_write(struct l3_client *clnt, unsigned short reg, unsigned return err; } -int snd_uda1341_codec_read(struct l3_client *clnt, unsigned short reg) +static int snd_uda1341_codec_read(struct l3_client *clnt, unsigned short reg) { unsigned char val; int err; @@ -188,8 +211,9 @@ static inline int snd_uda1341_valid_reg(struct l3_client *clnt, unsigned short r return reg < uda1341_reg_last; } -int snd_uda1341_update_bits(struct l3_client *clnt, unsigned short reg, unsigned short mask, - unsigned short shift, unsigned short value, int flush) +static int snd_uda1341_update_bits(struct l3_client *clnt, unsigned short reg, + unsigned short mask, unsigned short shift, + unsigned short value, int flush) { int change; unsigned short old, new; @@ -214,8 +238,8 @@ int snd_uda1341_update_bits(struct l3_client *clnt, unsigned short reg, unsigned return change; } -int snd_uda1341_cfg_write(struct l3_client *clnt, unsigned short what, - unsigned short value, int flush) +static int snd_uda1341_cfg_write(struct l3_client *clnt, unsigned short what, + unsigned short value, int flush) { struct uda1341 *uda = clnt->driver_data; int ret = 0; @@ -327,9 +351,84 @@ int snd_uda1341_cfg_write(struct l3_client *clnt, unsigned short what, /* }}} */ /* {{{ Proc interface */ +#ifdef CONFIG_PROC_FS + +static const char *format_names[] = { + "I2S-bus", + "LSB 16bits", + "LSB 18bits", + "LSB 20bits", + "MSB", + "in LSB 16bits/out MSB", + "in LSB 18bits/out MSB", + "in LSB 20bits/out MSB", +}; + +static const char *fs_names[] = { + "512*fs", + "384*fs", + "256*fs", + "Unused - bad value!", +}; + +static const char* bass_values[][16] = { + {"0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", "0 dB", + "0 dB", "0 dB", "0 dB", "0 dB", "undefined", }, //flat + {"0 dB", "2 dB", "4 dB", "6 dB", "8 dB", "10 dB", "12 dB", "14 dB", "16 dB", "18 dB", "18 dB", + "18 dB", "18 dB", "18 dB", "18 dB", "undefined",}, // min + {"0 dB", "2 dB", "4 dB", "6 dB", "8 dB", "10 dB", "12 dB", "14 dB", "16 dB", "18 dB", "18 dB", + "18 dB", "18 dB", "18 dB", "18 dB", "undefined",}, // min + {"0 dB", "2 dB", "4 dB", "6 dB", "8 dB", "10 dB", "12 dB", "14 dB", "16 dB", "18 dB", "20 dB", + "22 dB", "24 dB", "24 dB", "24 dB", "undefined",}, // max +}; + +static const char *mic_sens_value[] = { + "-3 dB", "0 dB", "3 dB", "9 dB", "15 dB", "21 dB", "27 dB", "not used", +}; + +static const unsigned short AGC_atime[] = { + 11, 16, 11, 16, 21, 11, 16, 21, +}; + +static const unsigned short AGC_dtime[] = { + 100, 100, 200, 200, 200, 400, 400, 400, +}; -static void snd_uda1341_proc_read(snd_info_entry_t *entry, - snd_info_buffer_t * buffer) +static const char *AGC_level[] = { + "-9.0", "-11.5", "-15.0", "-17.5", +}; + +static const char *ig_small_value[] = { + "-3.0", "-2.5", "-2.0", "-1.5", "-1.0", "-0.5", +}; + +/* + * this was computed as peak_value[i] = pow((63-i)*1.42,1.013) + * + * UDA1341 datasheet on page 21: Peak value (dB) = (Peak level - 63.5)*5*log2 + * There is an table with these values [level]=value: [3]=-90.31, [7]=-84.29 + * [61]=-2.78, [62] = -1.48, [63] = 0.0 + * I tried to compute it, but using but even using logarithm with base either 10 or 2 + * i was'n able to get values in the table from the formula. So I constructed another + * formula (see above) to interpolate the values as good as possible. If there is some + * mistake, please contact me on tomas.kasparek@seznam.cz. Thanks. + * UDA1341TS datasheet is available at: + * http://www-us9.semiconductors.com/acrobat/datasheets/UDA1341TS_3.pdf + */ +static const char *peak_value[] = { + "-INF dB", "N.A.", "N.A", "90.31 dB", "N.A.", "N.A.", "N.A.", "-84.29 dB", + "-82.65 dB", "-81.13 dB", "-79.61 dB", "-78.09 dB", "-76.57 dB", "-75.05 dB", "-73.53 dB", + "-72.01 dB", "-70.49 dB", "-68.97 dB", "-67.45 dB", "-65.93 dB", "-64.41 dB", "-62.90 dB", + "-61.38 dB", "-59.86 dB", "-58.35 dB", "-56.83 dB", "-55.32 dB", "-53.80 dB", "-52.29 dB", + "-50.78 dB", "-49.26 dB", "-47.75 dB", "-46.24 dB", "-44.73 dB", "-43.22 dB", "-41.71 dB", + "-40.20 dB", "-38.69 dB", "-37.19 dB", "-35.68 dB", "-34.17 dB", "-32.67 dB", "-31.17 dB", + "-29.66 dB", "-28.16 dB", "-26.66 dB", "-25.16 dB", "-23.66 dB", "-22.16 dB", "-20.67 dB", + "-19.17 dB", "-17.68 dB", "-16.19 dB", "-14.70 dB", "-13.21 dB", "-11.72 dB", "-10.24 dB", + "-8.76 dB", "-7.28 dB", "-5.81 dB", "-4.34 dB", "-2.88 dB", "-1.43 dB", "0.00 dB", +}; + +static void snd_uda1341_proc_read(struct snd_info_entry *entry, + struct snd_info_buffer *buffer) { struct l3_client *clnt = entry->private_data; struct uda1341 *uda = clnt->driver_data; @@ -393,15 +492,14 @@ static void snd_uda1341_proc_read(snd_info_entry_t *entry, snd_iprintf(buffer, "Input Amp. Gain ch 2: %s dB\n", ig_small_value[uda->cfg[CMD_IG]]); } -static void snd_uda1341_proc_regs_read(snd_info_entry_t *entry, - snd_info_buffer_t * buffer) +static void snd_uda1341_proc_regs_read(struct snd_info_entry *entry, + struct snd_info_buffer *buffer) { struct l3_client *clnt = entry->private_data; struct uda1341 *uda = clnt->driver_data; int reg; char buf[12]; - spin_lock(&uda->reg_lock); for (reg = 0; reg < uda1341_reg_last; reg ++) { if (reg == empty) continue; @@ -411,13 +509,12 @@ static void snd_uda1341_proc_regs_read(snd_info_entry_t *entry, int2str_bin8(snd_uda1341_codec_read(clnt, UDA1341_DATA1), buf); snd_iprintf(buffer, "DATA1 = %s\n", buf); - - spin_unlock(&uda->reg_lock); } +#endif /* CONFIG_PROC_FS */ -static void __devinit snd_uda1341_proc_init(snd_card_t *card, struct l3_client *clnt) +static void __devinit snd_uda1341_proc_init(struct snd_card *card, struct l3_client *clnt) { - snd_info_entry_t *entry; + struct snd_info_entry *entry; if (! snd_card_proc_new(card, "uda1341", &entry)) snd_info_set_text_ops(entry, clnt, 1024, snd_uda1341_proc_read); @@ -437,7 +534,8 @@ static void __devinit snd_uda1341_proc_init(snd_card_t *card, struct l3_client * .private_value = where | (reg << 5) | (shift << 9) | (mask << 12) | (invert << 18) \ } -static int snd_uda1341_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_uda1341_info_single(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { int mask = (kcontrol->private_value >> 12) & 63; @@ -448,10 +546,11 @@ static int snd_uda1341_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t return 0; } -static int snd_uda1341_get_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_uda1341_get_single(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { struct l3_client *clnt = snd_kcontrol_chip(kcontrol); - uda1341_t *uda = clnt->driver_data; + struct uda1341 *uda = clnt->driver_data; int where = kcontrol->private_value & 31; int mask = (kcontrol->private_value >> 12) & 63; int invert = (kcontrol->private_value >> 18) & 1; @@ -463,10 +562,11 @@ static int snd_uda1341_get_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_ return 0; } -static int snd_uda1341_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_uda1341_put_single(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { struct l3_client *clnt = snd_kcontrol_chip(kcontrol); - uda1341_t *uda = clnt->driver_data; + struct uda1341 *uda = clnt->driver_data; int where = kcontrol->private_value & 31; int reg = (kcontrol->private_value >> 5) & 15; int shift = (kcontrol->private_value >> 9) & 7; @@ -492,7 +592,8 @@ static int snd_uda1341_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_ .private_value = where | (reg << 5) | (shift << 9) | (mask << 12) | (invert << 18) \ } -static int snd_uda1341_info_enum(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_uda1341_info_enum(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { int where = kcontrol->private_value & 31; const char **texts; @@ -513,20 +614,22 @@ static int snd_uda1341_info_enum(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * return 0; } -static int snd_uda1341_get_enum(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_uda1341_get_enum(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { struct l3_client *clnt = snd_kcontrol_chip(kcontrol); - uda1341_t *uda = clnt->driver_data; + struct uda1341 *uda = clnt->driver_data; int where = kcontrol->private_value & 31; ucontrol->value.enumerated.item[0] = uda->cfg[where]; return 0; } -static int snd_uda1341_put_enum(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_uda1341_put_enum(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { struct l3_client *clnt = snd_kcontrol_chip(kcontrol); - uda1341_t *uda = clnt->driver_data; + struct uda1341 *uda = clnt->driver_data; int where = kcontrol->private_value & 31; int reg = (kcontrol->private_value >> 5) & 15; int shift = (kcontrol->private_value >> 9) & 7; @@ -549,7 +652,8 @@ static int snd_uda1341_put_enum(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t } -static int snd_uda1341_info_2regs(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_uda1341_info_2regs(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { int mask_1 = (kcontrol->private_value >> 19) & 63; int mask_2 = (kcontrol->private_value >> 25) & 63; @@ -563,10 +667,11 @@ static int snd_uda1341_info_2regs(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t return 0; } -static int snd_uda1341_get_2regs(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_uda1341_get_2regs(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { struct l3_client *clnt = snd_kcontrol_chip(kcontrol); - uda1341_t *uda = clnt->driver_data; + struct uda1341 *uda = clnt->driver_data; int where = kcontrol->private_value & 31; int mask_1 = (kcontrol->private_value >> 1 |