mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
Merge branch 'fix/misc' into topic/misc
This commit is contained in:
commit
e6d06e085b
10 changed files with 45 additions and 32 deletions
|
@ -625,6 +625,8 @@ static short create_adapter_obj(struct hpi_adapter_obj *pao,
|
||||||
control_cache_size, (struct hpi_control_cache_info *)
|
control_cache_size, (struct hpi_control_cache_info *)
|
||||||
&phw->control_cache[0]
|
&phw->control_cache[0]
|
||||||
);
|
);
|
||||||
|
if (!phw->p_cache)
|
||||||
|
pao->has_control_cache = 0;
|
||||||
} else
|
} else
|
||||||
pao->has_control_cache = 0;
|
pao->has_control_cache = 0;
|
||||||
|
|
||||||
|
|
|
@ -644,6 +644,8 @@ static u16 create_adapter_obj(struct hpi_adapter_obj *pao,
|
||||||
interface->control_cache.size_in_bytes,
|
interface->control_cache.size_in_bytes,
|
||||||
(struct hpi_control_cache_info *)
|
(struct hpi_control_cache_info *)
|
||||||
p_control_cache_virtual);
|
p_control_cache_virtual);
|
||||||
|
if (!phw->p_cache)
|
||||||
|
err = HPI_ERROR_MEMORY_ALLOC;
|
||||||
}
|
}
|
||||||
if (!err) {
|
if (!err) {
|
||||||
err = hpios_locked_mem_get_phys_addr(&phw->
|
err = hpios_locked_mem_get_phys_addr(&phw->
|
||||||
|
|
|
@ -571,14 +571,20 @@ struct hpi_control_cache *hpi_alloc_control_cache(const u32
|
||||||
{
|
{
|
||||||
struct hpi_control_cache *p_cache =
|
struct hpi_control_cache *p_cache =
|
||||||
kmalloc(sizeof(*p_cache), GFP_KERNEL);
|
kmalloc(sizeof(*p_cache), GFP_KERNEL);
|
||||||
|
if (!p_cache)
|
||||||
|
return NULL;
|
||||||
|
p_cache->p_info =
|
||||||
|
kmalloc(sizeof(*p_cache->p_info) * number_of_controls,
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!p_cache->p_info) {
|
||||||
|
kfree(p_cache);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
p_cache->cache_size_in_bytes = size_in_bytes;
|
p_cache->cache_size_in_bytes = size_in_bytes;
|
||||||
p_cache->control_count = number_of_controls;
|
p_cache->control_count = number_of_controls;
|
||||||
p_cache->p_cache =
|
p_cache->p_cache =
|
||||||
(struct hpi_control_cache_single *)pDSP_control_buffer;
|
(struct hpi_control_cache_single *)pDSP_control_buffer;
|
||||||
p_cache->init = 0;
|
p_cache->init = 0;
|
||||||
p_cache->p_info =
|
|
||||||
kmalloc(sizeof(*p_cache->p_info) * p_cache->control_count,
|
|
||||||
GFP_KERNEL);
|
|
||||||
return p_cache;
|
return p_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -225,39 +225,25 @@ struct dsp_spos_instance *cs46xx_dsp_spos_create (struct snd_cs46xx * chip)
|
||||||
{
|
{
|
||||||
struct dsp_spos_instance * ins = kzalloc(sizeof(struct dsp_spos_instance), GFP_KERNEL);
|
struct dsp_spos_instance * ins = kzalloc(sizeof(struct dsp_spos_instance), GFP_KERNEL);
|
||||||
|
|
||||||
if (ins == NULL)
|
if (ins == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* better to use vmalloc for this big table */
|
/* better to use vmalloc for this big table */
|
||||||
ins->symbol_table.nsymbols = 0;
|
|
||||||
ins->symbol_table.symbols = vmalloc(sizeof(struct dsp_symbol_entry) *
|
ins->symbol_table.symbols = vmalloc(sizeof(struct dsp_symbol_entry) *
|
||||||
DSP_MAX_SYMBOLS);
|
DSP_MAX_SYMBOLS);
|
||||||
ins->symbol_table.highest_frag_index = 0;
|
ins->code.data = kmalloc(DSP_CODE_BYTE_SIZE, GFP_KERNEL);
|
||||||
|
ins->modules = kmalloc(sizeof(struct dsp_module_desc) * DSP_MAX_MODULES, GFP_KERNEL);
|
||||||
if (ins->symbol_table.symbols == NULL) {
|
if (!ins->symbol_table.symbols || !ins->code.data || !ins->modules) {
|
||||||
cs46xx_dsp_spos_destroy(chip);
|
cs46xx_dsp_spos_destroy(chip);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
ins->symbol_table.nsymbols = 0;
|
||||||
|
ins->symbol_table.highest_frag_index = 0;
|
||||||
ins->code.offset = 0;
|
ins->code.offset = 0;
|
||||||
ins->code.size = 0;
|
ins->code.size = 0;
|
||||||
ins->code.data = kmalloc(DSP_CODE_BYTE_SIZE, GFP_KERNEL);
|
|
||||||
|
|
||||||
if (ins->code.data == NULL) {
|
|
||||||
cs46xx_dsp_spos_destroy(chip);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
ins->nscb = 0;
|
ins->nscb = 0;
|
||||||
ins->ntask = 0;
|
ins->ntask = 0;
|
||||||
|
|
||||||
ins->nmodules = 0;
|
ins->nmodules = 0;
|
||||||
ins->modules = kmalloc(sizeof(struct dsp_module_desc) * DSP_MAX_MODULES, GFP_KERNEL);
|
|
||||||
|
|
||||||
if (ins->modules == NULL) {
|
|
||||||
cs46xx_dsp_spos_destroy(chip);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* default SPDIF input sample rate
|
/* default SPDIF input sample rate
|
||||||
to 48000 khz */
|
to 48000 khz */
|
||||||
|
@ -271,8 +257,8 @@ struct dsp_spos_instance *cs46xx_dsp_spos_create (struct snd_cs46xx * chip)
|
||||||
|
|
||||||
/* set left and right validity bits and
|
/* set left and right validity bits and
|
||||||
default channel status */
|
default channel status */
|
||||||
ins->spdif_csuv_default =
|
ins->spdif_csuv_default =
|
||||||
ins->spdif_csuv_stream =
|
ins->spdif_csuv_stream =
|
||||||
/* byte 0 */ ((unsigned int)_wrap_all_bits( (SNDRV_PCM_DEFAULT_CON_SPDIF & 0xff)) << 24) |
|
/* byte 0 */ ((unsigned int)_wrap_all_bits( (SNDRV_PCM_DEFAULT_CON_SPDIF & 0xff)) << 24) |
|
||||||
/* byte 1 */ ((unsigned int)_wrap_all_bits( ((SNDRV_PCM_DEFAULT_CON_SPDIF >> 8) & 0xff)) << 16) |
|
/* byte 1 */ ((unsigned int)_wrap_all_bits( ((SNDRV_PCM_DEFAULT_CON_SPDIF >> 8) & 0xff)) << 16) |
|
||||||
/* byte 3 */ (unsigned int)_wrap_all_bits( (SNDRV_PCM_DEFAULT_CON_SPDIF >> 24) & 0xff) |
|
/* byte 3 */ (unsigned int)_wrap_all_bits( (SNDRV_PCM_DEFAULT_CON_SPDIF >> 24) & 0xff) |
|
||||||
|
@ -281,6 +267,9 @@ struct dsp_spos_instance *cs46xx_dsp_spos_create (struct snd_cs46xx * chip)
|
||||||
return ins;
|
return ins;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
kfree(ins->modules);
|
||||||
|
kfree(ins->code.data);
|
||||||
|
vfree(ins->symbol_table.symbols);
|
||||||
kfree(ins);
|
kfree(ins);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1166,6 +1166,7 @@ static const char *cs420x_models[CS420X_MODELS] = {
|
||||||
|
|
||||||
static struct snd_pci_quirk cs420x_cfg_tbl[] = {
|
static struct snd_pci_quirk cs420x_cfg_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x10de, 0x0ac0, "MacBookPro 5,3", CS420X_MBP53),
|
SND_PCI_QUIRK(0x10de, 0x0ac0, "MacBookPro 5,3", CS420X_MBP53),
|
||||||
|
SND_PCI_QUIRK(0x10de, 0x0d94, "MacBookAir 3,1(2)", CS420X_MBP55),
|
||||||
SND_PCI_QUIRK(0x10de, 0xcb79, "MacBookPro 5,5", CS420X_MBP55),
|
SND_PCI_QUIRK(0x10de, 0xcb79, "MacBookPro 5,5", CS420X_MBP55),
|
||||||
SND_PCI_QUIRK(0x10de, 0xcb89, "MacBookPro 7,1", CS420X_MBP55),
|
SND_PCI_QUIRK(0x10de, 0xcb89, "MacBookPro 7,1", CS420X_MBP55),
|
||||||
SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),
|
SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),
|
||||||
|
|
|
@ -425,7 +425,7 @@ exit:
|
||||||
static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream)
|
static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream)
|
||||||
{
|
{
|
||||||
struct snd_pcm_substream *substream = lx_stream->stream;
|
struct snd_pcm_substream *substream = lx_stream->stream;
|
||||||
const int is_capture = lx_stream->is_capture;
|
const unsigned int is_capture = lx_stream->is_capture;
|
||||||
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -473,7 +473,7 @@ static void lx_trigger_start(struct lx6464es *chip, struct lx_stream *lx_stream)
|
||||||
|
|
||||||
static void lx_trigger_stop(struct lx6464es *chip, struct lx_stream *lx_stream)
|
static void lx_trigger_stop(struct lx6464es *chip, struct lx_stream *lx_stream)
|
||||||
{
|
{
|
||||||
const int is_capture = lx_stream->is_capture;
|
const unsigned int is_capture = lx_stream->is_capture;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
snd_printd(LXP "stopping: stopping stream\n");
|
snd_printd(LXP "stopping: stopping stream\n");
|
||||||
|
|
|
@ -60,7 +60,7 @@ struct lx_stream {
|
||||||
snd_pcm_uframes_t frame_pos;
|
snd_pcm_uframes_t frame_pos;
|
||||||
enum lx_stream_status status; /* free, open, running, draining
|
enum lx_stream_status status; /* free, open, running, draining
|
||||||
* pause */
|
* pause */
|
||||||
int is_capture:1;
|
unsigned int is_capture:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1152,7 +1152,7 @@ static int lx_interrupt_request_new_buffer(struct lx6464es *chip,
|
||||||
struct lx_stream *lx_stream)
|
struct lx_stream *lx_stream)
|
||||||
{
|
{
|
||||||
struct snd_pcm_substream *substream = lx_stream->stream;
|
struct snd_pcm_substream *substream = lx_stream->stream;
|
||||||
int is_capture = lx_stream->is_capture;
|
const unsigned int is_capture = lx_stream->is_capture;
|
||||||
int err;
|
int err;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ static const struct rc_config {
|
||||||
{ USB_ID(0x041e, 0x3000), 0, 1, 2, 1, 18, 0x0013 }, /* Extigy */
|
{ USB_ID(0x041e, 0x3000), 0, 1, 2, 1, 18, 0x0013 }, /* Extigy */
|
||||||
{ USB_ID(0x041e, 0x3020), 2, 1, 6, 6, 18, 0x0013 }, /* Audigy 2 NX */
|
{ USB_ID(0x041e, 0x3020), 2, 1, 6, 6, 18, 0x0013 }, /* Audigy 2 NX */
|
||||||
{ USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */
|
{ USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */
|
||||||
{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi */
|
{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1, 1, 0x000d }, /* Usb X-Fi S51 */
|
||||||
{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
|
{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6, 2, 0x6e91 }, /* Toshiba SB0500 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -183,7 +183,13 @@ static int snd_audigy2nx_led_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
|
||||||
if (value > 1)
|
if (value > 1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
changed = value != mixer->audigy2nx_leds[index];
|
changed = value != mixer->audigy2nx_leds[index];
|
||||||
err = snd_usb_ctl_msg(mixer->chip->dev,
|
if (mixer->chip->usb_id == USB_ID(0x041e, 0x3042))
|
||||||
|
err = snd_usb_ctl_msg(mixer->chip->dev,
|
||||||
|
usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
|
||||||
|
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
|
||||||
|
!value, 0, NULL, 0, 100);
|
||||||
|
else
|
||||||
|
err = snd_usb_ctl_msg(mixer->chip->dev,
|
||||||
usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
|
usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
|
||||||
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
|
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
|
||||||
value, index + 2, NULL, 0, 100);
|
value, index + 2, NULL, 0, 100);
|
||||||
|
@ -225,8 +231,12 @@ static int snd_audigy2nx_controls_create(struct usb_mixer_interface *mixer)
|
||||||
int i, err;
|
int i, err;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(snd_audigy2nx_controls); ++i) {
|
for (i = 0; i < ARRAY_SIZE(snd_audigy2nx_controls); ++i) {
|
||||||
|
/* USB X-Fi S51 doesn't have a CMSS LED */
|
||||||
|
if ((mixer->chip->usb_id == USB_ID(0x041e, 0x3042)) && i == 0)
|
||||||
|
continue;
|
||||||
if (i > 1 && /* Live24ext has 2 LEDs only */
|
if (i > 1 && /* Live24ext has 2 LEDs only */
|
||||||
(mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
|
(mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
|
||||||
|
mixer->chip->usb_id == USB_ID(0x041e, 0x3042) ||
|
||||||
mixer->chip->usb_id == USB_ID(0x041e, 0x3048)))
|
mixer->chip->usb_id == USB_ID(0x041e, 0x3048)))
|
||||||
break;
|
break;
|
||||||
err = snd_ctl_add(mixer->chip->card,
|
err = snd_ctl_add(mixer->chip->card,
|
||||||
|
@ -365,6 +375,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
|
||||||
|
|
||||||
if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020) ||
|
if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020) ||
|
||||||
mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
|
mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
|
||||||
|
mixer->chip->usb_id == USB_ID(0x041e, 0x3042) ||
|
||||||
mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) {
|
mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) {
|
||||||
if ((err = snd_audigy2nx_controls_create(mixer)) < 0)
|
if ((err = snd_audigy2nx_controls_create(mixer)) < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -676,8 +676,10 @@ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
|
||||||
if (!needs_knot)
|
if (!needs_knot)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
subs->rate_list.count = count;
|
|
||||||
subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL);
|
subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL);
|
||||||
|
if (!subs->rate_list.list)
|
||||||
|
return -ENOMEM;
|
||||||
|
subs->rate_list.count = count;
|
||||||
subs->rate_list.mask = 0;
|
subs->rate_list.mask = 0;
|
||||||
count = 0;
|
count = 0;
|
||||||
list_for_each_entry(fp, &subs->fmt_list, list) {
|
list_for_each_entry(fp, &subs->fmt_list, list) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue