Merge 6.1.52 into android14-6.1-lts
Changes in 6.1.52 erofs: ensure that the post-EOF tails are all zeroed ksmbd: fix wrong DataOffset validation of create context ksmbd: fix slub overflow in ksmbd_decode_ntlmssp_auth_blob() ksmbd: replace one-element array with flex-array member in struct smb2_ea_info ksmbd: reduce descriptor size if remaining bytes is less than request size ARM: pxa: remove use of symbol_get() mmc: au1xmmc: force non-modular build and remove symbol_get usage net: enetc: use EXPORT_SYMBOL_GPL for enetc_phc_index rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules USB: serial: option: add Quectel EM05G variant (0x030e) USB: serial: option: add FOXCONN T99W368/T99W373 product ALSA: usb-audio: Fix init call orders for UAC1 usb: dwc3: meson-g12a: do post init to fix broken usb after resumption usb: chipidea: imx: improve logic if samsung,picophy-* parameter is 0 HID: wacom: remove the battery when the EKR is off staging: rtl8712: fix race condition Bluetooth: btsdio: fix use after free bug in btsdio_remove due to race condition wifi: mt76: mt7921: do not support one stream on secondary antenna only wifi: mt76: mt7921: fix skb leak by txs missing in AMSDU serial: qcom-geni: fix opp vote on shutdown serial: sc16is7xx: fix broken port 0 uart init serial: sc16is7xx: fix bug when first setting GPIO direction firmware: stratix10-svc: Fix an NULL vs IS_ERR() bug in probe fsi: master-ast-cf: Add MODULE_FIRMWARE macro tcpm: Avoid soft reset when partner does not support get_status dt-bindings: sc16is7xx: Add property to change GPIO function nilfs2: fix general protection fault in nilfs_lookup_dirty_data_buffers() nilfs2: fix WARNING in mark_buffer_dirty due to discarded buffer reuse usb: typec: tcpci: clear the fault status bit pinctrl: amd: Don't show `Invalid config param` errors Linux 6.1.52 Change-Id: Ib4c22b576e21092107915e5212b713174028c68d Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
7454138ade
@ -23,6 +23,9 @@ Optional properties:
|
||||
1 = active low.
|
||||
- irda-mode-ports: An array that lists the indices of the port that
|
||||
should operate in IrDA mode.
|
||||
- nxp,modem-control-line-ports: An array that lists the indices of the port that
|
||||
should have shared GPIO lines configured as
|
||||
modem control lines.
|
||||
|
||||
Example:
|
||||
sc16is750: sc16is750@51 {
|
||||
@ -35,6 +38,26 @@ Example:
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@53 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x53>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */
|
||||
gpio-controller; /* Port 0 as GPIOs */
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@54 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x54>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */
|
||||
};
|
||||
|
||||
* spi as bus
|
||||
|
||||
Required properties:
|
||||
@ -59,6 +82,9 @@ Optional properties:
|
||||
1 = active low.
|
||||
- irda-mode-ports: An array that lists the indices of the port that
|
||||
should operate in IrDA mode.
|
||||
- nxp,modem-control-line-ports: An array that lists the indices of the port that
|
||||
should have shared GPIO lines configured as
|
||||
modem control lines.
|
||||
|
||||
Example:
|
||||
sc16is750: sc16is750@0 {
|
||||
@ -70,3 +96,23 @@ Example:
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@1 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <1>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */
|
||||
gpio-controller; /* Port 0 as GPIOs */
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@2 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <2>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */
|
||||
};
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 1
|
||||
SUBLEVEL = 51
|
||||
SUBLEVEL = 52
|
||||
EXTRAVERSION =
|
||||
NAME = Curry Ramen
|
||||
|
||||
|
@ -220,8 +220,6 @@ void sharpsl_battery_kick(void)
|
||||
{
|
||||
schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125));
|
||||
}
|
||||
EXPORT_SYMBOL(sharpsl_battery_kick);
|
||||
|
||||
|
||||
static void sharpsl_battery_thread(struct work_struct *private_)
|
||||
{
|
||||
|
@ -9,7 +9,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h> /* symbol_get ; symbol_put */
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
@ -510,17 +509,6 @@ static struct ads7846_platform_data spitz_ads7846_info = {
|
||||
.wait_for_sync = spitz_ads7846_wait_for_hsync,
|
||||
};
|
||||
|
||||
static void spitz_bl_kick_battery(void)
|
||||
{
|
||||
void (*kick_batt)(void);
|
||||
|
||||
kick_batt = symbol_get(sharpsl_battery_kick);
|
||||
if (kick_batt) {
|
||||
kick_batt();
|
||||
symbol_put(sharpsl_battery_kick);
|
||||
}
|
||||
}
|
||||
|
||||
static struct gpiod_lookup_table spitz_lcdcon_gpio_table = {
|
||||
.dev_id = "spi2.1",
|
||||
.table = {
|
||||
@ -548,7 +536,7 @@ static struct corgi_lcd_platform_data spitz_lcdcon_info = {
|
||||
.max_intensity = 0x2f,
|
||||
.default_intensity = 0x1f,
|
||||
.limit_mask = 0x0b,
|
||||
.kick_battery = spitz_bl_kick_battery,
|
||||
.kick_battery = sharpsl_battery_kick,
|
||||
};
|
||||
|
||||
static struct spi_board_info spitz_spi_devices[] = {
|
||||
|
@ -14,7 +14,6 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/spi/spi.h>
|
||||
@ -167,12 +166,7 @@ static struct platform_device db1x00_audio_dev = {
|
||||
|
||||
static irqreturn_t db1100_mmc_cd(int irq, void *ptr)
|
||||
{
|
||||
void (*mmc_cd)(struct mmc_host *, unsigned long);
|
||||
/* link against CONFIG_MMC=m */
|
||||
mmc_cd = symbol_get(mmc_detect_change);
|
||||
mmc_cd(ptr, msecs_to_jiffies(500));
|
||||
symbol_put(mmc_detect_change);
|
||||
|
||||
mmc_detect_change(ptr, msecs_to_jiffies(500));
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/leds.h>
|
||||
@ -340,14 +339,7 @@ static irqreturn_t db1200_mmc_cd(int irq, void *ptr)
|
||||
|
||||
static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr)
|
||||
{
|
||||
void (*mmc_cd)(struct mmc_host *, unsigned long);
|
||||
|
||||
/* link against CONFIG_MMC=m */
|
||||
mmc_cd = symbol_get(mmc_detect_change);
|
||||
if (mmc_cd) {
|
||||
mmc_cd(ptr, msecs_to_jiffies(200));
|
||||
symbol_put(mmc_detect_change);
|
||||
}
|
||||
mmc_detect_change(ptr, msecs_to_jiffies(200));
|
||||
|
||||
msleep(100); /* debounce */
|
||||
if (irq == DB1200_SD0_INSERT_INT)
|
||||
@ -431,14 +423,7 @@ static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr)
|
||||
|
||||
static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr)
|
||||
{
|
||||
void (*mmc_cd)(struct mmc_host *, unsigned long);
|
||||
|
||||
/* link against CONFIG_MMC=m */
|
||||
mmc_cd = symbol_get(mmc_detect_change);
|
||||
if (mmc_cd) {
|
||||
mmc_cd(ptr, msecs_to_jiffies(200));
|
||||
symbol_put(mmc_detect_change);
|
||||
}
|
||||
mmc_detect_change(ptr, msecs_to_jiffies(200));
|
||||
|
||||
msleep(100); /* debounce */
|
||||
if (irq == PB1200_SD1_INSERT_INT)
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/platnand.h>
|
||||
#include <linux/platform_device.h>
|
||||
@ -459,14 +458,7 @@ static irqreturn_t db1300_mmc_cd(int irq, void *ptr)
|
||||
|
||||
static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr)
|
||||
{
|
||||
void (*mmc_cd)(struct mmc_host *, unsigned long);
|
||||
|
||||
/* link against CONFIG_MMC=m. We can only be called once MMC core has
|
||||
* initialized the controller, so symbol_get() should always succeed.
|
||||
*/
|
||||
mmc_cd = symbol_get(mmc_detect_change);
|
||||
mmc_cd(ptr, msecs_to_jiffies(200));
|
||||
symbol_put(mmc_detect_change);
|
||||
mmc_detect_change(ptr, msecs_to_jiffies(200));
|
||||
|
||||
msleep(100); /* debounce */
|
||||
if (irq == DB1300_SD1_INSERT_INT)
|
||||
|
@ -357,6 +357,7 @@ static void btsdio_remove(struct sdio_func *func)
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
cancel_work_sync(&data->work);
|
||||
hdev = data->hdev;
|
||||
|
||||
sdio_set_drvdata(func, NULL);
|
||||
|
@ -756,7 +756,7 @@ svc_create_memory_pool(struct platform_device *pdev,
|
||||
paddr = begin;
|
||||
size = end - begin;
|
||||
va = devm_memremap(dev, paddr, size, MEMREMAP_WC);
|
||||
if (!va) {
|
||||
if (IS_ERR(va)) {
|
||||
dev_err(dev, "fail to remap shared memory\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
@ -1441,3 +1441,4 @@ static struct platform_driver fsi_master_acf = {
|
||||
|
||||
module_platform_driver(fsi_master_acf);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_FIRMWARE(FW_FILE_NAME);
|
||||
|
@ -150,6 +150,7 @@ struct wacom_remote {
|
||||
struct input_dev *input;
|
||||
bool registered;
|
||||
struct wacom_battery battery;
|
||||
ktime_t active_time;
|
||||
} remotes[WACOM_MAX_REMOTES];
|
||||
};
|
||||
|
||||
|
@ -2527,6 +2527,18 @@ static void wacom_wireless_work(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
static void wacom_remote_destroy_battery(struct wacom *wacom, int index)
|
||||
{
|
||||
struct wacom_remote *remote = wacom->remote;
|
||||
|
||||
if (remote->remotes[index].battery.battery) {
|
||||
devres_release_group(&wacom->hdev->dev,
|
||||
&remote->remotes[index].battery.bat_desc);
|
||||
remote->remotes[index].battery.battery = NULL;
|
||||
remote->remotes[index].active_time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
|
||||
{
|
||||
struct wacom_remote *remote = wacom->remote;
|
||||
@ -2541,9 +2553,7 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
|
||||
remote->remotes[i].registered = false;
|
||||
spin_unlock_irqrestore(&remote->remote_lock, flags);
|
||||
|
||||
if (remote->remotes[i].battery.battery)
|
||||
devres_release_group(&wacom->hdev->dev,
|
||||
&remote->remotes[i].battery.bat_desc);
|
||||
wacom_remote_destroy_battery(wacom, i);
|
||||
|
||||
if (remote->remotes[i].group.name)
|
||||
devres_release_group(&wacom->hdev->dev,
|
||||
@ -2551,7 +2561,6 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
|
||||
|
||||
remote->remotes[i].serial = 0;
|
||||
remote->remotes[i].group.name = NULL;
|
||||
remote->remotes[i].battery.battery = NULL;
|
||||
wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
|
||||
}
|
||||
}
|
||||
@ -2636,6 +2645,9 @@ static int wacom_remote_attach_battery(struct wacom *wacom, int index)
|
||||
if (remote->remotes[index].battery.battery)
|
||||
return 0;
|
||||
|
||||
if (!remote->remotes[index].active_time)
|
||||
return 0;
|
||||
|
||||
if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
|
||||
return 0;
|
||||
|
||||
@ -2651,6 +2663,7 @@ static void wacom_remote_work(struct work_struct *work)
|
||||
{
|
||||
struct wacom *wacom = container_of(work, struct wacom, remote_work);
|
||||
struct wacom_remote *remote = wacom->remote;
|
||||
ktime_t kt = ktime_get();
|
||||
struct wacom_remote_data data;
|
||||
unsigned long flags;
|
||||
unsigned int count;
|
||||
@ -2677,6 +2690,10 @@ static void wacom_remote_work(struct work_struct *work)
|
||||
serial = data.remote[i].serial;
|
||||
if (data.remote[i].connected) {
|
||||
|
||||
if (kt - remote->remotes[i].active_time > WACOM_REMOTE_BATTERY_TIMEOUT
|
||||
&& remote->remotes[i].active_time != 0)
|
||||
wacom_remote_destroy_battery(wacom, i);
|
||||
|
||||
if (remote->remotes[i].serial == serial) {
|
||||
wacom_remote_attach_battery(wacom, i);
|
||||
continue;
|
||||
|
@ -1129,6 +1129,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len)
|
||||
if (index < 0 || !remote->remotes[index].registered)
|
||||
goto out;
|
||||
|
||||
remote->remotes[i].active_time = ktime_get();
|
||||
input = remote->remotes[index].input;
|
||||
|
||||
input_report_key(input, BTN_0, (data[9] & 0x01));
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define WACOM_NAME_MAX 64
|
||||
#define WACOM_MAX_REMOTES 5
|
||||
#define WACOM_STATUS_UNKNOWN 255
|
||||
#define WACOM_REMOTE_BATTERY_TIMEOUT 21000000000ll
|
||||
|
||||
/* packet length for individual models */
|
||||
#define WACOM_PKGLEN_BBFUN 9
|
||||
|
@ -528,11 +528,12 @@ config MMC_ALCOR
|
||||
of Alcor Micro PCI-E card reader
|
||||
|
||||
config MMC_AU1X
|
||||
tristate "Alchemy AU1XX0 MMC Card Interface support"
|
||||
bool "Alchemy AU1XX0 MMC Card Interface support"
|
||||
depends on MIPS_ALCHEMY
|
||||
depends on MMC=y
|
||||
help
|
||||
This selects the AMD Alchemy(R) Multimedia card interface.
|
||||
If you have a Alchemy platform with a MMC slot, say Y or M here.
|
||||
If you have a Alchemy platform with a MMC slot, say Y here.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "enetc.h"
|
||||
|
||||
int enetc_phc_index = -1;
|
||||
EXPORT_SYMBOL(enetc_phc_index);
|
||||
EXPORT_SYMBOL_GPL(enetc_phc_index);
|
||||
|
||||
static struct ptp_clock_info enetc_ptp_caps = {
|
||||
.owner = THIS_MODULE,
|
||||
|
@ -465,6 +465,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
|
||||
BSS_CHANGED_BEACON_ENABLED));
|
||||
bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
|
||||
BSS_CHANGED_FILS_DISCOVERY));
|
||||
bool amsdu_en = wcid->amsdu;
|
||||
|
||||
if (vif) {
|
||||
struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
|
||||
@ -524,12 +525,14 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
|
||||
txwi[4] = 0;
|
||||
|
||||
val = FIELD_PREP(MT_TXD5_PID, pid);
|
||||
if (pid >= MT_PACKET_ID_FIRST)
|
||||
if (pid >= MT_PACKET_ID_FIRST) {
|
||||
val |= MT_TXD5_TX_STATUS_HOST;
|
||||
amsdu_en = amsdu_en && !is_mt7921(dev);
|
||||
}
|
||||
|
||||
txwi[5] = cpu_to_le32(val);
|
||||
txwi[6] = 0;
|
||||
txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
|
||||
txwi[7] = amsdu_en ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
|
||||
|
||||
if (is_8023)
|
||||
mt76_connac2_mac_write_txwi_8023(txwi, skb, wcid);
|
||||
|
@ -1280,7 +1280,7 @@ mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
|
||||
return -EINVAL;
|
||||
|
||||
if ((BIT(hweight8(tx_ant)) - 1) != tx_ant)
|
||||
tx_ant = BIT(ffs(tx_ant) - 1) - 1;
|
||||
return -EINVAL;
|
||||
|
||||
mt7921_mutex_acquire(dev);
|
||||
|
||||
|
@ -748,7 +748,7 @@ static int amd_pinconf_get(struct pinctrl_dev *pctldev,
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(&gpio_dev->pdev->dev, "Invalid config param %04x\n",
|
||||
dev_dbg(&gpio_dev->pdev->dev, "Invalid config param %04x\n",
|
||||
param);
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
@ -798,7 +798,7 @@ static int amd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(&gpio_dev->pdev->dev,
|
||||
dev_dbg(&gpio_dev->pdev->dev,
|
||||
"Invalid config param %04x\n", param);
|
||||
ret = -ENOTSUPP;
|
||||
}
|
||||
|
@ -1434,7 +1434,7 @@ ds1685_rtc_poweroff(struct platform_device *pdev)
|
||||
unreachable();
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ds1685_rtc_poweroff);
|
||||
EXPORT_SYMBOL_GPL(ds1685_rtc_poweroff);
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
|
||||
|
@ -323,6 +323,7 @@ int r8712_init_drv_sw(struct _adapter *padapter)
|
||||
mp871xinit(padapter);
|
||||
init_default_value(padapter);
|
||||
r8712_InitSwLeds(padapter);
|
||||
mutex_init(&padapter->mutex_start);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -567,7 +567,6 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,
|
||||
if (rtl871x_load_fw(padapter))
|
||||
goto deinit_drv_sw;
|
||||
init_completion(&padapter->rx_filter_ready);
|
||||
mutex_init(&padapter->mutex_start);
|
||||
return 0;
|
||||
|
||||
deinit_drv_sw:
|
||||
|
@ -129,6 +129,7 @@ struct qcom_geni_serial_port {
|
||||
u32 tx_fifo_width;
|
||||
u32 rx_fifo_depth;
|
||||
bool setup;
|
||||
unsigned long clk_rate;
|
||||
int (*handle_rx)(struct uart_port *uport, u32 bytes, bool drop);
|
||||
unsigned int baud;
|
||||
void *rx_fifo;
|
||||
@ -1062,6 +1063,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport,
|
||||
baud * sampling_rate, clk_rate, clk_div);
|
||||
|
||||
uport->uartclk = clk_rate;
|
||||
port->clk_rate = clk_rate;
|
||||
dev_pm_opp_set_rate(uport->dev, clk_rate);
|
||||
ser_clk_cfg = SER_CLK_EN;
|
||||
ser_clk_cfg |= clk_div << CLK_DIV_SHFT;
|
||||
@ -1331,10 +1333,13 @@ static void qcom_geni_serial_pm(struct uart_port *uport,
|
||||
|
||||
if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF) {
|
||||
geni_icc_enable(&port->se);
|
||||
if (port->clk_rate)
|
||||
dev_pm_opp_set_rate(uport->dev, port->clk_rate);
|
||||
geni_se_resources_on(&port->se);
|
||||
} else if (new_state == UART_PM_STATE_OFF &&
|
||||
old_state == UART_PM_STATE_ON) {
|
||||
geni_se_resources_off(&port->se);
|
||||
dev_pm_opp_set_rate(uport->dev, 0);
|
||||
geni_icc_disable(&port->se);
|
||||
}
|
||||
}
|
||||
|
@ -1345,9 +1345,18 @@ static int sc16is7xx_gpio_direction_output(struct gpio_chip *chip,
|
||||
state |= BIT(offset);
|
||||
else
|
||||
state &= ~BIT(offset);
|
||||
sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state);
|
||||
|
||||
/*
|
||||
* If we write IOSTATE first, and then IODIR, the output value is not
|
||||
* transferred to the corresponding I/O pin.
|
||||
* The datasheet states that each register bit will be transferred to
|
||||
* the corresponding I/O pin programmed as output when writing to
|
||||
* IOSTATE. Therefore, configure direction first with IODIR, and then
|
||||
* set value after with IOSTATE.
|
||||
*/
|
||||
sc16is7xx_port_update(port, SC16IS7XX_IODIR_REG, BIT(offset),
|
||||
BIT(offset));
|
||||
sc16is7xx_port_write(port, SC16IS7XX_IOSTATE_REG, state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1439,6 +1448,12 @@ static int sc16is7xx_probe(struct device *dev,
|
||||
s->p[i].port.fifosize = SC16IS7XX_FIFO_SIZE;
|
||||
s->p[i].port.flags = UPF_FIXED_TYPE | UPF_LOW_LATENCY;
|
||||
s->p[i].port.iobase = i;
|
||||
/*
|
||||
* Use all ones as membase to make sure uart_configure_port() in
|
||||
* serial_core.c does not abort for SPI/I2C devices where the
|
||||
* membase address is not applicable.
|
||||
*/
|
||||
s->p[i].port.membase = (void __iomem *)~0;
|
||||
s->p[i].port.iotype = UPIO_PORT;
|
||||
s->p[i].port.uartclk = freq;
|
||||
s->p[i].port.rs485_config = sc16is7xx_config_rs485;
|
||||
|
@ -175,10 +175,12 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)
|
||||
if (of_usb_get_phy_mode(np) == USBPHY_INTERFACE_MODE_ULPI)
|
||||
data->ulpi = 1;
|
||||
|
||||
of_property_read_u32(np, "samsung,picophy-pre-emp-curr-control",
|
||||
&data->emp_curr_control);
|
||||
of_property_read_u32(np, "samsung,picophy-dc-vol-level-adjust",
|
||||
&data->dc_vol_level_adjust);
|
||||
if (of_property_read_u32(np, "samsung,picophy-pre-emp-curr-control",
|
||||
&data->emp_curr_control))
|
||||
data->emp_curr_control = -1;
|
||||
if (of_property_read_u32(np, "samsung,picophy-dc-vol-level-adjust",
|
||||
&data->dc_vol_level_adjust))
|
||||
data->dc_vol_level_adjust = -1;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -657,13 +657,15 @@ static int usbmisc_imx7d_init(struct imx_usbmisc_data *data)
|
||||
usbmisc->base + MX7D_USBNC_USB_CTRL2);
|
||||
/* PHY tuning for signal quality */
|
||||
reg = readl(usbmisc->base + MX7D_USB_OTG_PHY_CFG1);
|
||||
if (data->emp_curr_control && data->emp_curr_control <=
|
||||
if (data->emp_curr_control >= 0 &&
|
||||
data->emp_curr_control <=
|
||||
(TXPREEMPAMPTUNE0_MASK >> TXPREEMPAMPTUNE0_BIT)) {
|
||||
reg &= ~TXPREEMPAMPTUNE0_MASK;
|
||||
reg |= (data->emp_curr_control << TXPREEMPAMPTUNE0_BIT);
|
||||
}
|
||||
|
||||
if (data->dc_vol_level_adjust && data->dc_vol_level_adjust <=
|
||||
if (data->dc_vol_level_adjust >= 0 &&
|
||||
data->dc_vol_level_adjust <=
|
||||
(TXVREFTUNE0_MASK >> TXVREFTUNE0_BIT)) {
|
||||
reg &= ~TXVREFTUNE0_MASK;
|
||||
reg |= (data->dc_vol_level_adjust << TXVREFTUNE0_BIT);
|
||||
|
@ -938,6 +938,12 @@ static int __maybe_unused dwc3_meson_g12a_resume(struct device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (priv->drvdata->usb_post_init) {
|
||||
ret = priv->drvdata->usb_post_init(priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -259,6 +259,7 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define QUECTEL_PRODUCT_EM05G 0x030a
|
||||
#define QUECTEL_PRODUCT_EM060K 0x030b
|
||||
#define QUECTEL_PRODUCT_EM05G_CS 0x030c
|
||||
#define QUECTEL_PRODUCT_EM05GV2 0x030e
|
||||
#define QUECTEL_PRODUCT_EM05CN_SG 0x0310
|
||||
#define QUECTEL_PRODUCT_EM05G_SG 0x0311
|
||||
#define QUECTEL_PRODUCT_EM05CN 0x0312
|
||||
@ -1190,6 +1191,8 @@ static const struct usb_device_id option_ids[] = {
|
||||
.driver_info = RSVD(6) | ZLP },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff),
|
||||
.driver_info = RSVD(6) | ZLP },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05GV2, 0xff),
|
||||
.driver_info = RSVD(4) | ZLP },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff),
|
||||
.driver_info = RSVD(6) | ZLP },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_RS, 0xff),
|
||||
@ -2232,6 +2235,10 @@ static const struct usb_device_id option_ids[] = {
|
||||
.driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */
|
||||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */
|
||||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0f0, 0xff), /* Foxconn T99W373 MBIM */
|
||||
.driver_info = RSVD(3) },
|
||||
{ USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */
|
||||
.driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
|
||||
{ USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */
|
||||
|
@ -609,6 +609,10 @@ static int tcpci_init(struct tcpc_dev *tcpc)
|
||||
if (time_after(jiffies, timeout))
|
||||
return -ETIMEDOUT;
|
||||
|
||||
ret = tcpci_write16(tcpci, TCPC_FAULT_STATUS, TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Handle vendor init */
|
||||
if (tcpci->data->init) {
|
||||
ret = tcpci->data->init(tcpci, tcpci->data);
|
||||
|
@ -2762,6 +2762,13 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
||||
port->sink_cap_done = true;
|
||||
tcpm_set_state(port, ready_state(port), 0);
|
||||
break;
|
||||
/*
|
||||
* Some port partners do not support GET_STATUS, avoid soft reset the link to
|
||||
* prevent redundant power re-negotiation
|
||||
*/
|
||||
case GET_STATUS_SEND:
|
||||
tcpm_set_state(port, ready_state(port), 0);
|
||||
break;
|
||||
case SRC_READY:
|
||||
case SNK_READY:
|
||||
if (port->vdm_state > VDM_STATE_READY) {
|
||||
|
@ -996,6 +996,8 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe,
|
||||
cur = end - min_t(erofs_off_t, offset + end - map->m_la, end);
|
||||
if (!(map->m_flags & EROFS_MAP_MAPPED)) {
|
||||
zero_user_segment(page, cur, end);
|
||||
++spiltted;
|
||||
tight = false;
|
||||
goto next_part;
|
||||
}
|
||||
if (map->m_flags & EROFS_MAP_FRAGMENT) {
|
||||
|
@ -205,7 +205,8 @@ static int nilfs_palloc_get_block(struct inode *inode, unsigned long blkoff,
|
||||
int ret;
|
||||
|
||||
spin_lock(lock);
|
||||
if (prev->bh && blkoff == prev->blkoff) {
|
||||
if (prev->bh && blkoff == prev->blkoff &&
|
||||
likely(buffer_uptodate(prev->bh))) {
|
||||
get_bh(prev->bh);
|
||||
*bhp = prev->bh;
|
||||
spin_unlock(lock);
|
||||
|
@ -1025,7 +1025,7 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh)
|
||||
int err;
|
||||
|
||||
spin_lock(&nilfs->ns_inode_lock);
|
||||
if (ii->i_bh == NULL) {
|
||||
if (ii->i_bh == NULL || unlikely(!buffer_uptodate(ii->i_bh))) {
|
||||
spin_unlock(&nilfs->ns_inode_lock);
|
||||
err = nilfs_ifile_get_inode_block(ii->i_root->ifile,
|
||||
inode->i_ino, pbh);
|
||||
@ -1034,7 +1034,10 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh)
|
||||
spin_lock(&nilfs->ns_inode_lock);
|
||||
if (ii->i_bh == NULL)
|
||||
ii->i_bh = *pbh;
|
||||
else {
|
||||
else if (unlikely(!buffer_uptodate(ii->i_bh))) {
|
||||
__brelse(ii->i_bh);
|
||||
ii->i_bh = *pbh;
|
||||
} else {
|
||||
brelse(*pbh);
|
||||
*pbh = ii->i_bh;
|
||||
}
|
||||
|
@ -725,6 +725,11 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode,
|
||||
struct page *page = pvec.pages[i];
|
||||
|
||||
lock_page(page);
|
||||
if (unlikely(page->mapping != mapping)) {
|
||||
/* Exclude pages removed from the address space */
|
||||
unlock_page(page);
|
||||
continue;
|
||||
}
|
||||
if (!page_has_buffers(page))
|
||||
create_empty_buffers(page, i_blocksize(inode), 0);
|
||||
unlock_page(page);
|
||||
|
@ -355,6 +355,9 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob,
|
||||
if (blob_len < (u64)sess_key_off + sess_key_len)
|
||||
return -EINVAL;
|
||||
|
||||
if (sess_key_len > CIFS_KEY_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
ctx_arc4 = kmalloc(sizeof(*ctx_arc4), GFP_KERNEL);
|
||||
if (!ctx_arc4)
|
||||
return -ENOMEM;
|
||||
|
@ -1492,7 +1492,7 @@ struct create_context *smb2_find_context_vals(void *open_req, const char *tag, i
|
||||
name_len < 4 ||
|
||||
name_off + name_len > cc_len ||
|
||||
(value_off & 0x7) != 0 ||
|
||||
(value_off && (value_off < name_off + name_len)) ||
|
||||
(value_len && value_off < name_off + (name_len < 8 ? 8 : name_len)) ||
|
||||
((u64)value_off + value_len > cc_len))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
|
@ -4322,7 +4322,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp,
|
||||
if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN))
|
||||
name_len -= XATTR_USER_PREFIX_LEN;
|
||||
|
||||
ptr = (char *)(&eainfo->name + name_len + 1);
|
||||
ptr = eainfo->name + name_len + 1;
|
||||
buf_free_len -= (offsetof(struct smb2_ea_info, name) +
|
||||
name_len + 1);
|
||||
/* bailout if xattr can't fit in buf_free_len */
|
||||
|
@ -410,7 +410,7 @@ struct smb2_ea_info {
|
||||
__u8 Flags;
|
||||
__u8 EaNameLength;
|
||||
__le16 EaValueLength;
|
||||
char name[1];
|
||||
char name[];
|
||||
/* optionally followed by value */
|
||||
} __packed; /* level 15 Query */
|
||||
|
||||
|
@ -1366,24 +1366,35 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
|
||||
LIST_HEAD(msg_list);
|
||||
char *desc_buf;
|
||||
int credits_needed;
|
||||
unsigned int desc_buf_len;
|
||||
size_t total_length = 0;
|
||||
unsigned int desc_buf_len, desc_num = 0;
|
||||
|
||||
if (t->status != SMB_DIRECT_CS_CONNECTED)
|
||||
return -ENOTCONN;
|
||||
|
||||
if (buf_len > t->max_rdma_rw_size)
|
||||
return -EINVAL;
|
||||
|
||||
/* calculate needed credits */
|
||||
credits_needed = 0;
|
||||
desc_buf = buf;
|
||||
for (i = 0; i < desc_len / sizeof(*desc); i++) {
|
||||
if (!buf_len)
|
||||
break;
|
||||
|
||||
desc_buf_len = le32_to_cpu(desc[i].length);
|
||||
if (!desc_buf_len)
|
||||
return -EINVAL;
|
||||
|
||||
if (desc_buf_len > buf_len) {
|
||||
desc_buf_len = buf_len;
|
||||
desc[i].length = cpu_to_le32(desc_buf_len);
|
||||
buf_len = 0;
|
||||
}
|
||||
|
||||
credits_needed += calc_rw_credits(t, desc_buf, desc_buf_len);
|
||||
desc_buf += desc_buf_len;
|
||||
total_length += desc_buf_len;
|
||||
if (desc_buf_len == 0 || total_length > buf_len ||
|
||||
total_length > t->max_rdma_rw_size)
|
||||
return -EINVAL;
|
||||
buf_len -= desc_buf_len;
|
||||
desc_num++;
|
||||
}
|
||||
|
||||
ksmbd_debug(RDMA, "RDMA %s, len %#x, needed credits %#x\n",
|
||||
@ -1395,7 +1406,7 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,
|
||||
|
||||
/* build rdma_rw_ctx for each descriptor */
|
||||
desc_buf = buf;
|
||||
for (i = 0; i < desc_len / sizeof(*desc); i++) {
|
||||
for (i = 0; i < desc_num; i++) {
|
||||
msg = kzalloc(offsetof(struct smb_direct_rdma_rw_msg, sg_list) +
|
||||
sizeof(struct scatterlist) * SG_CHUNK_SIZE, GFP_KERNEL);
|
||||
if (!msg) {
|
||||
|
@ -103,6 +103,7 @@
|
||||
#define TCPC_POWER_STATUS_SINKING_VBUS BIT(0)
|
||||
|
||||
#define TCPC_FAULT_STATUS 0x1f
|
||||
#define TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT BIT(7)
|
||||
|
||||
#define TCPC_ALERT_EXTENDED 0x21
|
||||
|
||||
|
@ -1236,12 +1236,20 @@ void *__symbol_get(const char *symbol)
|
||||
};
|
||||
|
||||
preempt_disable();
|
||||
if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) {
|
||||
preempt_enable();
|
||||
return NULL;
|
||||
if (!find_symbol(&fsa))
|
||||
goto fail;
|
||||
if (fsa.license != GPL_ONLY) {
|
||||
pr_warn("failing symbol_get of non-GPLONLY symbol %s.\n",
|
||||
symbol);
|
||||
goto fail;
|
||||
}
|
||||
if (strong_try_module_get(fsa.owner))
|
||||
goto fail;
|
||||
preempt_enable();
|
||||
return (void *)kernel_symbol_value(fsa.sym);
|
||||
fail:
|
||||
preempt_enable();
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__symbol_get);
|
||||
|
||||
|
@ -1093,6 +1093,7 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,
|
||||
int i, altno, err, stream;
|
||||
struct audioformat *fp = NULL;
|
||||
struct snd_usb_power_domain *pd = NULL;
|
||||
bool set_iface_first;
|
||||
int num, protocol;
|
||||
|
||||
dev = chip->dev;
|
||||
@ -1223,11 +1224,19 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,
|
||||
return err;
|
||||
}
|
||||
|
||||
set_iface_first = false;
|
||||
if (protocol == UAC_VERSION_1 ||
|
||||
(chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST))
|
||||
set_iface_first = true;
|
||||
|
||||
/* try to set the interface... */
|
||||
usb_set_interface(chip->dev, iface_no, 0);
|
||||
if (set_iface_first)
|
||||
usb_set_interface(chip->dev, iface_no, altno);
|
||||
snd_usb_init_pitch(chip, fp);
|
||||
snd_usb_init_sample_rate(chip, fp, fp->rate_max);
|
||||
usb_set_interface(chip->dev, iface_no, altno);
|
||||
if (!set_iface_first)
|
||||
usb_set_interface(chip->dev, iface_no, altno);
|
||||
if (protocol > UAC_VERSION_1)
|
||||
snd_vendor_set_interface(chip->dev, alts, iface_no, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user