Merge branch 'v5.13/standard/base' into v5.13/standard/preempt-rt/base

This commit is contained in:
Bruce Ashfield 2021-09-08 13:57:13 -04:00
commit eaf308f87d
24 changed files with 115 additions and 44 deletions

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 5 VERSION = 5
PATCHLEVEL = 13 PATCHLEVEL = 13
SUBLEVEL = 14 SUBLEVEL = 15
EXTRAVERSION = EXTRAVERSION =
NAME = Opossums on Parade NAME = Opossums on Parade

View File

@ -14,6 +14,10 @@
model = "Microchip PolarFire-SoC Icicle Kit"; model = "Microchip PolarFire-SoC Icicle Kit";
compatible = "microchip,mpfs-icicle-kit"; compatible = "microchip,mpfs-icicle-kit";
aliases {
ethernet0 = &emac1;
};
chosen { chosen {
stdout-path = &serial0; stdout-path = &serial0;
}; };

View File

@ -317,7 +317,7 @@
reg = <0x0 0x20112000 0x0 0x2000>; reg = <0x0 0x20112000 0x0 0x2000>;
interrupt-parent = <&plic>; interrupt-parent = <&plic>;
interrupts = <70 71 72 73>; interrupts = <70 71 72 73>;
mac-address = [00 00 00 00 00 00]; local-mac-address = [00 00 00 00 00 00];
clocks = <&clkcfg 5>, <&clkcfg 2>; clocks = <&clkcfg 5>, <&clkcfg 2>;
status = "disabled"; status = "disabled";
clock-names = "pclk", "hclk"; clock-names = "pclk", "hclk";

View File

@ -90,6 +90,7 @@ struct perf_ibs {
unsigned long offset_mask[1]; unsigned long offset_mask[1];
int offset_max; int offset_max;
unsigned int fetch_count_reset_broken : 1; unsigned int fetch_count_reset_broken : 1;
unsigned int fetch_ignore_if_zero_rip : 1;
struct cpu_perf_ibs __percpu *pcpu; struct cpu_perf_ibs __percpu *pcpu;
struct attribute **format_attrs; struct attribute **format_attrs;
@ -672,6 +673,10 @@ fail:
if (check_rip && (ibs_data.regs[2] & IBS_RIP_INVALID)) { if (check_rip && (ibs_data.regs[2] & IBS_RIP_INVALID)) {
regs.flags &= ~PERF_EFLAGS_EXACT; regs.flags &= ~PERF_EFLAGS_EXACT;
} else { } else {
/* Workaround for erratum #1197 */
if (perf_ibs->fetch_ignore_if_zero_rip && !(ibs_data.regs[1]))
goto out;
set_linear_ip(&regs, ibs_data.regs[1]); set_linear_ip(&regs, ibs_data.regs[1]);
regs.flags |= PERF_EFLAGS_EXACT; regs.flags |= PERF_EFLAGS_EXACT;
} }
@ -769,6 +774,9 @@ static __init void perf_event_ibs_init(void)
if (boot_cpu_data.x86 >= 0x16 && boot_cpu_data.x86 <= 0x18) if (boot_cpu_data.x86 >= 0x16 && boot_cpu_data.x86 <= 0x18)
perf_ibs_fetch.fetch_count_reset_broken = 1; perf_ibs_fetch.fetch_count_reset_broken = 1;
if (boot_cpu_data.x86 == 0x19 && boot_cpu_data.x86_model < 0x10)
perf_ibs_fetch.fetch_ignore_if_zero_rip = 1;
perf_ibs_pmu_init(&perf_ibs_fetch, "ibs_fetch"); perf_ibs_pmu_init(&perf_ibs_fetch, "ibs_fetch");
if (ibs_caps & IBS_CAPS_OPCNT) { if (ibs_caps & IBS_CAPS_OPCNT) {

View File

@ -213,6 +213,7 @@ static struct pmu pmu_class = {
.stop = pmu_event_stop, .stop = pmu_event_stop,
.read = pmu_event_read, .read = pmu_event_read,
.capabilities = PERF_PMU_CAP_NO_EXCLUDE, .capabilities = PERF_PMU_CAP_NO_EXCLUDE,
.module = THIS_MODULE,
}; };
static int power_cpu_exit(unsigned int cpu) static int power_cpu_exit(unsigned int cpu)

View File

@ -62,7 +62,7 @@ static struct pt_cap_desc {
PT_CAP(single_range_output, 0, CPUID_ECX, BIT(2)), PT_CAP(single_range_output, 0, CPUID_ECX, BIT(2)),
PT_CAP(output_subsys, 0, CPUID_ECX, BIT(3)), PT_CAP(output_subsys, 0, CPUID_ECX, BIT(3)),
PT_CAP(payloads_lip, 0, CPUID_ECX, BIT(31)), PT_CAP(payloads_lip, 0, CPUID_ECX, BIT(31)),
PT_CAP(num_address_ranges, 1, CPUID_EAX, 0x3), PT_CAP(num_address_ranges, 1, CPUID_EAX, 0x7),
PT_CAP(mtc_periods, 1, CPUID_EAX, 0xffff0000), PT_CAP(mtc_periods, 1, CPUID_EAX, 0xffff0000),
PT_CAP(cycle_thresholds, 1, CPUID_EBX, 0xffff), PT_CAP(cycle_thresholds, 1, CPUID_EBX, 0xffff),
PT_CAP(psb_periods, 1, CPUID_EBX, 0xffff0000), PT_CAP(psb_periods, 1, CPUID_EBX, 0xffff0000),

View File

@ -30,7 +30,7 @@ config XTENSA
select HAVE_DMA_CONTIGUOUS select HAVE_DMA_CONTIGUOUS
select HAVE_EXIT_THREAD select HAVE_EXIT_THREAD
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_FUTEX_CMPXCHG if !MMU select HAVE_FUTEX_CMPXCHG if !MMU && FUTEX
select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_HW_BREAKPOINT if PERF_EVENTS
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING
select HAVE_PCI select HAVE_PCI

View File

@ -213,7 +213,7 @@ config BLK_DEV_LOOP_MIN_COUNT
dynamically allocated with the /dev/loop-control interface. dynamically allocated with the /dev/loop-control interface.
config BLK_DEV_CRYPTOLOOP config BLK_DEV_CRYPTOLOOP
tristate "Cryptoloop Support" tristate "Cryptoloop Support (DEPRECATED)"
select CRYPTO select CRYPTO
select CRYPTO_CBC select CRYPTO_CBC
depends on BLK_DEV_LOOP depends on BLK_DEV_LOOP
@ -225,7 +225,7 @@ config BLK_DEV_CRYPTOLOOP
WARNING: This device is not safe for journaled file systems like WARNING: This device is not safe for journaled file systems like
ext3 or Reiserfs. Please use the Device Mapper crypto module ext3 or Reiserfs. Please use the Device Mapper crypto module
instead, which can be configured to be on-disk compatible with the instead, which can be configured to be on-disk compatible with the
cryptoloop device. cryptoloop device. cryptoloop support will be removed in Linux 5.16.
source "drivers/block/drbd/Kconfig" source "drivers/block/drbd/Kconfig"

View File

@ -189,6 +189,8 @@ init_cryptoloop(void)
if (rc) if (rc)
printk(KERN_ERR "cryptoloop: loop_register_transfer failed\n"); printk(KERN_ERR "cryptoloop: loop_register_transfer failed\n");
else
pr_warn("the cryptoloop driver has been deprecated and will be removed in in Linux 5.16\n");
return rc; return rc;
} }

View File

@ -585,21 +585,21 @@ static const struct ipu_rgb def_bgra_16 = {
.bits_per_pixel = 16, .bits_per_pixel = 16,
}; };
#define Y_OFFSET(pix, x, y) ((x) + pix->width * (y)) #define Y_OFFSET(pix, x, y) ((x) + pix->bytesperline * (y))
#define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define U_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * ((y) / 2) / 2) + (x) / 2) (pix->bytesperline * ((y) / 2) / 2) + (x) / 2)
#define V_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define V_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * pix->height / 4) + \ (pix->bytesperline * pix->height / 4) + \
(pix->width * ((y) / 2) / 2) + (x) / 2) (pix->bytesperline * ((y) / 2) / 2) + (x) / 2)
#define U2_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define U2_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * (y) / 2) + (x) / 2) (pix->bytesperline * (y) / 2) + (x) / 2)
#define V2_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define V2_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * pix->height / 2) + \ (pix->bytesperline * pix->height / 2) + \
(pix->width * (y) / 2) + (x) / 2) (pix->bytesperline * (y) / 2) + (x) / 2)
#define UV_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define UV_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * ((y) / 2)) + (x)) (pix->bytesperline * ((y) / 2)) + (x))
#define UV2_OFFSET(pix, x, y) ((pix->width * pix->height) + \ #define UV2_OFFSET(pix, x, y) ((pix->bytesperline * pix->height) + \
(pix->width * y) + (x)) (pix->bytesperline * y) + (x))
#define NUM_ALPHA_CHANNELS 7 #define NUM_ALPHA_CHANNELS 7

View File

@ -1346,7 +1346,7 @@ static int stk_camera_probe(struct usb_interface *interface,
if (!dev->isoc_ep) { if (!dev->isoc_ep) {
pr_err("Could not find isoc-in endpoint\n"); pr_err("Could not find isoc-in endpoint\n");
err = -ENODEV; err = -ENODEV;
goto error; goto error_put;
} }
dev->vsettings.palette = V4L2_PIX_FMT_RGB565; dev->vsettings.palette = V4L2_PIX_FMT_RGB565;
dev->vsettings.mode = MODE_VGA; dev->vsettings.mode = MODE_VGA;
@ -1359,10 +1359,12 @@ static int stk_camera_probe(struct usb_interface *interface,
err = stk_register_video_device(dev); err = stk_register_video_device(dev);
if (err) if (err)
goto error; goto error_put;
return 0; return 0;
error_put:
usb_put_intf(interface);
error: error:
v4l2_ctrl_handler_free(hdl); v4l2_ctrl_handler_free(hdl);
v4l2_device_unregister(&dev->v4l2_dev); v4l2_device_unregister(&dev->v4l2_dev);

View File

@ -1277,15 +1277,16 @@ static int mv88e6393x_serdes_port_errata(struct mv88e6xxx_chip *chip, int lane)
int err; int err;
/* mv88e6393x family errata 4.6: /* mv88e6393x family errata 4.6:
* Cannot clear PwrDn bit on SERDES on port 0 if device is configured * Cannot clear PwrDn bit on SERDES if device is configured CPU_MGD
* CPU_MGD mode or P0_mode is configured for [x]MII. * mode or P0_mode is configured for [x]MII.
* Workaround: Set Port0 SERDES register 4.F002 bit 5=0 and bit 15=1. * Workaround: Set SERDES register 4.F002 bit 5=0 and bit 15=1.
* *
* It seems that after this workaround the SERDES is automatically * It seems that after this workaround the SERDES is automatically
* powered up (the bit is cleared), so power it down. * powered up (the bit is cleared), so power it down.
*/ */
if (lane == MV88E6393X_PORT0_LANE) { if (lane == MV88E6393X_PORT0_LANE || lane == MV88E6393X_PORT9_LANE ||
err = mv88e6390_serdes_read(chip, MV88E6393X_PORT0_LANE, lane == MV88E6393X_PORT10_LANE) {
err = mv88e6390_serdes_read(chip, lane,
MDIO_MMD_PHYXS, MDIO_MMD_PHYXS,
MV88E6393X_SERDES_POC, &reg); MV88E6393X_SERDES_POC, &reg);
if (err) if (err)

View File

@ -275,6 +275,12 @@ void gem_ptp_rxstamp(struct macb *bp, struct sk_buff *skb,
if (GEM_BFEXT(DMA_RXVALID, desc->addr)) { if (GEM_BFEXT(DMA_RXVALID, desc->addr)) {
desc_ptp = macb_ptp_desc(bp, desc); desc_ptp = macb_ptp_desc(bp, desc);
/* Unlikely but check */
if (!desc_ptp) {
dev_warn_ratelimited(&bp->pdev->dev,
"Timestamp not supported in BD\n");
return;
}
gem_hw_timestamp(bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts); gem_hw_timestamp(bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts);
memset(shhwtstamps, 0, sizeof(struct skb_shared_hwtstamps)); memset(shhwtstamps, 0, sizeof(struct skb_shared_hwtstamps));
shhwtstamps->hwtstamp = ktime_set(ts.tv_sec, ts.tv_nsec); shhwtstamps->hwtstamp = ktime_set(ts.tv_sec, ts.tv_nsec);
@ -307,8 +313,11 @@ int gem_ptp_txstamp(struct macb_queue *queue, struct sk_buff *skb,
if (CIRC_SPACE(head, tail, PTP_TS_BUFFER_SIZE) == 0) if (CIRC_SPACE(head, tail, PTP_TS_BUFFER_SIZE) == 0)
return -ENOMEM; return -ENOMEM;
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
desc_ptp = macb_ptp_desc(queue->bp, desc); desc_ptp = macb_ptp_desc(queue->bp, desc);
/* Unlikely but check */
if (!desc_ptp)
return -EINVAL;
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
tx_timestamp = &queue->tx_timestamps[head]; tx_timestamp = &queue->tx_timestamps[head];
tx_timestamp->skb = skb; tx_timestamp->skb = skb;
/* ensure ts_1/ts_2 is loaded after ctrl (TX_USED check) */ /* ensure ts_1/ts_2 is loaded after ctrl (TX_USED check) */

View File

@ -616,7 +616,12 @@ static int qed_enable_msix(struct qed_dev *cdev,
rc = cnt; rc = cnt;
} }
if (rc > 0) { /* For VFs, we should return with an error in case we didn't get the
* exact number of msix vectors as we requested.
* Not doing that will lead to a crash when starting queues for
* this VF.
*/
if ((IS_PF(cdev) && rc > 0) || (IS_VF(cdev) && rc == cnt)) {
/* MSI-x configuration was achieved */ /* MSI-x configuration was achieved */
int_params->out.int_mode = QED_INT_MODE_MSIX; int_params->out.int_mode = QED_INT_MODE_MSIX;
int_params->out.num_vectors = rc; int_params->out.num_vectors = rc;

View File

@ -1874,6 +1874,7 @@ static void qede_sync_free_irqs(struct qede_dev *edev)
} }
edev->int_info.used_cnt = 0; edev->int_info.used_cnt = 0;
edev->int_info.msix_cnt = 0;
} }
static int qede_req_msix_irqs(struct qede_dev *edev) static int qede_req_msix_irqs(struct qede_dev *edev)
@ -2427,7 +2428,6 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,
goto out; goto out;
err4: err4:
qede_sync_free_irqs(edev); qede_sync_free_irqs(edev);
memset(&edev->int_info.msix_cnt, 0, sizeof(struct qed_int_info));
err3: err3:
qede_napi_disable_remove(edev); qede_napi_disable_remove(edev);
err2: err2:

View File

@ -53,7 +53,8 @@ static int zynqmp_reset_status(struct reset_controller_dev *rcdev,
unsigned long id) unsigned long id)
{ {
struct zynqmp_reset_data *priv = to_zynqmp_reset_data(rcdev); struct zynqmp_reset_data *priv = to_zynqmp_reset_data(rcdev);
int val, err; int err;
u32 val;
err = zynqmp_pm_reset_get_status(priv->data->reset_id + id, &val); err = zynqmp_pm_reset_get_status(priv->data->reset_id + id, &val);
if (err) if (err)

View File

@ -1110,10 +1110,8 @@ static int cp210x_set_chars(struct usb_serial_port *port,
kfree(dmabuf); kfree(dmabuf);
if (result < 0) { if (result < 0)
dev_err(&port->dev, "failed to set special chars: %d\n", result);
return result; return result;
}
return 0; return 0;
} }
@ -1138,6 +1136,7 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
struct cp210x_flow_ctl flow_ctl; struct cp210x_flow_ctl flow_ctl;
u32 flow_repl; u32 flow_repl;
u32 ctl_hs; u32 ctl_hs;
bool crtscts;
int ret; int ret;
/* /*
@ -1165,8 +1164,10 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
chars.bXoffChar = STOP_CHAR(tty); chars.bXoffChar = STOP_CHAR(tty);
ret = cp210x_set_chars(port, &chars); ret = cp210x_set_chars(port, &chars);
if (ret) if (ret) {
return; dev_err(&port->dev, "failed to set special chars: %d\n",
ret);
}
} }
mutex_lock(&port_priv->mutex); mutex_lock(&port_priv->mutex);
@ -1195,14 +1196,14 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
flow_repl |= CP210X_SERIAL_RTS_FLOW_CTL; flow_repl |= CP210X_SERIAL_RTS_FLOW_CTL;
else else
flow_repl |= CP210X_SERIAL_RTS_INACTIVE; flow_repl |= CP210X_SERIAL_RTS_INACTIVE;
port_priv->crtscts = true; crtscts = true;
} else { } else {
ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE; ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE;
if (port_priv->rts) if (port_priv->rts)
flow_repl |= CP210X_SERIAL_RTS_ACTIVE; flow_repl |= CP210X_SERIAL_RTS_ACTIVE;
else else
flow_repl |= CP210X_SERIAL_RTS_INACTIVE; flow_repl |= CP210X_SERIAL_RTS_INACTIVE;
port_priv->crtscts = false; crtscts = false;
} }
if (I_IXOFF(tty)) { if (I_IXOFF(tty)) {
@ -1225,8 +1226,12 @@ static void cp210x_set_flow_control(struct tty_struct *tty,
flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs); flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs);
flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl); flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl, ret = cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
sizeof(flow_ctl)); sizeof(flow_ctl));
if (ret)
goto out_unlock;
port_priv->crtscts = crtscts;
out_unlock: out_unlock:
mutex_unlock(&port_priv->mutex); mutex_unlock(&port_priv->mutex);
} }

View File

@ -433,6 +433,7 @@ static int pl2303_detect_type(struct usb_serial *serial)
switch (bcdDevice) { switch (bcdDevice) {
case 0x100: case 0x100:
case 0x305: case 0x305:
case 0x405:
/* /*
* Assume it's an HXN-type if the device doesn't * Assume it's an HXN-type if the device doesn't
* support the old read request value. * support the old read request value.

View File

@ -394,9 +394,11 @@ void ceph_mdsmap_destroy(struct ceph_mdsmap *m)
{ {
int i; int i;
for (i = 0; i < m->possible_max_rank; i++) if (m->m_info) {
kfree(m->m_info[i].export_targets); for (i = 0; i < m->possible_max_rank; i++)
kfree(m->m_info); kfree(m->m_info[i].export_targets);
kfree(m->m_info);
}
kfree(m->m_data_pg_pools); kfree(m->m_data_pg_pools);
kfree(m); kfree(m);
} }

View File

@ -750,6 +750,12 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,
ext4_write_lock_xattr(inode, &no_expand); ext4_write_lock_xattr(inode, &no_expand);
BUG_ON(!ext4_has_inline_data(inode)); BUG_ON(!ext4_has_inline_data(inode));
/*
* ei->i_inline_off may have changed since ext4_write_begin()
* called ext4_try_to_write_inline_data()
*/
(void) ext4_find_inline_data_nolock(inode);
kaddr = kmap_atomic(page); kaddr = kmap_atomic(page);
ext4_write_inline_data(inode, &iloc, kaddr, pos, len); ext4_write_inline_data(inode, &iloc, kaddr, pos, len);
kunmap_atomic(kaddr); kunmap_atomic(kaddr);

View File

@ -5051,6 +5051,14 @@ no_journal:
err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
GFP_KERNEL); GFP_KERNEL);
} }
/*
* Update the checksum after updating free space/inode
* counters. Otherwise the superblock can have an incorrect
* checksum in the buffer cache until it is written out and
* e2fsprogs programs trying to open a file system immediately
* after it is mounted can fail.
*/
ext4_superblock_csum_set(sb);
if (!err) if (!err)
err = percpu_counter_init(&sbi->s_dirs_counter, err = percpu_counter_init(&sbi->s_dirs_counter,
ext4_count_dirs(sb), GFP_KERNEL); ext4_count_dirs(sb), GFP_KERNEL);

View File

@ -1746,7 +1746,7 @@ static int snd_pcm_lib_ioctl_fifo_size(struct snd_pcm_substream *substream,
channels = params_channels(params); channels = params_channels(params);
frame_size = snd_pcm_format_size(format, channels); frame_size = snd_pcm_format_size(format, channels);
if (frame_size > 0) if (frame_size > 0)
params->fifo_size /= (unsigned)frame_size; params->fifo_size /= frame_size;
} }
return 0; return 0;
} }

View File

@ -8378,6 +8378,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x87f2, "HP ProBook 640 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED), SND_PCI_QUIRK(0x103c, 0x87f2, "HP ProBook 640 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED), SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED), SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
SND_PCI_QUIRK(0x103c, 0x87f6, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP), SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED), SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
@ -9456,6 +9457,16 @@ static int patch_alc269(struct hda_codec *codec)
snd_hda_pick_fixup(codec, alc269_fixup_models, snd_hda_pick_fixup(codec, alc269_fixup_models,
alc269_fixup_tbl, alc269_fixups); alc269_fixup_tbl, alc269_fixups);
/* FIXME: both TX300 and ROG Strix G17 have the same SSID, and
* the quirk breaks the latter (bko#214101).
* Clear the wrong entry.
*/
if (codec->fixup_id == ALC282_FIXUP_ASUS_TX300 &&
codec->core.vendor_id == 0x10ec0294) {
codec_dbg(codec, "Clear wrong fixup for ASUS ROG Strix G17\n");
codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
}
snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups, true); snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups, true);
snd_hda_pick_pin_fixup(codec, alc269_fallback_pin_fixup_tbl, alc269_fixups, false); snd_hda_pick_pin_fixup(codec, alc269_fallback_pin_fixup_tbl, alc269_fixups, false);
snd_hda_pick_fixup(codec, NULL, alc269_fixup_vendor_tbl, snd_hda_pick_fixup(codec, NULL, alc269_fixup_vendor_tbl,

View File

@ -1286,6 +1286,11 @@ int snd_usb_endpoint_configure(struct snd_usb_audio *chip,
* to be set up before parameter setups * to be set up before parameter setups
*/ */
iface_first = ep->cur_audiofmt->protocol == UAC_VERSION_1; iface_first = ep->cur_audiofmt->protocol == UAC_VERSION_1;
/* Workaround for Sony WALKMAN NW-A45 DAC;
* it requires the interface setup at first like UAC1
*/
if (chip->usb_id == USB_ID(0x054c, 0x0b8c))
iface_first = true;
if (iface_first) { if (iface_first) {
err = endpoint_set_interface(chip, ep, true); err = endpoint_set_interface(chip, ep, true);
if (err < 0) if (err < 0)