Merge branch 'fix/misc' into topic/misc
This commit is contained in:
commit
d2b88e4c10
|
@ -420,7 +420,7 @@ static int __devinit atmel_abdac_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(pclk);
|
||||
}
|
||||
sample_clk = clk_get(&pdev->dev, "sample_clk");
|
||||
if (IS_ERR(pclk)) {
|
||||
if (IS_ERR(sample_clk)) {
|
||||
dev_dbg(&pdev->dev, "no sample clock\n");
|
||||
retval = PTR_ERR(pclk);
|
||||
goto out_put_pclk;
|
||||
|
|
|
@ -223,7 +223,7 @@ static void xrun_log(struct snd_pcm_substream *substream,
|
|||
entry->jiffies = jiffies;
|
||||
entry->pos = pos;
|
||||
entry->period_size = runtime->period_size;
|
||||
entry->buffer_size = runtime->buffer_size;;
|
||||
entry->buffer_size = runtime->buffer_size;
|
||||
entry->old_hw_ptr = runtime->status->hw_ptr;
|
||||
entry->hw_ptr_base = runtime->hw_ptr_base;
|
||||
log->idx = (log->idx + 1) % XRUN_LOG_CNT;
|
||||
|
|
|
@ -71,7 +71,7 @@ int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
|
|||
if (sound_nblocks >= MAX_MEM_BLOCKS)
|
||||
sound_nblocks = MAX_MEM_BLOCKS - 1;
|
||||
|
||||
op = (struct audio_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct audio_operations)));
|
||||
op = (struct audio_operations *) (sound_mem_blocks[sound_nblocks] = vzalloc(sizeof(struct audio_operations)));
|
||||
sound_nblocks++;
|
||||
if (sound_nblocks >= MAX_MEM_BLOCKS)
|
||||
sound_nblocks = MAX_MEM_BLOCKS - 1;
|
||||
|
@ -81,7 +81,6 @@ int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver,
|
|||
sound_unload_audiodev(num);
|
||||
return -(ENOMEM);
|
||||
}
|
||||
memset((char *) op, 0, sizeof(struct audio_operations));
|
||||
init_waitqueue_head(&op->in_sleeper);
|
||||
init_waitqueue_head(&op->out_sleeper);
|
||||
init_waitqueue_head(&op->poll_sleeper);
|
||||
|
@ -128,7 +127,7 @@ int sound_install_mixer(int vers, char *name, struct mixer_operations *driver,
|
|||
/* FIXME: This leaks a mixer_operations struct every time its called
|
||||
until you unload sound! */
|
||||
|
||||
op = (struct mixer_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct mixer_operations)));
|
||||
op = (struct mixer_operations *) (sound_mem_blocks[sound_nblocks] = vzalloc(sizeof(struct mixer_operations)));
|
||||
sound_nblocks++;
|
||||
if (sound_nblocks >= MAX_MEM_BLOCKS)
|
||||
sound_nblocks = MAX_MEM_BLOCKS - 1;
|
||||
|
@ -137,7 +136,6 @@ int sound_install_mixer(int vers, char *name, struct mixer_operations *driver,
|
|||
printk(KERN_ERR "Sound: Can't allocate mixer driver for (%s)\n", name);
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset((char *) op, 0, sizeof(struct mixer_operations));
|
||||
memcpy((char *) op, (char *) driver, driver_size);
|
||||
|
||||
strlcpy(op->name, name, sizeof(op->name));
|
||||
|
|
|
@ -178,7 +178,7 @@ int MIDIbuf_open(int dev, struct file *file)
|
|||
return err;
|
||||
|
||||
parms[dev].prech_timeout = MAX_SCHEDULE_TIMEOUT;
|
||||
midi_in_buf[dev] = (struct midi_buf *) vmalloc(sizeof(struct midi_buf));
|
||||
midi_in_buf[dev] = vmalloc(sizeof(struct midi_buf));
|
||||
|
||||
if (midi_in_buf[dev] == NULL)
|
||||
{
|
||||
|
@ -188,7 +188,7 @@ int MIDIbuf_open(int dev, struct file *file)
|
|||
}
|
||||
midi_in_buf[dev]->len = midi_in_buf[dev]->head = midi_in_buf[dev]->tail = 0;
|
||||
|
||||
midi_out_buf[dev] = (struct midi_buf *) vmalloc(sizeof(struct midi_buf));
|
||||
midi_out_buf[dev] = vmalloc(sizeof(struct midi_buf));
|
||||
|
||||
if (midi_out_buf[dev] == NULL)
|
||||
{
|
||||
|
|
|
@ -859,7 +859,7 @@ static int pss_coproc_ioctl(void *dev_info, unsigned int cmd, void __user *arg,
|
|||
return 0;
|
||||
|
||||
case SNDCTL_COPR_LOAD:
|
||||
buf = (copr_buffer *) vmalloc(sizeof(copr_buffer));
|
||||
buf = vmalloc(sizeof(copr_buffer));
|
||||
if (buf == NULL)
|
||||
return -ENOSPC;
|
||||
if (copy_from_user(buf, arg, sizeof(copr_buffer))) {
|
||||
|
@ -871,7 +871,7 @@ static int pss_coproc_ioctl(void *dev_info, unsigned int cmd, void __user *arg,
|
|||
return err;
|
||||
|
||||
case SNDCTL_COPR_SENDMSG:
|
||||
mbuf = (copr_msg *)vmalloc(sizeof(copr_msg));
|
||||
mbuf = vmalloc(sizeof(copr_msg));
|
||||
if (mbuf == NULL)
|
||||
return -ENOSPC;
|
||||
if (copy_from_user(mbuf, arg, sizeof(copr_msg))) {
|
||||
|
@ -895,7 +895,7 @@ static int pss_coproc_ioctl(void *dev_info, unsigned int cmd, void __user *arg,
|
|||
|
||||
case SNDCTL_COPR_RCVMSG:
|
||||
err = 0;
|
||||
mbuf = (copr_msg *)vmalloc(sizeof(copr_msg));
|
||||
mbuf = vmalloc(sizeof(copr_msg));
|
||||
if (mbuf == NULL)
|
||||
return -ENOSPC;
|
||||
data = (unsigned short *)mbuf->data;
|
||||
|
|
|
@ -1646,13 +1646,13 @@ void sequencer_init(void)
|
|||
{
|
||||
if (sequencer_ok)
|
||||
return;
|
||||
queue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * EV_SZ);
|
||||
queue = vmalloc(SEQ_MAX_QUEUE * EV_SZ);
|
||||
if (queue == NULL)
|
||||
{
|
||||
printk(KERN_ERR "sequencer: Can't allocate memory for sequencer output queue\n");
|
||||
return;
|
||||
}
|
||||
iqueue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * IEV_SZ);
|
||||
iqueue = vmalloc(SEQ_MAX_QUEUE * IEV_SZ);
|
||||
if (iqueue == NULL)
|
||||
{
|
||||
printk(KERN_ERR "sequencer: Can't allocate memory for sequencer input queue\n");
|
||||
|
|
|
@ -435,7 +435,7 @@ void __devexit asihpi_adapter_remove(struct pci_dev *pci_dev)
|
|||
struct hpi_message hm;
|
||||
struct hpi_response hr;
|
||||
struct hpi_adapter *pa;
|
||||
pa = (struct hpi_adapter *)pci_get_drvdata(pci_dev);
|
||||
pa = pci_get_drvdata(pci_dev);
|
||||
|
||||
hpi_init_message_response(&hm, &hr, HPI_OBJ_SUBSYSTEM,
|
||||
HPI_SUBSYS_DELETE_ADAPTER);
|
||||
|
|
|
@ -1129,10 +1129,11 @@ snd_azf3328_codec_setdmaa(struct snd_azf3328 *chip,
|
|||
|
||||
count_areas = size/2;
|
||||
addr_area2 = addr+count_areas;
|
||||
count_areas--; /* max. index */
|
||||
snd_azf3328_dbgcodec("setdma: buffers %08lx[%u] / %08lx[%u]\n",
|
||||
addr, count_areas, addr_area2, count_areas);
|
||||
|
||||
count_areas--; /* max. index */
|
||||
|
||||
/* build combined I/O buffer length word */
|
||||
lengths = (count_areas << 16) | (count_areas);
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
|
@ -1740,11 +1741,15 @@ static const struct snd_pcm_hardware snd_azf3328_hardware =
|
|||
.rate_max = AZF_FREQ_66200,
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.buffer_bytes_max = 65536,
|
||||
.period_bytes_min = 64,
|
||||
.period_bytes_max = 65536,
|
||||
.periods_min = 1,
|
||||
.periods_max = 1024,
|
||||
.buffer_bytes_max = (64*1024),
|
||||
.period_bytes_min = 1024,
|
||||
.period_bytes_max = (32*1024),
|
||||
/* We simply have two DMA areas (instead of a list of descriptors
|
||||
such as other cards); I believe that this is a fixed hardware
|
||||
attribute and there isn't much driver magic to be done to expand it.
|
||||
Thus indicate that we have at least and at most 2 periods. */
|
||||
.periods_min = 2,
|
||||
.periods_max = 2,
|
||||
/* FIXME: maybe that card actually has a FIFO?
|
||||
* Hmm, it seems newer revisions do have one, but we still don't know
|
||||
* its size... */
|
||||
|
@ -1980,8 +1985,13 @@ snd_azf3328_timer_stop(struct snd_timer *timer)
|
|||
chip = snd_timer_chip(timer);
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
/* disable timer countdown and interrupt */
|
||||
/* FIXME: should we write TIMER_IRQ_ACK here? */
|
||||
snd_azf3328_ctrl_outb(chip, IDX_IO_TIMER_VALUE + 3, 0);
|
||||
/* Hmm, should we write TIMER_IRQ_ACK here?
|
||||
YES indeed, otherwise a rogue timer operation - which prompts
|
||||
ALSA(?) to call repeated stop() in vain, but NOT start() -
|
||||
will never end (value 0x03 is kept shown in control byte).
|
||||
Simply manually poking 0x04 _once_ immediately successfully stops
|
||||
the hardware/ALSA interrupt activity. */
|
||||
snd_azf3328_ctrl_outb(chip, IDX_IO_TIMER_VALUE + 3, 0x04);
|
||||
spin_unlock_irqrestore(&chip->reg_lock, flags);
|
||||
snd_azf3328_dbgcallleave();
|
||||
return 0;
|
||||
|
|
|
@ -129,8 +129,6 @@ static int ct_pcm_playback_open(struct snd_pcm_substream *substream)
|
|||
|
||||
apcm->substream = substream;
|
||||
apcm->interrupt = ct_atc_pcm_interrupt;
|
||||
runtime->private_data = apcm;
|
||||
runtime->private_free = ct_atc_pcm_free_substream;
|
||||
if (IEC958 == substream->pcm->device) {
|
||||
runtime->hw = ct_spdif_passthru_playback_hw;
|
||||
atc->spdif_out_passthru(atc, 1);
|
||||
|
@ -155,8 +153,12 @@ static int ct_pcm_playback_open(struct snd_pcm_substream *substream)
|
|||
}
|
||||
|
||||
apcm->timer = ct_timer_instance_new(atc->timer, apcm);
|
||||
if (!apcm->timer)
|
||||
if (!apcm->timer) {
|
||||
kfree(apcm);
|
||||
return -ENOMEM;
|
||||
}
|
||||
runtime->private_data = apcm;
|
||||
runtime->private_free = ct_atc_pcm_free_substream;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -278,8 +280,6 @@ static int ct_pcm_capture_open(struct snd_pcm_substream *substream)
|
|||
apcm->started = 0;
|
||||
apcm->substream = substream;
|
||||
apcm->interrupt = ct_atc_pcm_interrupt;
|
||||
runtime->private_data = apcm;
|
||||
runtime->private_free = ct_atc_pcm_free_substream;
|
||||
runtime->hw = ct_pcm_capture_hw;
|
||||
runtime->hw.rate_max = atc->rsr * atc->msr;
|
||||
|
||||
|
@ -298,8 +298,12 @@ static int ct_pcm_capture_open(struct snd_pcm_substream *substream)
|
|||
}
|
||||
|
||||
apcm->timer = ct_timer_instance_new(atc->timer, apcm);
|
||||
if (!apcm->timer)
|
||||
if (!apcm->timer) {
|
||||
kfree(apcm);
|
||||
return -ENOMEM;
|
||||
}
|
||||
runtime->private_data = apcm;
|
||||
runtime->private_free = ct_atc_pcm_free_substream;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -3100,6 +3100,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO),
|
||||
SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD),
|
||||
SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP),
|
||||
SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_HP_LAPTOP),
|
||||
SND_PCI_QUIRK(0x1179, 0xff1e, "Toshiba Satellite C650D", CXT5066_IDEAPAD),
|
||||
SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5),
|
||||
SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5),
|
||||
|
|
|
@ -10816,6 +10816,9 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec,
|
||||
const struct auto_pin_cfg *cfg);
|
||||
|
||||
/* almost identical with ALC880 parser... */
|
||||
static int alc882_parse_auto_config(struct hda_codec *codec)
|
||||
{
|
||||
|
@ -10833,7 +10836,10 @@ static int alc882_parse_auto_config(struct hda_codec *codec)
|
|||
err = alc880_auto_fill_dac_nids(spec, &spec->autocfg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg);
|
||||
if (codec->vendor_id == 0x10ec0887)
|
||||
err = alc861vd_auto_create_multi_out_ctls(spec, &spec->autocfg);
|
||||
else
|
||||
err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = alc880_auto_create_extra_out(spec, spec->autocfg.hp_pins[0],
|
||||
|
@ -16963,7 +16969,7 @@ static void alc861vd_auto_init_analog_input(struct hda_codec *codec)
|
|||
#define alc861vd_idx_to_mixer_switch(nid) ((nid) + 0x0c)
|
||||
|
||||
/* add playback controls from the parsed DAC table */
|
||||
/* Based on ALC880 version. But ALC861VD has separate,
|
||||
/* Based on ALC880 version. But ALC861VD and ALC887 have separate,
|
||||
* different NIDs for mute/unmute switch and volume control */
|
||||
static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec,
|
||||
const struct auto_pin_cfg *cfg)
|
||||
|
@ -19298,6 +19304,7 @@ static const struct alc_fixup alc662_fixups[] = {
|
|||
|
||||
static struct snd_pci_quirk alc662_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
|
||||
SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
|
||||
{}
|
||||
|
|
|
@ -389,6 +389,11 @@ static hda_nid_t stac92hd83xxx_dmic_nids[STAC92HD83XXX_NUM_DMICS + 1] = {
|
|||
0x11, 0x20, 0
|
||||
};
|
||||
|
||||
#define STAC92HD87B_NUM_DMICS 1
|
||||
static hda_nid_t stac92hd87b_dmic_nids[STAC92HD87B_NUM_DMICS + 1] = {
|
||||
0x11, 0
|
||||
};
|
||||
|
||||
#define STAC92HD83XXX_NUM_CAPS 2
|
||||
static unsigned long stac92hd83xxx_capvols[] = {
|
||||
HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_OUTPUT),
|
||||
|
@ -5452,12 +5457,17 @@ again:
|
|||
stac92hd83xxx_brd_tbl[spec->board_config]);
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x111d76d1:
|
||||
case 0x111d76d9:
|
||||
spec->dmic_nids = stac92hd87b_dmic_nids;
|
||||
spec->num_dmics = stac92xx_connected_ports(codec,
|
||||
stac92hd87b_dmic_nids,
|
||||
STAC92HD87B_NUM_DMICS);
|
||||
/* Fall through */
|
||||
case 0x111d7666:
|
||||
case 0x111d7667:
|
||||
case 0x111d7668:
|
||||
case 0x111d7669:
|
||||
case 0x111d76d1:
|
||||
case 0x111d76d9:
|
||||
spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids);
|
||||
spec->pin_nids = stac92hd88xxx_pin_nids;
|
||||
spec->mono_nid = 0;
|
||||
|
|
|
@ -1864,6 +1864,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
|
|||
.name = "Dell Inspiron 8600", /* STAC9750/51 */
|
||||
.type = AC97_TUNE_HP_ONLY
|
||||
},
|
||||
{
|
||||
.subvendor = 0x1028,
|
||||
.subdevice = 0x0182,
|
||||
.name = "Dell Latitude D610", /* STAC9750/51 */
|
||||
.type = AC97_TUNE_HP_ONLY
|
||||
},
|
||||
{
|
||||
.subvendor = 0x1028,
|
||||
.subdevice = 0x0186,
|
||||
|
|
|
@ -25,11 +25,21 @@
|
|||
|
||||
#include <sound/hwdep.h>
|
||||
|
||||
#ifndef readl_be
|
||||
#define readl_be(x) be32_to_cpu(__raw_readl(x))
|
||||
#define writel_be(data,addr) __raw_writel(cpu_to_be32(data),addr)
|
||||
#endif
|
||||
|
||||
#ifndef writel_be
|
||||
#define writel_be(data,addr) __raw_writel(cpu_to_be32(data),addr)
|
||||
#endif
|
||||
|
||||
#ifndef readl_le
|
||||
#define readl_le(x) le32_to_cpu(__raw_readl(x))
|
||||
#endif
|
||||
|
||||
#ifndef writel_le
|
||||
#define writel_le(data,addr) __raw_writel(cpu_to_le32(data),addr)
|
||||
#endif
|
||||
|
||||
#define MIXART_MEM(mgr,x) ((mgr)->mem[0].virt + (x))
|
||||
#define MIXART_REG(mgr,x) ((mgr)->mem[1].virt + (x))
|
||||
|
|
|
@ -1228,10 +1228,8 @@ int __devinit snd_pmac_new(struct snd_card *card, struct snd_pmac **chip_return)
|
|||
chip->rsrc[i].start + 1,
|
||||
rnames[i]) == NULL) {
|
||||
printk(KERN_ERR "snd: can't request rsrc "
|
||||
" %d (%s: 0x%016llx:%016llx)\n",
|
||||
i, rnames[i],
|
||||
(unsigned long long)chip->rsrc[i].start,
|
||||
(unsigned long long)chip->rsrc[i].end);
|
||||
" %d (%s: %pR)\n",
|
||||
i, rnames[i], &chip->rsrc[i]);
|
||||
err = -ENODEV;
|
||||
goto __error;
|
||||
}
|
||||
|
@ -1256,10 +1254,8 @@ int __devinit snd_pmac_new(struct snd_card *card, struct snd_pmac **chip_return)
|
|||
chip->rsrc[i].start + 1,
|
||||
rnames[i]) == NULL) {
|
||||
printk(KERN_ERR "snd: can't request rsrc "
|
||||
" %d (%s: 0x%016llx:%016llx)\n",
|
||||
i, rnames[i],
|
||||
(unsigned long long)chip->rsrc[i].start,
|
||||
(unsigned long long)chip->rsrc[i].end);
|
||||
" %d (%s: %pR)\n",
|
||||
i, rnames[i], &chip->rsrc[i]);
|
||||
err = -ENODEV;
|
||||
goto __error;
|
||||
}
|
||||
|
|
|
@ -25,8 +25,9 @@ config SND_SOC_ALL_CODECS
|
|||
select SND_SOC_CQ0093VC if MFD_DAVINCI_VOICECODEC
|
||||
select SND_SOC_CS42L51 if I2C
|
||||
select SND_SOC_CS4270 if I2C
|
||||
select SND_SOC_CX20442
|
||||
select SND_SOC_DA7210 if I2C
|
||||
select SND_SOC_JZ4740 if SOC_JZ4740
|
||||
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
|
||||
select SND_SOC_MAX98088 if I2C
|
||||
select SND_SOC_MAX9877 if I2C
|
||||
select SND_SOC_PCM3008
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
(1000000000 / ((rate * 1000) / samples))
|
||||
|
||||
#define US_TO_SAMPLES(rate, us) \
|
||||
(rate / (1000000 / us))
|
||||
(rate / (1000000 / (us < 1000000 ? us : 1000000)))
|
||||
|
||||
#define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
|
||||
((samples * 5000) / ((burstrate * 5000) / (burstrate - playrate)))
|
||||
|
@ -200,7 +200,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||
u8 *value)
|
||||
{
|
||||
struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
|
||||
int val;
|
||||
int val, ret = 0;
|
||||
|
||||
*value = reg & 0xff;
|
||||
|
||||
|
@ -210,6 +210,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||
if (val < 0) {
|
||||
dev_err(codec->dev, "Read failed (%d)\n", val);
|
||||
value[0] = dac33_read_reg_cache(codec, reg);
|
||||
ret = val;
|
||||
} else {
|
||||
value[0] = val;
|
||||
dac33_write_reg_cache(codec, reg, val);
|
||||
|
@ -218,7 +219,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||
value[0] = dac33_read_reg_cache(codec, reg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dac33_write(struct snd_soc_codec *codec, unsigned int reg,
|
||||
|
@ -329,13 +330,18 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
|
|||
dac33_read_reg_cache(codec, DAC33_LINER_TO_RLO_VOL));
|
||||
}
|
||||
|
||||
static inline void dac33_read_id(struct snd_soc_codec *codec)
|
||||
static inline int dac33_read_id(struct snd_soc_codec *codec)
|
||||
{
|
||||
int i, ret = 0;
|
||||
u8 reg;
|
||||
|
||||
dac33_read(codec, DAC33_DEVICE_ID_MSB, ®);
|
||||
dac33_read(codec, DAC33_DEVICE_ID_LSB, ®);
|
||||
dac33_read(codec, DAC33_DEVICE_REV_ID, ®);
|
||||
for (i = 0; i < 3; i++) {
|
||||
ret = dac33_read(codec, DAC33_DEVICE_ID_MSB + i, ®);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void dac33_soft_power(struct snd_soc_codec *codec, int power)
|
||||
|
@ -1076,6 +1082,9 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||
/* Number of samples under i2c latency */
|
||||
dac33->alarm_threshold = US_TO_SAMPLES(rate,
|
||||
dac33->mode1_latency);
|
||||
nsample_limit = DAC33_BUFFER_SIZE_SAMPLES -
|
||||
dac33->alarm_threshold;
|
||||
|
||||
if (dac33->auto_fifo_config) {
|
||||
if (period_size <= dac33->alarm_threshold)
|
||||
/*
|
||||
|
@ -1086,6 +1095,8 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||
((dac33->alarm_threshold / period_size) +
|
||||
(dac33->alarm_threshold % period_size ?
|
||||
1 : 0));
|
||||
else if (period_size > nsample_limit)
|
||||
dac33->nsample = nsample_limit;
|
||||
else
|
||||
dac33->nsample = period_size;
|
||||
} else {
|
||||
|
@ -1097,8 +1108,7 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||
*/
|
||||
dac33->nsample_max = substream->runtime->buffer_size -
|
||||
period_size;
|
||||
nsample_limit = DAC33_BUFFER_SIZE_SAMPLES -
|
||||
dac33->alarm_threshold;
|
||||
|
||||
if (dac33->nsample_max > nsample_limit)
|
||||
dac33->nsample_max = nsample_limit;
|
||||
|
||||
|
@ -1414,9 +1424,15 @@ static int dac33_soc_probe(struct snd_soc_codec *codec)
|
|||
dev_err(codec->dev, "Failed to power up codec: %d\n", ret);
|
||||
goto err_power;
|
||||
}
|
||||
dac33_read_id(codec);
|
||||
ret = dac33_read_id(codec);
|
||||
dac33_hard_power(codec, 0);
|
||||
|
||||
if (ret < 0) {
|
||||
dev_err(codec->dev, "Failed to read chip ID: %d\n", ret);
|
||||
ret = -ENODEV;
|
||||
goto err_power;
|
||||
}
|
||||
|
||||
/* Check if the IRQ number is valid and request it */
|
||||
if (dac33->irq >= 0) {
|
||||
ret = request_irq(dac33->irq, dac33_interrupt_handler,
|
||||
|
|
|
@ -119,13 +119,13 @@ static int tpa6130a2_power(int power)
|
|||
{
|
||||
struct tpa6130a2_data *data;
|
||||
u8 val;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
BUG_ON(tpa6130a2_client == NULL);
|
||||
data = i2c_get_clientdata(tpa6130a2_client);
|
||||
|
||||
mutex_lock(&data->mutex);
|
||||
if (power) {
|
||||
if (power && !data->power_state) {
|
||||
/* Power on */
|
||||
if (data->power_gpio >= 0)
|
||||
gpio_set_value(data->power_gpio, 1);
|
||||
|
@ -153,7 +153,7 @@ static int tpa6130a2_power(int power)
|
|||
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
||||
val &= ~TPA6130A2_SWS;
|
||||
tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val);
|
||||
} else {
|
||||
} else if (!power && data->power_state) {
|
||||
/* set SWS */
|
||||
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
||||
val |= TPA6130A2_SWS;
|
||||
|
|
|
@ -186,7 +186,6 @@ static int wm8900_volatile_register(unsigned int reg)
|
|||
{
|
||||
switch (reg) {
|
||||
case WM8900_REG_ID:
|
||||
case WM8900_REG_POWER1:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
|
@ -1200,11 +1199,6 @@ static int wm8900_probe(struct snd_soc_codec *codec)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Read back from the chip */
|
||||
reg = snd_soc_read(codec, WM8900_REG_POWER1);
|
||||
reg = (reg >> 12) & 0xf;
|
||||
dev_info(codec->dev, "WM8900 revision %d\n", reg);
|
||||
|
||||
wm8900_reset(codec);
|
||||
|
||||
/* Turn the chip on */
|
||||
|
|
|
@ -123,7 +123,7 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
|
|||
reg_r = reg & WM8993_DCS_DAC_WR_VAL_0_MASK;
|
||||
break;
|
||||
default:
|
||||
WARN(1, "Unknown DCS readback method");
|
||||
WARN(1, "Unknown DCS readback method\n");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ static void tosa_ext_control(struct snd_soc_codec *codec)
|
|||
static int tosa_startup(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_soc_codec *codec = rtd->card->codec;
|
||||
struct snd_soc_codec *codec = rtd->codec;
|
||||
|
||||
/* check the jack status at stream startup */
|
||||
tosa_ext_control(codec);
|
||||
|
|
|
@ -165,8 +165,11 @@ static ssize_t pmdown_time_set(struct device *dev,
|
|||
{
|
||||
struct snd_soc_pcm_runtime *rtd =
|
||||
container_of(dev, struct snd_soc_pcm_runtime, dev);
|
||||
int ret;
|
||||
|
||||
strict_strtol(buf, 10, &rtd->pmdown_time);
|
||||
ret = strict_strtol(buf, 10, &rtd->pmdown_time);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
|
@ -155,7 +155,7 @@ static int snd_at73c213_set_bitrate(struct snd_at73c213 *chip)
|
|||
if (max_tries < 1)
|
||||
max_tries = 1;
|
||||
|
||||
/* ssc_div must be a power of 2. */
|
||||
/* ssc_div must be even. */
|
||||
ssc_div = (ssc_div + 1) & ~1UL;
|
||||
|
||||
if ((ssc_rate / (ssc_div * 2 * 16)) < BITRATE_MIN) {
|
||||
|
|
Loading…
Reference in New Issue