Merge a6527128fe ("net/sched: act_ipt: add sanity checks on table name and hook locations") into android13-5.15-lts
Steps on the way to 5.15.121 Resolves merge conflicts in: sound/core/jack.c Change-Id: I814d63b0eaf28dba8918dd5385e12dfbcdb11dcd Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -166,6 +166,7 @@ static int diag9c_forwarding_overrun(void)
|
||||
static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_vcpu *tcpu;
|
||||
int tcpu_cpu;
|
||||
int tid;
|
||||
|
||||
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
||||
@@ -181,14 +182,15 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
||||
goto no_yield;
|
||||
|
||||
/* target guest VCPU already running */
|
||||
if (READ_ONCE(tcpu->cpu) >= 0) {
|
||||
tcpu_cpu = READ_ONCE(tcpu->cpu);
|
||||
if (tcpu_cpu >= 0) {
|
||||
if (!diag9c_forwarding_hz || diag9c_forwarding_overrun())
|
||||
goto no_yield;
|
||||
|
||||
/* target host CPU already running */
|
||||
if (!vcpu_is_preempted(tcpu->cpu))
|
||||
if (!vcpu_is_preempted(tcpu_cpu))
|
||||
goto no_yield;
|
||||
smp_yield_cpu(tcpu->cpu);
|
||||
smp_yield_cpu(tcpu_cpu);
|
||||
VCPU_EVENT(vcpu, 5,
|
||||
"diag time slice end directed to %d: yield forwarded",
|
||||
tid);
|
||||
|
||||
@@ -2030,6 +2030,10 @@ static unsigned long kvm_s390_next_dirty_cmma(struct kvm_memslots *slots,
|
||||
ms = slots->memslots + slotidx;
|
||||
ofs = 0;
|
||||
}
|
||||
|
||||
if (cur_gfn < ms->base_gfn)
|
||||
ofs = 0;
|
||||
|
||||
ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, ofs);
|
||||
while ((slotidx > 0) && (ofs >= ms->npages)) {
|
||||
slotidx--;
|
||||
|
||||
@@ -169,7 +169,8 @@ static int setup_apcb00(struct kvm_vcpu *vcpu, unsigned long *apcb_s,
|
||||
sizeof(struct kvm_s390_apcb0)))
|
||||
return -EFAULT;
|
||||
|
||||
bitmap_and(apcb_s, apcb_s, apcb_h, sizeof(struct kvm_s390_apcb0));
|
||||
bitmap_and(apcb_s, apcb_s, apcb_h,
|
||||
BITS_PER_BYTE * sizeof(struct kvm_s390_apcb0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -191,7 +192,8 @@ static int setup_apcb11(struct kvm_vcpu *vcpu, unsigned long *apcb_s,
|
||||
sizeof(struct kvm_s390_apcb1)))
|
||||
return -EFAULT;
|
||||
|
||||
bitmap_and(apcb_s, apcb_s, apcb_h, sizeof(struct kvm_s390_apcb1));
|
||||
bitmap_and(apcb_s, apcb_s, apcb_h,
|
||||
BITS_PER_BYTE * sizeof(struct kvm_s390_apcb1));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ static int __init scan_cache(unsigned long node, const char *uname,
|
||||
if (!of_flat_dt_is_compatible(node, "jcore,cache"))
|
||||
return 0;
|
||||
|
||||
j2_ccr_base = (u32 __iomem *)of_flat_dt_translate_address(node);
|
||||
j2_ccr_base = ioremap(of_flat_dt_translate_address(node), 4);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -307,6 +307,7 @@ bool disk_force_media_change(struct gendisk *disk, unsigned int events)
|
||||
if (!(events & DISK_EVENT_MEDIA_CHANGE))
|
||||
return false;
|
||||
|
||||
inc_diskseq(disk);
|
||||
if (__invalidate_device(disk->part0, true))
|
||||
pr_warn("VFS: busy inodes on changed media %s\n",
|
||||
disk->disk_name);
|
||||
|
||||
@@ -11,10 +11,18 @@
|
||||
#define pr_fmt(fmt) fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/overflow.h>
|
||||
#include <linux/affs_hardblocks.h>
|
||||
|
||||
#include "check.h"
|
||||
|
||||
/* magic offsets in partition DosEnvVec */
|
||||
#define NR_HD 3
|
||||
#define NR_SECT 5
|
||||
#define LO_CYL 9
|
||||
#define HI_CYL 10
|
||||
|
||||
static __inline__ u32
|
||||
checksum_block(__be32 *m, int size)
|
||||
{
|
||||
@@ -31,8 +39,12 @@ int amiga_partition(struct parsed_partitions *state)
|
||||
unsigned char *data;
|
||||
struct RigidDiskBlock *rdb;
|
||||
struct PartitionBlock *pb;
|
||||
int start_sect, nr_sects, blk, part, res = 0;
|
||||
int blksize = 1; /* Multiplier for disk block size */
|
||||
u64 start_sect, nr_sects;
|
||||
sector_t blk, end_sect;
|
||||
u32 cylblk; /* rdb_CylBlocks = nr_heads*sect_per_track */
|
||||
u32 nr_hd, nr_sect, lo_cyl, hi_cyl;
|
||||
int part, res = 0;
|
||||
unsigned int blksize = 1; /* Multiplier for disk block size */
|
||||
int slot = 1;
|
||||
|
||||
for (blk = 0; ; blk++, put_dev_sector(sect)) {
|
||||
@@ -40,7 +52,7 @@ int amiga_partition(struct parsed_partitions *state)
|
||||
goto rdb_done;
|
||||
data = read_part_sector(state, blk, §);
|
||||
if (!data) {
|
||||
pr_err("Dev %s: unable to read RDB block %d\n",
|
||||
pr_err("Dev %s: unable to read RDB block %llu\n",
|
||||
state->disk->disk_name, blk);
|
||||
res = -1;
|
||||
goto rdb_done;
|
||||
@@ -57,12 +69,12 @@ int amiga_partition(struct parsed_partitions *state)
|
||||
*(__be32 *)(data+0xdc) = 0;
|
||||
if (checksum_block((__be32 *)data,
|
||||
be32_to_cpu(rdb->rdb_SummedLongs) & 0x7F)==0) {
|
||||
pr_err("Trashed word at 0xd0 in block %d ignored in checksum calculation\n",
|
||||
pr_err("Trashed word at 0xd0 in block %llu ignored in checksum calculation\n",
|
||||
blk);
|
||||
break;
|
||||
}
|
||||
|
||||
pr_err("Dev %s: RDB in block %d has bad checksum\n",
|
||||
pr_err("Dev %s: RDB in block %llu has bad checksum\n",
|
||||
state->disk->disk_name, blk);
|
||||
}
|
||||
|
||||
@@ -79,10 +91,15 @@ int amiga_partition(struct parsed_partitions *state)
|
||||
blk = be32_to_cpu(rdb->rdb_PartitionList);
|
||||
put_dev_sector(sect);
|
||||
for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) {
|
||||
blk *= blksize; /* Read in terms partition table understands */
|
||||
/* Read in terms partition table understands */
|
||||
if (check_mul_overflow(blk, (sector_t) blksize, &blk)) {
|
||||
pr_err("Dev %s: overflow calculating partition block %llu! Skipping partitions %u and beyond\n",
|
||||
state->disk->disk_name, blk, part);
|
||||
break;
|
||||
}
|
||||
data = read_part_sector(state, blk, §);
|
||||
if (!data) {
|
||||
pr_err("Dev %s: unable to read partition block %d\n",
|
||||
pr_err("Dev %s: unable to read partition block %llu\n",
|
||||
state->disk->disk_name, blk);
|
||||
res = -1;
|
||||
goto rdb_done;
|
||||
@@ -94,19 +111,70 @@ int amiga_partition(struct parsed_partitions *state)
|
||||
if (checksum_block((__be32 *)pb, be32_to_cpu(pb->pb_SummedLongs) & 0x7F) != 0 )
|
||||
continue;
|
||||
|
||||
/* Tell Kernel about it */
|
||||
/* RDB gives us more than enough rope to hang ourselves with,
|
||||
* many times over (2^128 bytes if all fields max out).
|
||||
* Some careful checks are in order, so check for potential
|
||||
* overflows.
|
||||
* We are multiplying four 32 bit numbers to one sector_t!
|
||||
*/
|
||||
|
||||
nr_hd = be32_to_cpu(pb->pb_Environment[NR_HD]);
|
||||
nr_sect = be32_to_cpu(pb->pb_Environment[NR_SECT]);
|
||||
|
||||
/* CylBlocks is total number of blocks per cylinder */
|
||||
if (check_mul_overflow(nr_hd, nr_sect, &cylblk)) {
|
||||
pr_err("Dev %s: heads*sects %u overflows u32, skipping partition!\n",
|
||||
state->disk->disk_name, cylblk);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* check for consistency with RDB defined CylBlocks */
|
||||
if (cylblk > be32_to_cpu(rdb->rdb_CylBlocks)) {
|
||||
pr_warn("Dev %s: cylblk %u > rdb_CylBlocks %u!\n",
|
||||
state->disk->disk_name, cylblk,
|
||||
be32_to_cpu(rdb->rdb_CylBlocks));
|
||||
}
|
||||
|
||||
/* RDB allows for variable logical block size -
|
||||
* normalize to 512 byte blocks and check result.
|
||||
*/
|
||||
|
||||
if (check_mul_overflow(cylblk, blksize, &cylblk)) {
|
||||
pr_err("Dev %s: partition %u bytes per cyl. overflows u32, skipping partition!\n",
|
||||
state->disk->disk_name, part);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Calculate partition start and end. Limit of 32 bit on cylblk
|
||||
* guarantees no overflow occurs if LBD support is enabled.
|
||||
*/
|
||||
|
||||
lo_cyl = be32_to_cpu(pb->pb_Environment[LO_CYL]);
|
||||
start_sect = ((u64) lo_cyl * cylblk);
|
||||
|
||||
hi_cyl = be32_to_cpu(pb->pb_Environment[HI_CYL]);
|
||||
nr_sects = (((u64) hi_cyl - lo_cyl + 1) * cylblk);
|
||||
|
||||
nr_sects = (be32_to_cpu(pb->pb_Environment[10]) + 1 -
|
||||
be32_to_cpu(pb->pb_Environment[9])) *
|
||||
be32_to_cpu(pb->pb_Environment[3]) *
|
||||
be32_to_cpu(pb->pb_Environment[5]) *
|
||||
blksize;
|
||||
if (!nr_sects)
|
||||
continue;
|
||||
start_sect = be32_to_cpu(pb->pb_Environment[9]) *
|
||||
be32_to_cpu(pb->pb_Environment[3]) *
|
||||
be32_to_cpu(pb->pb_Environment[5]) *
|
||||
blksize;
|
||||
|
||||
/* Warn user if partition end overflows u32 (AmigaDOS limit) */
|
||||
|
||||
if ((start_sect + nr_sects) > UINT_MAX) {
|
||||
pr_warn("Dev %s: partition %u (%llu-%llu) needs 64 bit device support!\n",
|
||||
state->disk->disk_name, part,
|
||||
start_sect, start_sect + nr_sects);
|
||||
}
|
||||
|
||||
if (check_add_overflow(start_sect, nr_sects, &end_sect)) {
|
||||
pr_err("Dev %s: partition %u (%llu-%llu) needs LBD device support, skipping partition!\n",
|
||||
state->disk->disk_name, part,
|
||||
start_sect, end_sect);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Tell Kernel about it */
|
||||
|
||||
put_partition(state,slot++,start_sect,nr_sects);
|
||||
{
|
||||
/* Be even more informative to aid mounting */
|
||||
|
||||
@@ -1493,12 +1493,21 @@ static struct clk_branch cam_cc_sys_tmr_clk = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct gdsc titan_top_gdsc = {
|
||||
.gdscr = 0xb134,
|
||||
.pd = {
|
||||
.name = "titan_top_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
};
|
||||
|
||||
static struct gdsc bps_gdsc = {
|
||||
.gdscr = 0x6004,
|
||||
.pd = {
|
||||
.name = "bps_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.parent = &titan_top_gdsc.pd,
|
||||
.flags = HW_CTRL,
|
||||
};
|
||||
|
||||
@@ -1508,6 +1517,7 @@ static struct gdsc ife_0_gdsc = {
|
||||
.name = "ife_0_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.parent = &titan_top_gdsc.pd,
|
||||
};
|
||||
|
||||
static struct gdsc ife_1_gdsc = {
|
||||
@@ -1516,6 +1526,7 @@ static struct gdsc ife_1_gdsc = {
|
||||
.name = "ife_1_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.parent = &titan_top_gdsc.pd,
|
||||
};
|
||||
|
||||
static struct gdsc ipe_0_gdsc = {
|
||||
@@ -1525,15 +1536,9 @@ static struct gdsc ipe_0_gdsc = {
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.flags = HW_CTRL,
|
||||
.parent = &titan_top_gdsc.pd,
|
||||
};
|
||||
|
||||
static struct gdsc titan_top_gdsc = {
|
||||
.gdscr = 0xb134,
|
||||
.pd = {
|
||||
.name = "titan_top_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
};
|
||||
|
||||
static struct clk_hw *cam_cc_sc7180_hws[] = {
|
||||
[CAM_CC_PLL2_OUT_EARLY] = &cam_cc_pll2_out_early.hw,
|
||||
|
||||
@@ -1654,7 +1654,7 @@ static struct clk_rcg2 sdcc1_apps_clk_src = {
|
||||
.name = "sdcc1_apps_clk_src",
|
||||
.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
|
||||
.num_parents = 4,
|
||||
.ops = &clk_rcg2_ops,
|
||||
.ops = &clk_rcg2_floor_ops,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -4517,24 +4517,24 @@ static const struct qcom_reset_map gcc_ipq6018_resets[] = {
|
||||
[GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
|
||||
[GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
|
||||
[GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
|
||||
[GCC_PPE_FULL_RESET] = { 0x68014, 0 },
|
||||
[GCC_UNIPHY0_SOFT_RESET] = { 0x56004, 0 },
|
||||
[GCC_PPE_FULL_RESET] = { .reg = 0x68014, .bitmask = 0xf0000 },
|
||||
[GCC_UNIPHY0_SOFT_RESET] = { .reg = 0x56004, .bitmask = 0x3ff2 },
|
||||
[GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
|
||||
[GCC_UNIPHY1_SOFT_RESET] = { 0x56104, 0 },
|
||||
[GCC_UNIPHY1_SOFT_RESET] = { .reg = 0x56104, .bitmask = 0x32 },
|
||||
[GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
|
||||
[GCC_EDMA_HW_RESET] = { 0x68014, 0 },
|
||||
[GCC_NSSPORT1_RESET] = { 0x68014, 0 },
|
||||
[GCC_NSSPORT2_RESET] = { 0x68014, 0 },
|
||||
[GCC_NSSPORT3_RESET] = { 0x68014, 0 },
|
||||
[GCC_NSSPORT4_RESET] = { 0x68014, 0 },
|
||||
[GCC_NSSPORT5_RESET] = { 0x68014, 0 },
|
||||
[GCC_UNIPHY0_PORT1_ARES] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT2_ARES] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT3_ARES] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT4_ARES] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT5_ARES] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT_4_5_RESET] = { 0x56004, 0 },
|
||||
[GCC_UNIPHY0_PORT_4_RESET] = { 0x56004, 0 },
|
||||
[GCC_EDMA_HW_RESET] = { .reg = 0x68014, .bitmask = 0x300000 },
|
||||
[GCC_NSSPORT1_RESET] = { .reg = 0x68014, .bitmask = 0x1000003 },
|
||||
[GCC_NSSPORT2_RESET] = { .reg = 0x68014, .bitmask = 0x200000c },
|
||||
[GCC_NSSPORT3_RESET] = { .reg = 0x68014, .bitmask = 0x4000030 },
|
||||
[GCC_NSSPORT4_RESET] = { .reg = 0x68014, .bitmask = 0x8000300 },
|
||||
[GCC_NSSPORT5_RESET] = { .reg = 0x68014, .bitmask = 0x10000c00 },
|
||||
[GCC_UNIPHY0_PORT1_ARES] = { .reg = 0x56004, .bitmask = 0x30 },
|
||||
[GCC_UNIPHY0_PORT2_ARES] = { .reg = 0x56004, .bitmask = 0xc0 },
|
||||
[GCC_UNIPHY0_PORT3_ARES] = { .reg = 0x56004, .bitmask = 0x300 },
|
||||
[GCC_UNIPHY0_PORT4_ARES] = { .reg = 0x56004, .bitmask = 0xc00 },
|
||||
[GCC_UNIPHY0_PORT5_ARES] = { .reg = 0x56004, .bitmask = 0x3000 },
|
||||
[GCC_UNIPHY0_PORT_4_5_RESET] = { .reg = 0x56004, .bitmask = 0x3c02 },
|
||||
[GCC_UNIPHY0_PORT_4_RESET] = { .reg = 0x56004, .bitmask = 0xc02 },
|
||||
[GCC_LPASS_BCR] = {0x1F000, 0},
|
||||
[GCC_UBI32_TBU_BCR] = {0x65000, 0},
|
||||
[GCC_LPASS_TBU_BCR] = {0x6C000, 0},
|
||||
|
||||
@@ -13,8 +13,10 @@
|
||||
|
||||
static int qcom_reset(struct reset_controller_dev *rcdev, unsigned long id)
|
||||
{
|
||||
struct qcom_reset_controller *rst = to_qcom_reset_controller(rcdev);
|
||||
|
||||
rcdev->ops->assert(rcdev, id);
|
||||
udelay(1);
|
||||
udelay(rst->reset_map[id].udelay ?: 1); /* use 1 us as default */
|
||||
rcdev->ops->deassert(rcdev, id);
|
||||
return 0;
|
||||
}
|
||||
@@ -28,7 +30,7 @@ qcom_reset_assert(struct reset_controller_dev *rcdev, unsigned long id)
|
||||
|
||||
rst = to_qcom_reset_controller(rcdev);
|
||||
map = &rst->reset_map[id];
|
||||
mask = BIT(map->bit);
|
||||
mask = map->bitmask ? map->bitmask : BIT(map->bit);
|
||||
|
||||
return regmap_update_bits(rst->regmap, map->reg, mask, mask);
|
||||
}
|
||||
@@ -42,7 +44,7 @@ qcom_reset_deassert(struct reset_controller_dev *rcdev, unsigned long id)
|
||||
|
||||
rst = to_qcom_reset_controller(rcdev);
|
||||
map = &rst->reset_map[id];
|
||||
mask = BIT(map->bit);
|
||||
mask = map->bitmask ? map->bitmask : BIT(map->bit);
|
||||
|
||||
return regmap_update_bits(rst->regmap, map->reg, mask, 0);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
struct qcom_reset_map {
|
||||
unsigned int reg;
|
||||
u8 bit;
|
||||
u8 udelay;
|
||||
u32 bitmask;
|
||||
};
|
||||
|
||||
struct regmap;
|
||||
|
||||
@@ -196,6 +196,14 @@ static const struct __extcon_info {
|
||||
* @attr_name: "name" sysfs entry
|
||||
* @attr_state: "state" sysfs entry
|
||||
* @attrs: the array pointing to attr_name and attr_state for attr_g
|
||||
* @usb_propval: the array of USB connector properties
|
||||
* @chg_propval: the array of charger connector properties
|
||||
* @jack_propval: the array of jack connector properties
|
||||
* @disp_propval: the array of display connector properties
|
||||
* @usb_bits: the bit array of the USB connector property capabilities
|
||||
* @chg_bits: the bit array of the charger connector property capabilities
|
||||
* @jack_bits: the bit array of the jack connector property capabilities
|
||||
* @disp_bits: the bit array of the display connector property capabilities
|
||||
*/
|
||||
struct extcon_cable {
|
||||
struct extcon_dev *edev;
|
||||
|
||||
@@ -862,9 +862,9 @@ static bool _compute_psr2_wake_times(struct intel_dp *intel_dp,
|
||||
}
|
||||
|
||||
io_wake_lines = intel_usecs_to_scanlines(
|
||||
&crtc_state->uapi.adjusted_mode, io_wake_time);
|
||||
&crtc_state->hw.adjusted_mode, io_wake_time);
|
||||
fast_wake_lines = intel_usecs_to_scanlines(
|
||||
&crtc_state->uapi.adjusted_mode, fast_wake_time);
|
||||
&crtc_state->hw.adjusted_mode, fast_wake_time);
|
||||
|
||||
if (io_wake_lines > max_wake_lines ||
|
||||
fast_wake_lines > max_wake_lines)
|
||||
|
||||
@@ -1421,13 +1421,8 @@ static int coresight_remove_match(struct device *dev, void *data)
|
||||
if (csdev->dev.fwnode == conn->child_fwnode) {
|
||||
iterator->orphan = true;
|
||||
coresight_remove_links(iterator, conn);
|
||||
/*
|
||||
* Drop the reference to the handle for the remote
|
||||
* device acquired in parsing the connections from
|
||||
* platform data.
|
||||
*/
|
||||
fwnode_handle_put(conn->child_fwnode);
|
||||
conn->child_fwnode = NULL;
|
||||
|
||||
conn->child_dev = NULL;
|
||||
/* No need to continue */
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -486,8 +486,7 @@ static int fxls8962af_set_watermark(struct iio_dev *indio_dev, unsigned val)
|
||||
.sign = 's', \
|
||||
.realbits = 12, \
|
||||
.storagebits = 16, \
|
||||
.shift = 4, \
|
||||
.endianness = IIO_BE, \
|
||||
.endianness = IIO_LE, \
|
||||
}, \
|
||||
}
|
||||
|
||||
@@ -656,9 +655,10 @@ static int fxls8962af_fifo_transfer(struct fxls8962af_data *data,
|
||||
int total_length = samples * sample_length;
|
||||
int ret;
|
||||
|
||||
if (i2c_verify_client(dev))
|
||||
if (i2c_verify_client(dev) &&
|
||||
data->chip_info->chip_id == FXLS8962AF_DEVICE_ID)
|
||||
/*
|
||||
* Due to errata bug:
|
||||
* Due to errata bug (only applicable on fxls8962af):
|
||||
* E3: FIFO burst read operation error using I2C interface
|
||||
* We have to avoid burst reads on I2C..
|
||||
*/
|
||||
|
||||
@@ -327,7 +327,7 @@ static int ad7192_of_clock_select(struct ad7192_state *st)
|
||||
clock_sel = AD7192_CLK_INT;
|
||||
|
||||
/* use internal clock */
|
||||
if (st->mclk) {
|
||||
if (!st->mclk) {
|
||||
if (of_property_read_bool(np, "adi,int-clock-output-enable"))
|
||||
clock_sel = AD7192_CLK_INT_CO;
|
||||
} else {
|
||||
@@ -340,9 +340,9 @@ static int ad7192_of_clock_select(struct ad7192_state *st)
|
||||
return clock_sel;
|
||||
}
|
||||
|
||||
static int ad7192_setup(struct ad7192_state *st, struct device_node *np)
|
||||
static int ad7192_setup(struct iio_dev *indio_dev, struct device_node *np)
|
||||
{
|
||||
struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi);
|
||||
struct ad7192_state *st = iio_priv(indio_dev);
|
||||
bool rej60_en, refin2_en;
|
||||
bool buf_en, bipolar, burnout_curr_en;
|
||||
unsigned long long scale_uv;
|
||||
@@ -1015,7 +1015,7 @@ static int ad7192_probe(struct spi_device *spi)
|
||||
}
|
||||
}
|
||||
|
||||
ret = ad7192_setup(st, spi->dev.of_node);
|
||||
ret = ad7192_setup(indio_dev, spi->dev.of_node);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -297,7 +297,7 @@ static void raid_end_bio_io(struct r10bio *r10_bio)
|
||||
if (!test_bit(R10BIO_Uptodate, &r10_bio->state))
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
|
||||
if (blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
|
||||
if (r10_bio->start_time)
|
||||
bio_end_io_acct(bio, r10_bio->start_time);
|
||||
bio_endio(bio);
|
||||
/*
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
config CEC_CH7322
|
||||
tristate "Chrontel CH7322 CEC controller"
|
||||
depends on I2C
|
||||
select REGMAP
|
||||
select REGMAP_I2C
|
||||
select CEC_CORE
|
||||
help
|
||||
|
||||
@@ -710,8 +710,13 @@ static void mipid02_set_fmt_source(struct v4l2_subdev *sd,
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||
|
||||
/* source pad mirror active sink pad */
|
||||
format->format = bridge->fmt;
|
||||
/* source pad mirror sink pad */
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
format->format = bridge->fmt;
|
||||
else
|
||||
format->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
MIPID02_SINK_0);
|
||||
|
||||
/* but code may need to be converted */
|
||||
format->format.code = serial_to_parallel_code(format->format.code);
|
||||
|
||||
|
||||
@@ -981,8 +981,8 @@ static u32 get_framesize_raw_yuv420_tp10_ubwc(u32 width, u32 height)
|
||||
u32 extradata = SZ_16K;
|
||||
u32 size;
|
||||
|
||||
y_stride = ALIGN(ALIGN(width, 192) * 4 / 3, 256);
|
||||
uv_stride = ALIGN(ALIGN(width, 192) * 4 / 3, 256);
|
||||
y_stride = ALIGN(width * 4 / 3, 256);
|
||||
uv_stride = ALIGN(width * 4 / 3, 256);
|
||||
y_sclines = ALIGN(height, 16);
|
||||
uv_sclines = ALIGN((height + 1) >> 1, 16);
|
||||
|
||||
|
||||
@@ -202,7 +202,8 @@ static int az6007_rc_query(struct dvb_usb_device *d)
|
||||
unsigned code;
|
||||
enum rc_proto proto;
|
||||
|
||||
az6007_read(d, AZ6007_READ_IR, 0, 0, st->data, 10);
|
||||
if (az6007_read(d, AZ6007_READ_IR, 0, 0, st->data, 10) < 0)
|
||||
return -EIO;
|
||||
|
||||
if (st->data[1] == 0x44)
|
||||
return 0;
|
||||
|
||||
@@ -179,7 +179,8 @@ static void smsusb_stop_streaming(struct smsusb_device_t *dev)
|
||||
|
||||
for (i = 0; i < MAX_URBS; i++) {
|
||||
usb_kill_urb(&dev->surbs[i].urb);
|
||||
cancel_work_sync(&dev->surbs[i].wq);
|
||||
if (dev->surbs[i].wq.func)
|
||||
cancel_work_sync(&dev->surbs[i].wq);
|
||||
|
||||
if (dev->surbs[i].cb) {
|
||||
smscore_putbuffer(dev->coredev, dev->surbs[i].cb);
|
||||
|
||||
@@ -148,6 +148,9 @@ static int intel_lpss_acpi_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
info->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!info->mem)
|
||||
return -ENODEV;
|
||||
|
||||
info->irq = platform_get_irq(pdev, 0);
|
||||
|
||||
ret = intel_lpss_probe(&pdev->dev, info);
|
||||
|
||||
@@ -41,9 +41,6 @@ static const struct mfd_cell rt5033_devs[] = {
|
||||
{
|
||||
.name = "rt5033-charger",
|
||||
.of_compatible = "richtek,rt5033-charger",
|
||||
}, {
|
||||
.name = "rt5033-battery",
|
||||
.of_compatible = "richtek,rt5033-battery",
|
||||
}, {
|
||||
.name = "rt5033-led",
|
||||
.of_compatible = "richtek,rt5033-led",
|
||||
|
||||
@@ -330,9 +330,8 @@ static int stmfx_chip_init(struct i2c_client *client)
|
||||
stmfx->vdd = devm_regulator_get_optional(&client->dev, "vdd");
|
||||
ret = PTR_ERR_OR_ZERO(stmfx->vdd);
|
||||
if (ret) {
|
||||
if (ret == -ENODEV)
|
||||
stmfx->vdd = NULL;
|
||||
else
|
||||
stmfx->vdd = NULL;
|
||||
if (ret != -ENODEV)
|
||||
return dev_err_probe(&client->dev, ret, "Failed to get VDD regulator\n");
|
||||
}
|
||||
|
||||
@@ -387,7 +386,7 @@ static int stmfx_chip_init(struct i2c_client *client)
|
||||
|
||||
err:
|
||||
if (stmfx->vdd)
|
||||
return regulator_disable(stmfx->vdd);
|
||||
regulator_disable(stmfx->vdd);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1498,9 +1498,9 @@ int stmpe_probe(struct stmpe_client_info *ci, enum stmpe_partnum partnum)
|
||||
|
||||
int stmpe_remove(struct stmpe *stmpe)
|
||||
{
|
||||
if (!IS_ERR(stmpe->vio))
|
||||
if (!IS_ERR(stmpe->vio) && regulator_is_enabled(stmpe->vio))
|
||||
regulator_disable(stmpe->vio);
|
||||
if (!IS_ERR(stmpe->vcc))
|
||||
if (!IS_ERR(stmpe->vcc) && regulator_is_enabled(stmpe->vcc))
|
||||
regulator_disable(stmpe->vcc);
|
||||
|
||||
__stmpe_disable(stmpe, STMPE_BLOCK_ADC);
|
||||
|
||||
@@ -71,6 +71,7 @@ static int rmem_probe(struct platform_device *pdev)
|
||||
config.dev = dev;
|
||||
config.priv = priv;
|
||||
config.name = "rmem";
|
||||
config.id = NVMEM_DEVID_AUTO;
|
||||
config.size = mem->size;
|
||||
config.reg_read = rmem_read;
|
||||
|
||||
|
||||
@@ -562,6 +562,7 @@ static void tegra_xusb_port_unregister(struct tegra_xusb_port *port)
|
||||
usb_role_switch_unregister(port->usb_role_sw);
|
||||
cancel_work_sync(&port->usb_phy_work);
|
||||
usb_remove_phy(&port->usb_phy);
|
||||
port->usb_phy.dev->driver = NULL;
|
||||
}
|
||||
|
||||
if (port->ops->remove)
|
||||
@@ -668,6 +669,9 @@ static int tegra_xusb_setup_usb_role_switch(struct tegra_xusb_port *port)
|
||||
port->dev.driver = devm_kzalloc(&port->dev,
|
||||
sizeof(struct device_driver),
|
||||
GFP_KERNEL);
|
||||
if (!port->dev.driver)
|
||||
return -ENOMEM;
|
||||
|
||||
port->dev.driver->owner = THIS_MODULE;
|
||||
|
||||
port->usb_role_sw = usb_role_switch_register(&port->dev,
|
||||
|
||||
@@ -96,7 +96,7 @@ static int ab8500_pwm_probe(struct platform_device *pdev)
|
||||
int err;
|
||||
|
||||
if (pdev->id < 1 || pdev->id > 31)
|
||||
return dev_err_probe(&pdev->dev, EINVAL, "Invalid device id %d\n", pdev->id);
|
||||
return dev_err_probe(&pdev->dev, -EINVAL, "Invalid device id %d\n", pdev->id);
|
||||
|
||||
/*
|
||||
* Nothing to be done in probe, this is required to get the
|
||||
|
||||
@@ -397,6 +397,13 @@ static int __maybe_unused pwm_imx_tpm_suspend(struct device *dev)
|
||||
if (tpm->enable_count > 0)
|
||||
return -EBUSY;
|
||||
|
||||
/*
|
||||
* Force 'real_period' to be zero to force period update code
|
||||
* can be executed after system resume back, since suspend causes
|
||||
* the period related registers to become their reset values.
|
||||
*/
|
||||
tpm->real_period = 0;
|
||||
|
||||
clk_disable_unprepare(tpm->clk);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -79,14 +79,11 @@ static int mtk_disp_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||
if (state->polarity != PWM_POLARITY_NORMAL)
|
||||
return -EINVAL;
|
||||
|
||||
if (!state->enabled) {
|
||||
mtk_disp_pwm_update_bits(mdp, DISP_PWM_EN, mdp->data->enable_mask,
|
||||
0x0);
|
||||
|
||||
if (mdp->enabled) {
|
||||
clk_disable_unprepare(mdp->clk_mm);
|
||||
clk_disable_unprepare(mdp->clk_main);
|
||||
}
|
||||
if (!state->enabled && mdp->enabled) {
|
||||
mtk_disp_pwm_update_bits(mdp, DISP_PWM_EN,
|
||||
mdp->data->enable_mask, 0x0);
|
||||
clk_disable_unprepare(mdp->clk_mm);
|
||||
clk_disable_unprepare(mdp->clk_main);
|
||||
|
||||
mdp->enabled = false;
|
||||
return 0;
|
||||
|
||||
@@ -424,6 +424,13 @@ static int pwm_class_resume_npwm(struct device *parent, unsigned int npwm)
|
||||
if (!export)
|
||||
continue;
|
||||
|
||||
/* If pwmchip was not enabled before suspend, do nothing. */
|
||||
if (!export->suspend.enabled) {
|
||||
/* release lock taken in pwm_class_get_state */
|
||||
mutex_unlock(&export->lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
state.enabled = export->suspend.enabled;
|
||||
ret = pwm_class_apply_state(export, pwm, &state);
|
||||
if (ret < 0)
|
||||
@@ -448,7 +455,17 @@ static int __maybe_unused pwm_class_suspend(struct device *parent)
|
||||
if (!export)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If pwmchip was not enabled before suspend, save
|
||||
* state for resume time and do nothing else.
|
||||
*/
|
||||
export->suspend = state;
|
||||
if (!state.enabled) {
|
||||
/* release lock taken in pwm_class_get_state */
|
||||
mutex_unlock(&export->lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
state.enabled = false;
|
||||
ret = pwm_class_apply_state(export, pwm, &state);
|
||||
if (ret < 0) {
|
||||
|
||||
@@ -228,7 +228,7 @@ static int st_rtc_probe(struct platform_device *pdev)
|
||||
enable_irq_wake(rtc->irq);
|
||||
disable_irq(rtc->irq);
|
||||
|
||||
rtc->clk = clk_get(&pdev->dev, NULL);
|
||||
rtc->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(rtc->clk)) {
|
||||
dev_err(&pdev->dev, "Unable to request clock\n");
|
||||
return PTR_ERR(rtc->clk);
|
||||
|
||||
@@ -1198,7 +1198,7 @@ static int gmin_get_config_dsm_var(struct device *dev,
|
||||
dev_info(dev, "found _DSM entry for '%s': %s\n", var,
|
||||
cur->string.pointer);
|
||||
strscpy(out, cur->string.pointer, *out_len);
|
||||
*out_len = strlen(cur->string.pointer);
|
||||
*out_len = strlen(out);
|
||||
|
||||
ACPI_FREE(obj);
|
||||
return 0;
|
||||
|
||||
@@ -653,6 +653,8 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
|
||||
if ((lsr & UART_LSR_OE) && up->overrun_backoff_time_ms > 0) {
|
||||
unsigned long delay;
|
||||
|
||||
/* Synchronize UART_IER access against the console. */
|
||||
spin_lock(&port->lock);
|
||||
up->ier = port->serial_in(port, UART_IER);
|
||||
if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) {
|
||||
port->ops->stop_rx(port);
|
||||
@@ -662,6 +664,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
|
||||
*/
|
||||
cancel_delayed_work(&up->overrun_backoff);
|
||||
}
|
||||
spin_unlock(&port->lock);
|
||||
|
||||
delay = msecs_to_jiffies(up->overrun_backoff_time_ms);
|
||||
schedule_delayed_work(&up->overrun_backoff, delay);
|
||||
@@ -1469,7 +1472,9 @@ static int omap8250_probe(struct platform_device *pdev)
|
||||
err:
|
||||
pm_runtime_dont_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
flush_work(&priv->qos_work);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
cpu_latency_qos_remove_request(&priv->pm_qos_request);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1516,25 +1521,35 @@ static int omap8250_suspend(struct device *dev)
|
||||
{
|
||||
struct omap8250_priv *priv = dev_get_drvdata(dev);
|
||||
struct uart_8250_port *up = serial8250_get_port(priv->line);
|
||||
int err;
|
||||
|
||||
serial8250_suspend_port(priv->line);
|
||||
|
||||
pm_runtime_get_sync(dev);
|
||||
err = pm_runtime_resume_and_get(dev);
|
||||
if (err)
|
||||
return err;
|
||||
if (!device_may_wakeup(dev))
|
||||
priv->wer = 0;
|
||||
serial_out(up, UART_OMAP_WER, priv->wer);
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
|
||||
err = pm_runtime_force_suspend(dev);
|
||||
flush_work(&priv->qos_work);
|
||||
return 0;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int omap8250_resume(struct device *dev)
|
||||
{
|
||||
struct omap8250_priv *priv = dev_get_drvdata(dev);
|
||||
int err;
|
||||
|
||||
err = pm_runtime_force_resume(dev);
|
||||
if (err)
|
||||
return err;
|
||||
serial8250_resume_port(priv->line);
|
||||
/* Paired with pm_runtime_resume_and_get() in omap8250_suspend() */
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -735,6 +735,7 @@ static int driver_resume(struct usb_interface *intf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* The following routines apply to the entire device, not interfaces */
|
||||
void usbfs_notify_suspend(struct usb_device *udev)
|
||||
{
|
||||
@@ -753,6 +754,7 @@ void usbfs_notify_resume(struct usb_device *udev)
|
||||
}
|
||||
mutex_unlock(&usbfs_mutex);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct usb_driver usbfs_driver = {
|
||||
.name = "usbfs",
|
||||
|
||||
@@ -205,6 +205,11 @@ int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void dwc2_reset_control_assert(void *data)
|
||||
{
|
||||
reset_control_assert(data);
|
||||
}
|
||||
|
||||
static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
|
||||
{
|
||||
int i, ret;
|
||||
@@ -217,6 +222,10 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
reset_control_deassert(hsotg->reset);
|
||||
ret = devm_add_action_or_reset(hsotg->dev, dwc2_reset_control_assert,
|
||||
hsotg->reset);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
hsotg->reset_ecc = devm_reset_control_get_optional(hsotg->dev, "dwc2-ecc");
|
||||
if (IS_ERR(hsotg->reset_ecc)) {
|
||||
@@ -226,6 +235,10 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
|
||||
}
|
||||
|
||||
reset_control_deassert(hsotg->reset_ecc);
|
||||
ret = devm_add_action_or_reset(hsotg->dev, dwc2_reset_control_assert,
|
||||
hsotg->reset_ecc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Attempt to find a generic PHY, then look for an old style
|
||||
@@ -352,10 +365,7 @@ static int dwc2_driver_remove(struct platform_device *dev)
|
||||
if (hsotg->ll_hw_enabled)
|
||||
dwc2_lowlevel_hw_disable(hsotg);
|
||||
|
||||
reset_control_assert(hsotg->reset);
|
||||
reset_control_assert(hsotg->reset_ecc);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -805,7 +805,7 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev)
|
||||
|
||||
ret = dwc3_meson_g12a_otg_init(pdev, priv);
|
||||
if (ret)
|
||||
goto err_phys_power;
|
||||
goto err_plat_depopulate;
|
||||
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
@@ -813,6 +813,9 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev)
|
||||
|
||||
return 0;
|
||||
|
||||
err_plat_depopulate:
|
||||
of_platform_depopulate(dev);
|
||||
|
||||
err_phys_power:
|
||||
for (i = 0 ; i < PHY_COUNT ; ++i)
|
||||
phy_power_off(priv->phys[i]);
|
||||
|
||||
@@ -727,6 +727,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
struct dwc3_qcom *qcom;
|
||||
struct resource *res, *parent_res = NULL;
|
||||
struct resource local_res;
|
||||
int ret, i;
|
||||
bool ignore_pipe_clk;
|
||||
|
||||
@@ -777,9 +778,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
|
||||
if (np) {
|
||||
parent_res = res;
|
||||
} else {
|
||||
parent_res = kmemdup(res, sizeof(struct resource), GFP_KERNEL);
|
||||
if (!parent_res)
|
||||
return -ENOMEM;
|
||||
memcpy(&local_res, res, sizeof(struct resource));
|
||||
parent_res = &local_res;
|
||||
|
||||
parent_res->start = res->start +
|
||||
qcom->acpi_pdata->qscratch_base_offset;
|
||||
@@ -791,9 +791,10 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
|
||||
if (IS_ERR_OR_NULL(qcom->urs_usb)) {
|
||||
dev_err(dev, "failed to create URS USB platdev\n");
|
||||
if (!qcom->urs_usb)
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
else
|
||||
return PTR_ERR(qcom->urs_usb);
|
||||
ret = PTR_ERR(qcom->urs_usb);
|
||||
goto clk_disable;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -873,11 +874,15 @@ reset_assert:
|
||||
static int dwc3_qcom_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct dwc3_qcom *qcom = platform_get_drvdata(pdev);
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct device *dev = &pdev->dev;
|
||||
int i;
|
||||
|
||||
device_remove_software_node(&qcom->dwc3->dev);
|
||||
of_platform_depopulate(dev);
|
||||
if (np)
|
||||
of_platform_depopulate(&pdev->dev);
|
||||
else
|
||||
platform_device_put(pdev);
|
||||
|
||||
for (i = qcom->num_clocks - 1; i >= 0; i--) {
|
||||
clk_disable_unprepare(qcom->clks[i]);
|
||||
|
||||
@@ -2620,7 +2620,9 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
|
||||
ret = pm_runtime_get_sync(dwc->dev);
|
||||
if (!ret || ret < 0) {
|
||||
pm_runtime_put(dwc->dev);
|
||||
return 0;
|
||||
if (ret < 0)
|
||||
pm_runtime_set_suspended(dwc->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dwc->pullups_connected == is_on) {
|
||||
|
||||
@@ -395,7 +395,7 @@ static int tahvo_usb_probe(struct platform_device *pdev)
|
||||
|
||||
tu->irq = ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto err_remove_phy;
|
||||
ret = request_threaded_irq(tu->irq, NULL, tahvo_usb_vbus_interrupt,
|
||||
IRQF_ONESHOT,
|
||||
"tahvo-vbus", tu);
|
||||
|
||||
@@ -1151,6 +1151,10 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa),
|
||||
.driver_info = RSVD(3) },
|
||||
/* u-blox products */
|
||||
{ USB_DEVICE(UBLOX_VENDOR_ID, 0x1311) }, /* u-blox LARA-R6 01B */
|
||||
{ USB_DEVICE(UBLOX_VENDOR_ID, 0x1312), /* u-blox LARA-R6 01B (RMNET) */
|
||||
.driver_info = RSVD(4) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(UBLOX_VENDOR_ID, 0x1313, 0xff) }, /* u-blox LARA-R6 01B (ECM) */
|
||||
{ USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */
|
||||
{ USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */
|
||||
.driver_info = RSVD(4) },
|
||||
|
||||
@@ -1093,29 +1093,26 @@ static int convert_t(struct w1_slave *sl, struct therm_info *info)
|
||||
|
||||
w1_write_8(dev_master, W1_CONVERT_TEMP);
|
||||
|
||||
if (strong_pullup) { /*some device need pullup */
|
||||
if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) {
|
||||
ret = w1_poll_completion(dev_master, W1_POLL_CONVERT_TEMP);
|
||||
if (ret) {
|
||||
dev_dbg(&sl->dev, "%s: Timeout\n", __func__);
|
||||
goto mt_unlock;
|
||||
}
|
||||
mutex_unlock(&dev_master->bus_mutex);
|
||||
} else if (!strong_pullup) { /*no device need pullup */
|
||||
sleep_rem = msleep_interruptible(t_conv);
|
||||
if (sleep_rem != 0) {
|
||||
ret = -EINTR;
|
||||
goto mt_unlock;
|
||||
}
|
||||
mutex_unlock(&dev_master->bus_mutex);
|
||||
} else { /*no device need pullup */
|
||||
if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) {
|
||||
ret = w1_poll_completion(dev_master, W1_POLL_CONVERT_TEMP);
|
||||
if (ret) {
|
||||
dev_dbg(&sl->dev, "%s: Timeout\n", __func__);
|
||||
goto mt_unlock;
|
||||
}
|
||||
mutex_unlock(&dev_master->bus_mutex);
|
||||
} else {
|
||||
/* Fixed delay */
|
||||
mutex_unlock(&dev_master->bus_mutex);
|
||||
sleep_rem = msleep_interruptible(t_conv);
|
||||
if (sleep_rem != 0) {
|
||||
ret = -EINTR;
|
||||
goto dec_refcnt;
|
||||
}
|
||||
} else { /*some device need pullup */
|
||||
mutex_unlock(&dev_master->bus_mutex);
|
||||
sleep_rem = msleep_interruptible(t_conv);
|
||||
if (sleep_rem != 0) {
|
||||
ret = -EINTR;
|
||||
goto dec_refcnt;
|
||||
}
|
||||
}
|
||||
ret = read_scratchpad(sl, info);
|
||||
|
||||
@@ -1263,10 +1263,10 @@ err_out_exit_init:
|
||||
|
||||
static void __exit w1_fini(void)
|
||||
{
|
||||
struct w1_master *dev;
|
||||
struct w1_master *dev, *n;
|
||||
|
||||
/* Set netlink removal messages and some cleanup */
|
||||
list_for_each_entry(dev, &w1_masters, w1_master_entry)
|
||||
list_for_each_entry_safe(dev, n, &w1_masters, w1_master_entry)
|
||||
__w1_remove_master_device(dev);
|
||||
|
||||
w1_fini_netlink();
|
||||
|
||||
@@ -637,7 +637,9 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root,
|
||||
return kn;
|
||||
|
||||
err_out3:
|
||||
spin_lock(&kernfs_idr_lock);
|
||||
idr_remove(&root->ino_idr, (u32)kernfs_ino(kn));
|
||||
spin_unlock(&kernfs_idr_lock);
|
||||
err_out2:
|
||||
kmem_cache_free(kernfs_node_cache, kn);
|
||||
err_out1:
|
||||
|
||||
@@ -7,42 +7,42 @@
|
||||
/* Just the needed definitions for the RDB of an Amiga HD. */
|
||||
|
||||
struct RigidDiskBlock {
|
||||
__u32 rdb_ID;
|
||||
__be32 rdb_ID;
|
||||
__be32 rdb_SummedLongs;
|
||||
__s32 rdb_ChkSum;
|
||||
__u32 rdb_HostID;
|
||||
__be32 rdb_ChkSum;
|
||||
__be32 rdb_HostID;
|
||||
__be32 rdb_BlockBytes;
|
||||
__u32 rdb_Flags;
|
||||
__u32 rdb_BadBlockList;
|
||||
__be32 rdb_Flags;
|
||||
__be32 rdb_BadBlockList;
|
||||
__be32 rdb_PartitionList;
|
||||
__u32 rdb_FileSysHeaderList;
|
||||
__u32 rdb_DriveInit;
|
||||
__u32 rdb_Reserved1[6];
|
||||
__u32 rdb_Cylinders;
|
||||
__u32 rdb_Sectors;
|
||||
__u32 rdb_Heads;
|
||||
__u32 rdb_Interleave;
|
||||
__u32 rdb_Park;
|
||||
__u32 rdb_Reserved2[3];
|
||||
__u32 rdb_WritePreComp;
|
||||
__u32 rdb_ReducedWrite;
|
||||
__u32 rdb_StepRate;
|
||||
__u32 rdb_Reserved3[5];
|
||||
__u32 rdb_RDBBlocksLo;
|
||||
__u32 rdb_RDBBlocksHi;
|
||||
__u32 rdb_LoCylinder;
|
||||
__u32 rdb_HiCylinder;
|
||||
__u32 rdb_CylBlocks;
|
||||
__u32 rdb_AutoParkSeconds;
|
||||
__u32 rdb_HighRDSKBlock;
|
||||
__u32 rdb_Reserved4;
|
||||
__be32 rdb_FileSysHeaderList;
|
||||
__be32 rdb_DriveInit;
|
||||
__be32 rdb_Reserved1[6];
|
||||
__be32 rdb_Cylinders;
|
||||
__be32 rdb_Sectors;
|
||||
__be32 rdb_Heads;
|
||||
__be32 rdb_Interleave;
|
||||
__be32 rdb_Park;
|
||||
__be32 rdb_Reserved2[3];
|
||||
__be32 rdb_WritePreComp;
|
||||
__be32 rdb_ReducedWrite;
|
||||
__be32 rdb_StepRate;
|
||||
__be32 rdb_Reserved3[5];
|
||||
__be32 rdb_RDBBlocksLo;
|
||||
__be32 rdb_RDBBlocksHi;
|
||||
__be32 rdb_LoCylinder;
|
||||
__be32 rdb_HiCylinder;
|
||||
__be32 rdb_CylBlocks;
|
||||
__be32 rdb_AutoParkSeconds;
|
||||
__be32 rdb_HighRDSKBlock;
|
||||
__be32 rdb_Reserved4;
|
||||
char rdb_DiskVendor[8];
|
||||
char rdb_DiskProduct[16];
|
||||
char rdb_DiskRevision[4];
|
||||
char rdb_ControllerVendor[8];
|
||||
char rdb_ControllerProduct[16];
|
||||
char rdb_ControllerRevision[4];
|
||||
__u32 rdb_Reserved5[10];
|
||||
__be32 rdb_Reserved5[10];
|
||||
};
|
||||
|
||||
#define IDNAME_RIGIDDISK 0x5244534B /* "RDSK" */
|
||||
@@ -50,16 +50,16 @@ struct RigidDiskBlock {
|
||||
struct PartitionBlock {
|
||||
__be32 pb_ID;
|
||||
__be32 pb_SummedLongs;
|
||||
__s32 pb_ChkSum;
|
||||
__u32 pb_HostID;
|
||||
__be32 pb_ChkSum;
|
||||
__be32 pb_HostID;
|
||||
__be32 pb_Next;
|
||||
__u32 pb_Flags;
|
||||
__u32 pb_Reserved1[2];
|
||||
__u32 pb_DevFlags;
|
||||
__be32 pb_Flags;
|
||||
__be32 pb_Reserved1[2];
|
||||
__be32 pb_DevFlags;
|
||||
__u8 pb_DriveName[32];
|
||||
__u32 pb_Reserved2[15];
|
||||
__be32 pb_Reserved2[15];
|
||||
__be32 pb_Environment[17];
|
||||
__u32 pb_EReserved[15];
|
||||
__be32 pb_EReserved[15];
|
||||
};
|
||||
|
||||
#define IDNAME_PARTITION 0x50415254 /* "PART" */
|
||||
|
||||
@@ -1652,7 +1652,7 @@ struct v4l2_input {
|
||||
__u8 name[32]; /* Label */
|
||||
__u32 type; /* Type of input */
|
||||
__u32 audioset; /* Associated audios (bitfield) */
|
||||
__u32 tuner; /* enum v4l2_tuner_type */
|
||||
__u32 tuner; /* Tuner index */
|
||||
v4l2_std_id std;
|
||||
__u32 status;
|
||||
__u32 capabilities;
|
||||
|
||||
@@ -183,7 +183,7 @@ static int __kstrncpy(char **dst, const char *name, size_t count, gfp_t gfp)
|
||||
{
|
||||
*dst = kstrndup(name, count, gfp);
|
||||
if (!*dst)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -606,7 +606,7 @@ static ssize_t trigger_request_store(struct device *dev,
|
||||
|
||||
name = kstrndup(buf, count, GFP_KERNEL);
|
||||
if (!name)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
|
||||
pr_info("loading '%s'\n", name);
|
||||
|
||||
@@ -654,7 +654,7 @@ static ssize_t trigger_request_platform_store(struct device *dev,
|
||||
|
||||
name = kstrndup(buf, count, GFP_KERNEL);
|
||||
if (!name)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
|
||||
pr_info("inserting test platform fw '%s'\n", name);
|
||||
efi_embedded_fw.name = name;
|
||||
@@ -707,7 +707,7 @@ static ssize_t trigger_async_request_store(struct device *dev,
|
||||
|
||||
name = kstrndup(buf, count, GFP_KERNEL);
|
||||
if (!name)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
|
||||
pr_info("loading '%s'\n", name);
|
||||
|
||||
@@ -752,7 +752,7 @@ static ssize_t trigger_custom_fallback_store(struct device *dev,
|
||||
|
||||
name = kstrndup(buf, count, GFP_KERNEL);
|
||||
if (!name)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
|
||||
pr_info("loading '%s' using custom fallback mechanism\n", name);
|
||||
|
||||
@@ -803,7 +803,7 @@ static int test_fw_run_batch_request(void *data)
|
||||
|
||||
test_buf = kzalloc(TEST_FIRMWARE_BUF_SIZE, GFP_KERNEL);
|
||||
if (!test_buf)
|
||||
return -ENOSPC;
|
||||
return -ENOMEM;
|
||||
|
||||
if (test_fw_config->partial)
|
||||
req->rc = request_partial_firmware_into_buf
|
||||
|
||||
@@ -50,7 +50,7 @@ static int ipt_init_target(struct net *net, struct xt_entry_target *t,
|
||||
par.entryinfo = &e;
|
||||
par.target = target;
|
||||
par.targinfo = t->data;
|
||||
par.hook_mask = hook;
|
||||
par.hook_mask = 1 << hook;
|
||||
par.family = NFPROTO_IPV4;
|
||||
|
||||
ret = xt_check_target(&par, t->u.target_size - sizeof(*t), 0, false);
|
||||
@@ -87,7 +87,8 @@ static void tcf_ipt_release(struct tc_action *a)
|
||||
|
||||
static const struct nla_policy ipt_policy[TCA_IPT_MAX + 1] = {
|
||||
[TCA_IPT_TABLE] = { .type = NLA_STRING, .len = IFNAMSIZ },
|
||||
[TCA_IPT_HOOK] = { .type = NLA_U32 },
|
||||
[TCA_IPT_HOOK] = NLA_POLICY_RANGE(NLA_U32, NF_INET_PRE_ROUTING,
|
||||
NF_INET_NUMHOOKS),
|
||||
[TCA_IPT_INDEX] = { .type = NLA_U32 },
|
||||
[TCA_IPT_TARG] = { .len = sizeof(struct xt_entry_target) },
|
||||
};
|
||||
@@ -160,15 +161,27 @@ static int __tcf_ipt_init(struct net *net, unsigned int id, struct nlattr *nla,
|
||||
return -EEXIST;
|
||||
}
|
||||
}
|
||||
hook = nla_get_u32(tb[TCA_IPT_HOOK]);
|
||||
|
||||
err = -ENOMEM;
|
||||
tname = kmalloc(IFNAMSIZ, GFP_KERNEL);
|
||||
err = -EINVAL;
|
||||
hook = nla_get_u32(tb[TCA_IPT_HOOK]);
|
||||
switch (hook) {
|
||||
case NF_INET_PRE_ROUTING:
|
||||
break;
|
||||
case NF_INET_POST_ROUTING:
|
||||
break;
|
||||
default:
|
||||
goto err1;
|
||||
}
|
||||
|
||||
if (tb[TCA_IPT_TABLE]) {
|
||||
/* mangle only for now */
|
||||
if (nla_strcmp(tb[TCA_IPT_TABLE], "mangle"))
|
||||
goto err1;
|
||||
}
|
||||
|
||||
tname = kstrdup("mangle", GFP_KERNEL);
|
||||
if (unlikely(!tname))
|
||||
goto err1;
|
||||
if (tb[TCA_IPT_TABLE] == NULL ||
|
||||
nla_strscpy(tname, tb[TCA_IPT_TABLE], IFNAMSIZ) >= IFNAMSIZ)
|
||||
strcpy(tname, "mangle");
|
||||
|
||||
t = kmemdup(td, td->u.target_size, GFP_KERNEL);
|
||||
if (unlikely(!t))
|
||||
|
||||
@@ -362,9 +362,9 @@ static void sctp_auto_asconf_init(struct sctp_sock *sp)
|
||||
struct net *net = sock_net(&sp->inet.sk);
|
||||
|
||||
if (net->sctp.default_auto_asconf) {
|
||||
spin_lock(&net->sctp.addr_wq_lock);
|
||||
spin_lock_bh(&net->sctp.addr_wq_lock);
|
||||
list_add_tail(&sp->auto_asconf_list, &net->sctp.auto_asconf_splist);
|
||||
spin_unlock(&net->sctp.addr_wq_lock);
|
||||
spin_unlock_bh(&net->sctp.addr_wq_lock);
|
||||
sp->do_auto_asconf = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -685,12 +685,6 @@ static void svc_tcp_listen_data_ready(struct sock *sk)
|
||||
{
|
||||
struct svc_sock *svsk = (struct svc_sock *)sk->sk_user_data;
|
||||
|
||||
if (svsk) {
|
||||
/* Refer to svc_setup_socket() for details. */
|
||||
rmb();
|
||||
svsk->sk_odata(sk);
|
||||
}
|
||||
|
||||
/*
|
||||
* This callback may called twice when a new connection
|
||||
* is established as a child socket inherits everything
|
||||
@@ -699,13 +693,18 @@ static void svc_tcp_listen_data_ready(struct sock *sk)
|
||||
* when one of child sockets become ESTABLISHED.
|
||||
* 2) data_ready method of the child socket may be called
|
||||
* when it receives data before the socket is accepted.
|
||||
* In case of 2, we should ignore it silently.
|
||||
* In case of 2, we should ignore it silently and DO NOT
|
||||
* dereference svsk.
|
||||
*/
|
||||
if (sk->sk_state == TCP_LISTEN) {
|
||||
if (svsk) {
|
||||
set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags);
|
||||
svc_xprt_enqueue(&svsk->sk_xprt);
|
||||
}
|
||||
if (sk->sk_state != TCP_LISTEN)
|
||||
return;
|
||||
|
||||
if (svsk) {
|
||||
/* Refer to svc_setup_socket() for details. */
|
||||
rmb();
|
||||
svsk->sk_odata(sk);
|
||||
set_bit(XPT_CONN, &svsk->sk_xprt.xpt_flags);
|
||||
svc_xprt_enqueue(&svsk->sk_xprt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -638,6 +638,7 @@ void snd_jack_report(struct snd_jack *jack, int status)
|
||||
struct snd_jack_kctl *jack_kctl;
|
||||
unsigned int mask_bits = 0;
|
||||
#ifdef CONFIG_SND_JACK_INPUT_DEV
|
||||
struct input_dev *idev;
|
||||
int i;
|
||||
#endif
|
||||
|
||||
@@ -654,14 +655,15 @@ void snd_jack_report(struct snd_jack *jack, int status)
|
||||
status & jack_kctl->mask_bits);
|
||||
|
||||
#ifdef CONFIG_SND_JACK_INPUT_DEV
|
||||
if (!jack->input_dev)
|
||||
idev = input_get_device(jack->input_dev);
|
||||
if (!idev)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(jack->key); i++) {
|
||||
int testbit = ((SND_JACK_BTN_0 >> i) & ~mask_bits);
|
||||
|
||||
if (jack->type & testbit)
|
||||
input_report_key(jack->input_dev, jack->key[i],
|
||||
input_report_key(idev, jack->key[i],
|
||||
status & testbit);
|
||||
}
|
||||
|
||||
@@ -669,12 +671,13 @@ void snd_jack_report(struct snd_jack *jack, int status)
|
||||
int testbit = ((1 << i) & ~mask_bits);
|
||||
|
||||
if (jack->type & testbit)
|
||||
input_report_switch(jack->input_dev,
|
||||
input_report_switch(idev,
|
||||
jack_switch_types[i],
|
||||
status & testbit);
|
||||
}
|
||||
|
||||
input_sync(jack->input_dev);
|
||||
input_sync(idev);
|
||||
input_put_device(idev);
|
||||
#endif /* CONFIG_SND_JACK_INPUT_DEV */
|
||||
}
|
||||
EXPORT_SYMBOL(snd_jack_report);
|
||||
|
||||
@@ -9242,6 +9242,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1558, 0x971d, "Clevo N970T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa500, "Clevo NL5[03]RU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL50NU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xb018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xb019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
|
||||
Reference in New Issue
Block a user