Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
de5afad
ALSA: hda/realtek: Add support for Ayaneo System using CS35L41 HDA
Jan 9, 2025
0fa01cf
Merge tag 'asoc-fix-v6.13-rc6' of https://git.kernel.org/pub/scm/linu…
tiwai Jan 10, 2025
f67b1ef
ALSA: hda/realtek: fixup ASUS GA605W
flukejones Jan 11, 2025
44a48b2
ALSA: hda/realtek: fixup ASUS H7606W
flukejones Jan 11, 2025
34c8e74
ALSA: hda/realtek: Fix volume adjustment issue on Lenovo ThinkBook 16…
YageGeng Jan 13, 2025
3784950
ALSA: hda: Add AZX_DCAPS_NO_TCSEL flag for Loongson HDA devices
Jan 14, 2025
eab6905
ASoC: fsl_micfil: Add i.MX943 platform support
TE-N-ShengjiuWang Jan 14, 2025
3927c51
ASoC: dt-bindings: fsl,micfil: Add compatible string for i.MX943 plat…
TE-N-ShengjiuWang Jan 14, 2025
41f1d2b
ASoC: soc-dapm: remove !card check from snd_soc_dapm_set_bias_level()
morimoto Jan 14, 2025
65880d3
ASoC: sun4i-codec: Use new devm clk and reset APIs
Jan 14, 2025
3846699
ALSA: rawmidi: Make tied_device=0 as default / unknown
tiwai Jan 14, 2025
6b07723
ASoC: fsl: Support micfil on i.MX943
broonie Jan 14, 2025
1aec3ed
ALSA: hda/realtek: Enable headset mic on Positivo C6400
drosdeck Jan 14, 2025
d80c400
ALSA: hda: Transfer firmware in two chunks
crojewsk-intel Jan 14, 2025
ad5b205
ALSA: usb-audio: Add delay quirk for USB Audio Device
LianqinHu Jan 15, 2025
04e97fa
ASoC: simple-card-utils: fix priv->dai_props indexing
LaurentiuM1234 Jan 14, 2025
d4e91ad
ASoC: soc-dai: add snd_soc_dai_prepare() and use it internally
xdarklight Jan 14, 2025
e436d43
ASoC: dapm: add support for preparing streams
xdarklight Jan 14, 2025
c9e0576
ASoC: Intel: sof_sdw: Fix DMI match for Lenovo 83LC
simontrimmer Jan 2, 2025
17615e4
ASoC: Intel: sof_sdw: Fix DMI match for Lenovo 83JX, 83MC and 83NM
simontrimmer Jan 2, 2025
d466887
ALSA: hda: Support for Ideapad hotkey mute LEDs
Jan 15, 2025
75a7f7d
ASoC: Intel: sof_sdw: Fix DMI match entries for a
broonie Jan 15, 2025
fee89dd
ASoC: xilinx: xlnx_spdif: Simpify using devm_clk_get_enabled()
michalsimek Jan 16, 2025
1fd60ed
regmap: Synchronize cache for the page selector
andy-shev Jan 16, 2025
78798d8
Merge remote-tracking branch 'regmap/for-6.14' into regmap-next
broonie Jan 16, 2025
5cb4e5b
ALSA: hda/realtek - Fixed headphone distorted sound on Acer Aspire A1…
KailangYang Dec 30, 2024
bb5f86e
ALSA: hda/tas2781: Add tas2781 hda SPI driver
jimxbj-dot Dec 16, 2024
1a0f59b
Merge tag 'asoc-fix-v6.13-rc7' of https://git.kernel.org/pub/scm/linu…
tiwai Jan 18, 2025
46757a3
ALSA: FCP: Add Focusrite Control Protocol driver
geoffreybennett Jan 16, 2025
0ce204d
ALSA: scarlett2: Add device_setup option to use FCP driver
geoffreybennett Jan 16, 2025
f95719b
ALSA: usb: fcp: Fix hwdep read ops types
sfrothwell Jan 20, 2025
8cd671d
ALSA: hda: tas2781-spi: select CRC32 instead of CRC32_SARWATE
tiwai Jan 20, 2025
7bba999
Merge branch 'for-linus' into for-next
tiwai Jan 20, 2025
e576e78
ALSA: ctxfi: Simplify dao_clear_{left,right}_input() functions
ethancedwards8 Jan 20, 2025
1256961
ALSA: hda: tas2781-spi: Fix -Wsometimes-uninitialized in tasdevice_sp…
nathanchance Jan 20, 2025
d12ca6d
ASoC: fsl_asrc_m2m: only handle pairs for m2m in the suspend
TE-N-ShengjiuWang Jan 20, 2025
abe01a7
ASoC: fsl_asrc_m2m: return error value in asrc_m2m_device_run()
TE-N-ShengjiuWang Jan 20, 2025
da8146c
ASoC: codecs: ES8326: Improved PSRR
Michael-zy2000 Jan 20, 2025
8514d8f
Merge tag 'asoc-v6.14' of https://git.kernel.org/pub/scm/linux/kernel…
tiwai Jan 20, 2025
d1e7dce
ASoC: fsl: two fixes for asrc memory to memory
broonie Jan 20, 2025
711aad3
ALSA: hda/realtek: Enable Mute LED on HP Laptop 14s-fq1xxx
Jan 20, 2025
5323186
ASoC: rockchip: i2s_tdm: Re-add the set_sysclk callback
cazou Jan 17, 2025
e721701
ALSA: usb: fcp: Fix meter_levels type to __le32
tiwai Jan 21, 2025
f08cc80
ALSA: usb: fcp: Fix incorrect resp->opcode retrieval
tiwai Jan 21, 2025
0a8f5f4
ALSA: usb: fcp: Fix return code from poll ops
tiwai Jan 21, 2025
dec6b00
ASoC: dt-bindings: ti,pcm1681: Fix the binding title
Jan 21, 2025
be125a0
ALSA: hda: tas2781-spi: Delete some dead code
Jan 22, 2025
807563c
ALSA: hda: tas2781-spi: Fix error code in tas2781_read_acpi()
Jan 22, 2025
6aa96f7
ALSA: hda: tas2781-spi: Fix bogus error handling in tas2781_hda_spi_p…
tiwai Jan 22, 2025
aba9381
Merge remote-tracking branch 'asoc/for-6.13' into asoc-linus
broonie Jan 22, 2025
5936a8c
Merge remote-tracking branch 'takashi/for-next' into sound/upstream-2…
bardliao Jan 23, 2025
807ae75
Merge remote-tracking branch 'soundwire/next' into sound/upstream-202…
bardliao Jan 23, 2025
cca37ee
Merge remote-tracking branch 'regmap/for-next' into sound/upstream-20…
bardliao Jan 23, 2025
ebae280
Merge branch 'sound/upstream-20250123' into merge/sound-upstream-2025…
bardliao Jan 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Documentation/devicetree/bindings/sound/fsl,micfil.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ properties:
- fsl,imx8mm-micfil
- fsl,imx8mp-micfil
- fsl,imx93-micfil
- fsl,imx943-micfil

reg:
maxItems: 1
Expand Down
2 changes: 1 addition & 1 deletion Documentation/devicetree/bindings/sound/ti,pcm1681.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
$id: http://devicetree.org/schemas/sound/ti,pcm1681.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Texas Instruments PCM1681 8-channel PWM Processor
title: Texas Instruments PCM1681 8-channel Digital-to-Analog Converter

maintainers:
- Shenghao Ding <shenghao-ding@ti.com>
Expand Down
10 changes: 6 additions & 4 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -8948,14 +8948,16 @@ L: linux-input@vger.kernel.org
S: Maintained
F: drivers/input/joystick/fsia6b.c

FOCUSRITE SCARLETT2 MIXER DRIVER (Scarlett Gen 2+ and Clarett)
FOCUSRITE CONTROL PROTOCOL/SCARLETT2 MIXER DRIVERS (Scarlett Gen 2+, Clarett, and Vocaster)
M: Geoffrey D. Bennett <g@b4.vu>
L: linux-sound@vger.kernel.org
S: Maintained
W: https://github.com/geoffreybennett/scarlett-gen2
B: https://github.com/geoffreybennett/scarlett-gen2/issues
T: git https://github.com/geoffreybennett/scarlett-gen2.git
W: https://github.com/geoffreybennett/linux-fcp
B: https://github.com/geoffreybennett/linux-fcp/issues
T: git https://github.com/geoffreybennett/linux-fcp.git
F: include/uapi/sound/fcp.h
F: include/uapi/sound/scarlett2.h
F: sound/usb/fcp.c
F: sound/usb/mixer_scarlett2.c

FORCEDETH GIGABIT ETHERNET DRIVER
Expand Down
1 change: 1 addition & 0 deletions drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -1769,6 +1769,7 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device)
{"CSC3557", },
{"INT33FE", },
{"INT3515", },
{"TXNW2781", },
/* Non-conforming _HID for Cirrus Logic already released */
{"CLSA0100", },
{"CLSA0101", },
Expand Down
28 changes: 22 additions & 6 deletions drivers/base/regmap/regmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1557,24 +1557,40 @@ static int _regmap_select_page(struct regmap *map, unsigned int *reg,
return -EINVAL;
}

/* It is possible to have selector register inside data window.
In that case, selector register is located on every page and
it needs no page switching, when accessed alone. */
/*
* It is possible to have selector register inside data window.
* In that case, selector register is located on every page and it
* needs no page switching, when accessed alone.
*
* Nevertheless we should synchronize the cache values for it.
*/
if (val_num > 1 ||
range->window_start + win_offset != range->selector_reg) {
unsigned int page_off = win_page * range->window_len;
unsigned int sel_offset = range->selector_reg - range->window_start;
unsigned int sel_register = range->range_min + page_off + sel_offset;
unsigned int val = win_page << range->selector_shift;
unsigned int mask = range->selector_mask;

/* Use separate work_buf during page switching */
orig_work_buf = map->work_buf;
map->work_buf = map->selector_work_buf;

ret = _regmap_update_bits(map, range->selector_reg,
range->selector_mask,
win_page << range->selector_shift,
ret = _regmap_update_bits(map, range->selector_reg, mask, val,
&page_chg, false);

map->work_buf = orig_work_buf;

if (ret != 0)
return ret;

/*
* If selector register has been just updated, update the respective
* virtual copy as well.
*/
if (page_chg &&
in_range(range->selector_reg, range->window_start, range->window_len))
_regmap_update_bits(map, sel_register, mask, val, NULL, false);
}

*reg = range->window_start + win_offset;
Expand Down
12 changes: 12 additions & 0 deletions drivers/platform/x86/serial-multi-instantiate.c
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,17 @@ static const struct smi_node cs35l57_hda = {
.bus_type = SMI_AUTO_DETECT,
};

static const struct smi_node tas2781_hda = {
.instances = {
{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },
{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },
{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },
{ "tas2781-hda", IRQ_RESOURCE_AUTO, 0 },
{}
},
.bus_type = SMI_AUTO_DETECT,
};

/*
* Note new device-ids must also be added to ignore_serial_bus_ids in
* drivers/acpi/scan.c: acpi_device_enumeration_by_parent().
Expand All @@ -396,6 +407,7 @@ static const struct acpi_device_id smi_acpi_ids[] = {
{ "CSC3556", (unsigned long)&cs35l56_hda },
{ "CSC3557", (unsigned long)&cs35l57_hda },
{ "INT3515", (unsigned long)&int3515_data },
{ "TXNW2781", (unsigned long)&tas2781_hda },
/* Non-conforming _HID for Cirrus Logic already released */
{ "CLSA0100", (unsigned long)&cs35l41_hda },
{ "CLSA0101", (unsigned long)&cs35l41_hda },
Expand Down
9 changes: 9 additions & 0 deletions include/sound/rawmidi.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,4 +191,13 @@ long snd_rawmidi_kernel_read(struct snd_rawmidi_substream *substream,
long snd_rawmidi_kernel_write(struct snd_rawmidi_substream *substream,
const unsigned char *buf, long count);

/* set up the tied devices */
static inline void snd_rawmidi_tie_devices(struct snd_rawmidi *r1,
struct snd_rawmidi *r2)
{
/* tied_device field keeps the device+1 (so that 0 being unknown) */
r1->tied_device = r2->device + 1;
r2->tied_device = r1->device + 1;
}

#endif /* __SOUND_RAWMIDI_H */
7 changes: 7 additions & 0 deletions include/sound/simple_card_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ struct simple_util_priv {
#define simple_props_to_dai_codec(props, i) ((props)->codec_dai + i)
#define simple_props_to_codec_conf(props, i) ((props)->codec_conf + i)

/* has the same effect as simple_priv_to_props(). Preferred over
* simple_priv_to_props() when dealing with PCM runtime data as
* the ID stored in rtd->id may not be a valid array index.
*/
#define runtime_simple_priv_to_props(priv, rtd) \
((priv)->dai_props + ((rtd)->dai_link - (priv)->dai_link))

#define for_each_prop_dlc_cpus(props, i, cpu) \
for ((i) = 0; \
((i) < (props)->num.cpus) && \
Expand Down
3 changes: 3 additions & 0 deletions include/sound/soc-dai.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@ int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,

int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);

int snd_soc_dai_prepare(struct snd_soc_dai *dai,
struct snd_pcm_substream *substream);

/* Digital Audio Interface mute */
int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
int direction);
Expand Down
2 changes: 1 addition & 1 deletion include/uapi/sound/asound.h
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ enum {
#define SNDRV_RAWMIDI_INFO_UMP 0x00000008
#define SNDRV_RAWMIDI_INFO_STREAM_INACTIVE 0x00000010

#define SNDRV_RAWMIDI_DEVICE_UNKNOWN -1
#define SNDRV_RAWMIDI_DEVICE_UNKNOWN 0

struct snd_rawmidi_info {
unsigned int device; /* RO/WR (control): device number */
Expand Down
120 changes: 120 additions & 0 deletions include/uapi/sound/fcp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Focusrite Control Protocol Driver for ALSA
*
* Copyright (c) 2024-2025 by Geoffrey D. Bennett <g at b4.vu>
*/
/*
* DOC: FCP (Focusrite Control Protocol) User-Space API
*
* This header defines the interface between the FCP kernel driver and
* user-space programs to enable the use of the proprietary features
* available in Focusrite USB audio interfaces. This includes Scarlett
* 2nd Gen, 3rd Gen, 4th Gen, Clarett USB, Clarett+, and Vocaster
* series devices.
*
* The interface is provided via ALSA's hwdep interface. Opening the
* hwdep device requires CAP_SYS_RAWIO privileges as this interface
* provides near-direct access.
*
* For details on the FCP protocol, refer to the kernel scarlett2
* driver in sound/usb/mixer_scarlett2.c and the fcp-support project
* at https://github.com/geoffreybennett/fcp-support
*
* For examples of using these IOCTLs, see the fcp-server source in
* the fcp-support project.
*
* IOCTL Interface
* --------------
* FCP_IOCTL_PVERSION:
* Returns the protocol version supported by the driver.
*
* FCP_IOCTL_INIT:
* Initialises the protocol and synchronises sequence numbers
* between the driver and device. Must be called at least once
* before sending commands. Can be safely called again at any time.
*
* FCP_IOCTL_CMD:
* Sends an FCP command to the device and returns the response.
* Requires prior initialisation via FCP_IOCTL_INIT.
*
* FCP_IOCTL_SET_METER_MAP:
* Configures the Level Meter control's mapping between device
* meters and control channels. Requires FCP_IOCTL_INIT to have been
* called first. The map size and number of slots cannot be changed
* after initial configuration, although the map itself can be
* updated. Once configured, the Level Meter remains functional even
* after the hwdep device is closed.
*
* FCP_IOCTL_SET_METER_LABELS:
* Set the labels for the Level Meter control. Requires
* FCP_IOCTL_SET_METER_MAP to have been called first. labels[]
* should contain a sequence of null-terminated labels corresponding
* to the control's channels.
*/
#ifndef __UAPI_SOUND_FCP_H
#define __UAPI_SOUND_FCP_H

#include <linux/types.h>
#include <linux/ioctl.h>

#define FCP_HWDEP_MAJOR 2
#define FCP_HWDEP_MINOR 0
#define FCP_HWDEP_SUBMINOR 0

#define FCP_HWDEP_VERSION \
((FCP_HWDEP_MAJOR << 16) | \
(FCP_HWDEP_MINOR << 8) | \
FCP_HWDEP_SUBMINOR)

#define FCP_HWDEP_VERSION_MAJOR(v) (((v) >> 16) & 0xFF)
#define FCP_HWDEP_VERSION_MINOR(v) (((v) >> 8) & 0xFF)
#define FCP_HWDEP_VERSION_SUBMINOR(v) ((v) & 0xFF)

/* Get protocol version */
#define FCP_IOCTL_PVERSION _IOR('S', 0x60, int)

/* Start the protocol */

/* Step 0 and step 2 responses are variable length and placed in
* resp[] one after the other.
*/
struct fcp_init {
__u16 step0_resp_size;
__u16 step2_resp_size;
__u32 init1_opcode;
__u32 init2_opcode;
__u8 resp[];
} __attribute__((packed));

#define FCP_IOCTL_INIT _IOWR('S', 0x64, struct fcp_init)

/* Perform a command */

/* The request data is placed in data[] and the response data will
* overwrite it.
*/
struct fcp_cmd {
__u32 opcode;
__u16 req_size;
__u16 resp_size;
__u8 data[];
} __attribute__((packed));
#define FCP_IOCTL_CMD _IOWR('S', 0x65, struct fcp_cmd)

/* Set the meter map */
struct fcp_meter_map {
__u16 map_size;
__u16 meter_slots;
__s16 map[];
} __attribute__((packed));
#define FCP_IOCTL_SET_METER_MAP _IOW('S', 0x66, struct fcp_meter_map)

/* Set the meter labels */
struct fcp_meter_labels {
__u16 labels_size;
char labels[];
} __attribute__((packed));
#define FCP_IOCTL_SET_METER_LABELS _IOW('S', 0x67, struct fcp_meter_labels)

#endif /* __UAPI_SOUND_FCP_H */
2 changes: 2 additions & 0 deletions include/uapi/sound/tlv.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#define SNDRV_CTL_TLVT_CHMAP_VAR 0x102 /* channels freely swappable */
#define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103 /* pair-wise swappable */

#define SNDRV_CTL_TLVT_FCP_CHANNEL_LABELS 0x110 /* channel labels */

/*
* TLV structure is right behind the struct snd_ctl_tlv:
* unsigned int type - see SNDRV_CTL_TLVT_*
Expand Down
1 change: 0 additions & 1 deletion sound/core/rawmidi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1837,7 +1837,6 @@ int snd_rawmidi_init(struct snd_rawmidi *rmidi,
INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams);
INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams);
rmidi->info_flags = info_flags;
rmidi->tied_device = SNDRV_RAWMIDI_DEVICE_UNKNOWN;

if (id != NULL)
strscpy(rmidi->id, id, sizeof(rmidi->id));
Expand Down
3 changes: 1 addition & 2 deletions sound/core/ump.c
Original file line number Diff line number Diff line change
Expand Up @@ -1382,8 +1382,7 @@ int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
ump_legacy_set_rawmidi_name(ump);
update_legacy_names(ump);

rmidi->tied_device = ump->core.device;
ump->core.tied_device = rmidi->device;
snd_rawmidi_tie_devices(rmidi, &ump->core);

ump_dbg(ump, "Created a legacy rawmidi #%d (%s)\n", device, id);
return 0;
Expand Down
Loading
Loading