This is the 4.14.326 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmUOphQACgkQONu9yGCS
 aT48SA//UAwiChca8ejeMfb5naUV7yr0r7Vpe32I7+Z+vY+YmuKO2UWOdBi4rvrY
 +PYIFCA7nfLpp6hXZg14ljX3w1Qh8WftXwlIeml5PJX+/IpyGT2FAx+CcYXAKdQk
 KqANTdDAogw4wfPF+jY0hqRUP0NuIW2jzPU9cMQHm6/reRs8sSqs9wHo5tqlLLBN
 YF66O+MyI/FZRwD3HxSeVlaNk1Rrk6I7CtdnXaUqMo7CosagayoiODn5vPMUJXZW
 I7WOz4hFYJJhvnJKYKCoMUwmpsEQrQwxyeBipfXsoCjdSOn7TBJaTNEqo0cTq1aQ
 kD34afHBY5cZaS2d0EKFcCYVxRwtzh0N73RuimPNTT3Rfkot9ARFwQjk+eOHrJDh
 UQlx4aWq2vX400V68LeE6nSxwAoml888mISVrVqeLu4Xzt9dl4JlLD99GC0tu2GG
 xKZp3BZ2spxEUciGT4Hby3f6PEGO3oJ/m8MSTNsn5wqdeZMbTUQ4O8yWLQZPaacc
 M+FEHK/beW5inq5mi2hy0rs2uvhbSQoLV79jbS0EeN2x5Z6MTyWfifRqLx1VzvgF
 oZHw7AeSv97oJGQfqF5j9BIUOC8jMzMircmxY5z/MmWvvjpkoMtTi0Fm66KbR6c/
 Ydm83ptyuPg0XotdjlGAc1tGkVQatx7c1XzYqeOhKDBxvY4l13A=
 =RCAu
 -----END PGP SIGNATURE-----

Merge 4.14.326 into android-4.14-stable

Changes in 4.14.326
	ARM: pxa: remove use of symbol_get()
	mmc: au1xmmc: force non-modular build and remove symbol_get usage
	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
	HID: wacom: remove the battery when the EKR is off
	Bluetooth: btsdio: fix use after free bug in btsdio_remove due to race condition
	serial: sc16is7xx: fix bug when first setting GPIO direction
	nilfs2: fix general protection fault in nilfs_lookup_dirty_data_buffers()
	nilfs2: fix WARNING in mark_buffer_dirty due to discarded buffer reuse
	pinctrl: amd: Don't show `Invalid config param` errors
	lib/ubsan: remove returns-nonnull-attribute checks
	9p: virtio: make sure 'offs' is initialized in zc_request
	ASoC: da7219: Flush pending AAD IRQ when suspending
	ethernet: atheros: fix return value check in atl1c_tso_csum()
	m68k: Fix invalid .section syntax
	s390/dasd: use correct number of retries for ERP requests
	fs/nls: make load_nls() take a const parameter
	ASoc: codecs: ES8316: Fix DMIC config
	security: keys: perform capable check only on privileged operations
	net: usb: qmi_wwan: add Quectel EM05GV2
	idmaengine: make FSL_EDMA and INTEL_IDMA64 depends on HAS_IOMEM
	scsi: qedi: Fix potential deadlock on &qedi_percpu->p_work_lock
	netlabel: fix shift wrapping bug in netlbl_catmap_setlong()
	bnx2x: fix page fault following EEH recovery
	sctp: handle invalid error codes without calling BUG()
	cifs: add a warning when the in-flight count goes negative
	ALSA: seq: oss: Fix racy open/close of MIDI devices
	powerpc/32: Include .branch_lt in data section
	powerpc/32s: Fix assembler warning about r0
	udf: Check consistency of Space Bitmap Descriptor
	udf: Handle error when adding extent to a file
	Revert "net: macsec: preserve ingress frame ordering"
	reiserfs: Check the return value from __getblk()
	fs: Fix error checking for d_hash_and_lookup()
	cpufreq: powernow-k8: Use related_cpus instead of cpus in driver.exit()
	regmap: rbtree: Use alloc_flags for memory allocations
	spi: tegra20-sflash: fix to check return value of platform_get_irq() in tegra_sflash_probe()
	can: gs_usb: gs_usb_receive_bulk_callback(): count RX overflow errors also in case of OOM
	wifi: mwifiex: Fix OOB and integer underflow when rx packets
	Bluetooth: nokia: fix value check in nokia_bluetooth_serdev_probe()
	net: tcp: fix unexcepted socket die when snd_wnd is 0
	crypto: caam - fix unchecked return value error
	lwt: Check LWTUNNEL_XMIT_CONTINUE strictly
	fs: ocfs2: namei: check return value of ocfs2_add_entry()
	wifi: mwifiex: fix memory leak in mwifiex_histogram_read()
	wifi: mwifiex: Fix missed return in oob checks failed path
	wifi: ath9k: protect WMI command response buffer replacement with a lock
	wifi: mwifiex: avoid possible NULL skb pointer dereference
	wifi: ath9k: use IS_ERR() with debugfs_create_dir()
	net: arcnet: Do not call kfree_skb() under local_irq_disable()
	netrom: Deny concurrent connect().
	ARM: dts: BCM53573: Add cells sizes to PCIe node
	ARM: dts: samsung: s3c6410-mini6410: correct ethernet reg addresses (split)
	ARM: dts: samsung: s5pv210-smdkv210: correct ethernet reg addresses (split)
	drm: adv7511: Fix low refresh rate register for ADV7533/5
	of: unittest: fix null pointer dereferencing in of_unittest_find_node_by_name()
	smackfs: Prevent underflow in smk_set_cipso()
	audit: fix possible soft lockup in __audit_inode_child()
	ALSA: ac97: Fix possible error value of *rac97
	drivers: clk: keystone: Fix parameter judgment in _of_pll_clk_init()
	clk: sunxi-ng: Modify mismatched function name
	PCI: Mark NVIDIA T4 GPUs to avoid bus reset
	PCI: pciehp: Use RMW accessors for changing LNKCTL
	wifi: ath10k: Use RMW accessors for changing LNKCTL
	nfs/blocklayout: Use the passed in gfp flags
	powerpc/iommu: Fix notifiers being shared by PCI and VIO buses
	jfs: validate max amount of blocks before allocation.
	fs: lockd: avoid possible wrong NULL parameter
	NFSD: da_addr_body field missing in some GETDEVICEINFO replies
	drivers: usb: smsusb: fix error handling code in smsusb_init_device
	media: dib7000p: Fix potential division by zero
	media: dvb-usb: m920x: Fix a potential memory leak in m920x_i2c_xfer()
	media: cx24120: Add retval check for cx24120_message_send()
	media: mediatek: vcodec: Return NULL if no vdec_fb is found
	usb: phy: mxs: fix getting wrong state with mxs_phy_is_otg_host()
	scsi: iscsi: Add strlen() check in iscsi_if_set{_host}_param()
	scsi: be2iscsi: Add length check when parsing nlattrs
	scsi: qla4xxx: Add length check when parsing nlattrs
	x86/APM: drop the duplicate APM_MINOR_DEV macro
	scsi: qedf: Do not touch __user pointer in qedf_dbg_stop_io_on_error_cmd_read() directly
	scsi: qedf: Do not touch __user pointer in qedf_dbg_fp_int_cmd_read() directly
	dma-buf/sync_file: Fix docs syntax
	media: go7007: Remove redundant if statement
	USB: gadget: f_mass_storage: Fix unused variable warning
	cgroup:namespace: Remove unused cgroup_namespaces_init()
	scsi: core: Use 32-bit hostnum in scsi_host_lookup()
	scsi: fcoe: Fix potential deadlock on &fip->ctlr_lock
	serial: tegra: handle clk prepare error in tegra_uart_hw_init()
	amba: bus: fix refcount leak
	Revert "IB/isert: Fix incorrect release of isert connection"
	HID: multitouch: Correct devm device reference for hidinput input_dev name
	rpmsg: glink: Add check for kstrdup
	dmaengine: ste_dma40: Add missing IRQ check in d40_probe
	igmp: limit igmpv3_newpack() packet size to IP_MAX_MTU
	netfilter: ipset: add the missing IP_SET_HASH_WITH_NET0 macro for ip_set_hash_netportnet.c
	netfilter: xt_u32: validate user space input
	netfilter: xt_sctp: validate the flag_info count
	igb: set max size RX buffer when store bad packet is enabled
	PM / devfreq: Fix leak in devfreq_dev_release()
	ALSA: pcm: Fix missing fixup call in compat hw_refine ioctl
	ARM: OMAP2+: Fix -Warray-bounds warning in _pwrdm_state_switch()
	backlight/gpio_backlight: Compare against struct fb_info.device
	backlight/bd6107: Compare against struct fb_info.device
	backlight/lv5207lp: Compare against struct fb_info.device
	media: dvb: symbol fixup for dvb_attach()
	ntb: Drop packets when qp link is down
	ntb: Clean up tx tail index on link down
	ntb: Fix calculation ntb_transport_tx_free_entry()
	Revert "PCI: Mark NVIDIA T4 GPUs to avoid bus reset"
	procfs: block chmod on /proc/thread-self/comm
	parisc: Fix /proc/cpuinfo output for lscpu
	dccp: Fix out of bounds access in DCCP error handler
	X.509: if signature is unsupported skip validation
	net: handle ARPHRD_PPP in dev_is_mac_header_xmit()
	pstore/ram: Check start of empty przs during init
	crypto: stm32 - fix loop iterating through scatterlist for DMA
	scsi: qla2xxx: fix inconsistent TMF timeout
	scsi: qla2xxx: Turn off noisy message log
	fbdev/ep93xx-fb: Do not assign to struct fb_info.dev
	drm/ast: Fix DRAM init on AST2200
	parisc: led: Fix LAN receive and transmit LEDs
	parisc: led: Reduce CPU overhead for disk & lan LED computation
	clk: qcom: gcc-mdm9615: use proper parent for pll0_vote clock
	NFSv4/pnfs: minor fix for cleanup path in nfs4_get_device_info
	x86/virt: Drop unnecessary check on extended CPUID level in cpu_has_svm()
	watchdog: intel-mid_wdt: add MODULE_ALIAS() to allow auto-load
	pwm: lpc32xx: Remove handling of PWM channels
	net: read sk->sk_family once in sk_mc_loop()
	igb: disable virtualization features on 82580
	net: ipv6/addrconf: avoid integer underflow in ipv6_create_tempaddr
	af_unix: Fix data-races around user->unix_inflight.
	af_unix: Fix data-race around unix_tot_inflight.
	af_unix: Fix data-races around sk->sk_shutdown.
	af_unix: Fix data race around sk->sk_err.
	net: sched: sch_qfq: Fix UAF in qfq_dequeue()
	kcm: Destroy mutex in kcm_exit_net()
	igbvf: Change IGBVF_MIN to allow set rx/tx value between 64 and 80
	igb: Change IGB_MIN to allow set rx/tx value between 64 and 80
	ata: sata_gemini: Add missing MODULE_DESCRIPTION
	ata: pata_ftide010: Add missing MODULE_DESCRIPTION
	net: ethernet: mtk_eth_soc: fix possible NULL pointer dereference in mtk_hwlro_get_fdir_all()
	kcm: Fix memory leak in error path of kcm_sendmsg()
	ixgbe: fix timestamp configuration code
	kcm: Fix error handling for SOCK_DGRAM in kcm_sendmsg().
	parisc: Drop loops_per_jiffy from per_cpu struct
	autofs: fix memory leak of waitqueues in autofs_catatonic_mode
	btrfs: output extra debug info if we failed to find an inline backref
	ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
	ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470
	hw_breakpoint: fix single-stepping when using bpf_overflow_handler
	wifi: ath9k: fix printk specifier
	wifi: mwifiex: fix fortify warning
	crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
	tpm_tis: Resend command to recover from data transfer errors
	alx: fix OOB-read compiler warning
	drm/exynos: fix a possible null-pointer dereference due to data race in exynos_drm_crtc_atomic_disable()
	md: raid1: fix potential OOB in raid1_remove_disk()
	ext2: fix datatype of block number in ext2_xattr_set2()
	fs/jfs: prevent double-free in dbUnmount() after failed jfs_remount()
	jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmount
	powerpc/pseries: fix possible memory leak in ibmebus_bus_init()
	media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
	media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()
	media: af9005: Fix null-ptr-deref in af9005_i2c_xfer
	media: anysee: fix null-ptr-deref in anysee_master_xfer
	media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()
	iio: core: Use min() instead of min_t() to make code more robust
	media: tuners: qt1010: replace BUG_ON with a regular error
	media: pci: cx23885: replace BUG with error return
	usb: gadget: fsl_qe_udc: validate endpoint index for ch9 udc
	scsi: target: iscsi: Fix buffer overflow in lio_target_nacl_info_show()
	serial: cpm_uart: Avoid suspicious locking
	kobject: Add sanity check for kset->kobj.ktype in kset_register()
	md/raid1: fix error: ISO C90 forbids mixed declarations
	attr: block mode changes of symlinks
	btrfs: fix lockdep splat and potential deadlock after failure running delayed items
	nfsd: fix change_info in NFSv4 RENAME replies
	mtd: rawnand: brcmnand: Fix crash during the panic_write
	mtd: rawnand: brcmnand: Fix potential false time out warning
	mtd: rawnand: brcmnand: Fix ECC level field setting for v7.2 controller
	mtd: rawnand: brcmnand: Fix potential out-of-bounds access in oob write
	net/sched: cls_fw: No longer copy tcf_result on update to avoid use-after-free
	net/sched: Retire rsvp classifier
	Linux 4.14.326

Change-Id: I22815ecf1b4b346f889ccaa561b7cb9a20f204ce
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman 2023-09-30 11:44:35 +00:00
commit 3b3807ea9f
293 changed files with 1082 additions and 1491 deletions

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 4 VERSION = 4
PATCHLEVEL = 14 PATCHLEVEL = 14
SUBLEVEL = 325 SUBLEVEL = 326
EXTRAVERSION = EXTRAVERSION =
NAME = Petit Gorille NAME = Petit Gorille

View File

@ -119,6 +119,9 @@
pcie0: pcie@2000 { pcie0: pcie@2000 {
reg = <0x00002000 0x1000>; reg = <0x00002000 0x1000>;
#address-cells = <3>;
#size-cells = <2>;
}; };
usb2: usb2@4000 { usb2: usb2@4000 {

View File

@ -61,7 +61,7 @@
ethernet@18000000 { ethernet@18000000 {
compatible = "davicom,dm9000"; compatible = "davicom,dm9000";
reg = <0x18000000 0x2 0x18000004 0x2>; reg = <0x18000000 0x2>, <0x18000004 0x2>;
interrupt-parent = <&gpn>; interrupt-parent = <&gpn>;
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>; interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
davicom,no-eeprom; davicom,no-eeprom;

View File

@ -36,7 +36,7 @@
ethernet@18000000 { ethernet@18000000 {
compatible = "davicom,dm9000"; compatible = "davicom,dm9000";
reg = <0xA8000000 0x2 0xA8000002 0x2>; reg = <0xa8000000 0x2>, <0xa8000002 0x2>;
interrupt-parent = <&gph1>; interrupt-parent = <&gph1>;
interrupts = <1 4>; interrupts = <1 4>;
local-mac-address = [00 00 de ad be ef]; local-mac-address = [00 00 de ad be ef];

View File

@ -631,7 +631,7 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
info->address &= ~alignment_mask; info->address &= ~alignment_mask;
info->ctrl.len <<= offset; info->ctrl.len <<= offset;
if (is_default_overflow_handler(bp)) { if (uses_default_overflow_handler(bp)) {
/* /*
* Mismatch breakpoints are required for single-stepping * Mismatch breakpoints are required for single-stepping
* breakpoints. * breakpoints.
@ -803,7 +803,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,
* Otherwise, insert a temporary mismatch breakpoint so that * Otherwise, insert a temporary mismatch breakpoint so that
* we can single-step over the watchpoint trigger. * we can single-step over the watchpoint trigger.
*/ */
if (!is_default_overflow_handler(wp)) if (!uses_default_overflow_handler(wp))
continue; continue;
step: step:
enable_single_step(wp, instruction_pointer(regs)); enable_single_step(wp, instruction_pointer(regs));
@ -816,7 +816,7 @@ step:
info->trigger = addr; info->trigger = addr;
pr_debug("watchpoint fired: address = 0x%x\n", info->trigger); pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
perf_bp_event(wp, regs); perf_bp_event(wp, regs);
if (is_default_overflow_handler(wp)) if (uses_default_overflow_handler(wp))
enable_single_step(wp, instruction_pointer(regs)); enable_single_step(wp, instruction_pointer(regs));
} }
@ -891,7 +891,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs)
info->trigger = addr; info->trigger = addr;
pr_debug("breakpoint fired: address = 0x%x\n", addr); pr_debug("breakpoint fired: address = 0x%x\n", addr);
perf_bp_event(bp, regs); perf_bp_event(bp, regs);
if (is_default_overflow_handler(bp)) if (uses_default_overflow_handler(bp))
enable_single_step(bp, addr); enable_single_step(bp, addr);
goto unlock; goto unlock;
} }

View File

@ -173,7 +173,7 @@ static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag)
break; break;
case PWRDM_STATE_PREV: case PWRDM_STATE_PREV:
prev = pwrdm_read_prev_pwrst(pwrdm); prev = pwrdm_read_prev_pwrst(pwrdm);
if (pwrdm->state != prev) if (prev >= 0 && pwrdm->state != prev)
pwrdm->state_counter[prev]++; pwrdm->state_counter[prev]++;
if (prev == PWRDM_POWER_RET) if (prev == PWRDM_POWER_RET)
_update_logic_membank_counters(pwrdm); _update_logic_membank_counters(pwrdm);

View File

@ -224,8 +224,6 @@ void sharpsl_battery_kick(void)
{ {
schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125)); schedule_delayed_work(&sharpsl_bat, msecs_to_jiffies(125));
} }
EXPORT_SYMBOL(sharpsl_battery_kick);
static void sharpsl_battery_thread(struct work_struct *private_) static void sharpsl_battery_thread(struct work_struct *private_)
{ {

View File

@ -13,7 +13,6 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> /* symbol_get ; symbol_put */
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
@ -517,17 +516,6 @@ static struct pxa2xx_spi_chip spitz_ads7846_chip = {
.gpio_cs = SPITZ_GPIO_ADS7846_CS, .gpio_cs = SPITZ_GPIO_ADS7846_CS,
}; };
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 corgi_lcd_platform_data spitz_lcdcon_info = { static struct corgi_lcd_platform_data spitz_lcdcon_info = {
.init_mode = CORGI_LCD_MODE_VGA, .init_mode = CORGI_LCD_MODE_VGA,
.max_intensity = 0x2f, .max_intensity = 0x2f,
@ -535,7 +523,7 @@ static struct corgi_lcd_platform_data spitz_lcdcon_info = {
.limit_mask = 0x0b, .limit_mask = 0x0b,
.gpio_backlight_cont = SPITZ_GPIO_BACKLIGHT_CONT, .gpio_backlight_cont = SPITZ_GPIO_BACKLIGHT_CONT,
.gpio_backlight_on = SPITZ_GPIO_BACKLIGHT_ON, .gpio_backlight_on = SPITZ_GPIO_BACKLIGHT_ON,
.kick_battery = spitz_bl_kick_battery, .kick_battery = sharpsl_battery_kick,
}; };
static struct pxa2xx_spi_chip spitz_lcdcon_chip = { static struct pxa2xx_spi_chip spitz_lcdcon_chip = {

View File

@ -662,7 +662,7 @@ static int breakpoint_handler(unsigned long unused, unsigned int esr,
perf_bp_event(bp, regs); perf_bp_event(bp, regs);
/* Do we need to handle the stepping? */ /* Do we need to handle the stepping? */
if (is_default_overflow_handler(bp)) if (uses_default_overflow_handler(bp))
step = 1; step = 1;
unlock: unlock:
rcu_read_unlock(); rcu_read_unlock();
@ -741,7 +741,7 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,
static int watchpoint_report(struct perf_event *wp, unsigned long addr, static int watchpoint_report(struct perf_event *wp, unsigned long addr,
struct pt_regs *regs) struct pt_regs *regs)
{ {
int step = is_default_overflow_handler(wp); int step = uses_default_overflow_handler(wp);
struct arch_hw_breakpoint *info = counter_arch_bp(wp); struct arch_hw_breakpoint *info = counter_arch_bp(wp);
info->trigger = addr; info->trigger = addr;

View File

@ -499,12 +499,12 @@ in_ea:
dbf %d0,morein dbf %d0,morein
rts rts
.section .fixup,#alloc,#execinstr .section .fixup,"ax"
.even .even
1: 1:
jbra fpsp040_die jbra fpsp040_die
.section __ex_table,#alloc .section __ex_table,"a"
.align 4 .align 4
.long in_ea,1b .long in_ea,1b

View File

@ -379,11 +379,11 @@ _060_real_access:
| Execption handling for movs access to illegal memory | Execption handling for movs access to illegal memory
.section .fixup,#alloc,#execinstr .section .fixup,"ax"
.even .even
1: moveq #-1,%d1 1: moveq #-1,%d1
rts rts
.section __ex_table,#alloc .section __ex_table,"a"
.align 4 .align 4
.long dmrbuae,1b .long dmrbuae,1b
.long dmrwuae,1b .long dmrwuae,1b

View File

@ -26,7 +26,7 @@ ENTRY(relocate_new_kernel)
lea %pc@(.Lcopy),%a4 lea %pc@(.Lcopy),%a4
2: addl #0x00000000,%a4 /* virt_to_phys() */ 2: addl #0x00000000,%a4 /* virt_to_phys() */
.section ".m68k_fixup","aw" .section .m68k_fixup,"aw"
.long M68K_FIXUP_MEMOFFSET, 2b+2 .long M68K_FIXUP_MEMOFFSET, 2b+2
.previous .previous
@ -49,7 +49,7 @@ ENTRY(relocate_new_kernel)
lea %pc@(.Lcont040),%a4 lea %pc@(.Lcont040),%a4
5: addl #0x00000000,%a4 /* virt_to_phys() */ 5: addl #0x00000000,%a4 /* virt_to_phys() */
.section ".m68k_fixup","aw" .section .m68k_fixup,"aw"
.long M68K_FIXUP_MEMOFFSET, 5b+2 .long M68K_FIXUP_MEMOFFSET, 5b+2
.previous .previous

View File

@ -26,7 +26,6 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
@ -175,12 +174,7 @@ static struct platform_device db1x00_audio_dev = {
static irqreturn_t db1100_mmc_cd(int irq, void *ptr) static irqreturn_t db1100_mmc_cd(int irq, void *ptr)
{ {
void (*mmc_cd)(struct mmc_host *, unsigned long); mmc_detect_change(ptr, msecs_to_jiffies(500));
/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
mmc_cd(ptr, msecs_to_jiffies(500));
symbol_put(mmc_detect_change);
return IRQ_HANDLED; return IRQ_HANDLED;
} }

View File

@ -23,7 +23,6 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/leds.h> #include <linux/leds.h>
@ -355,14 +354,7 @@ static irqreturn_t db1200_mmc_cd(int irq, void *ptr)
static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr) static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr)
{ {
void (*mmc_cd)(struct mmc_host *, unsigned long); mmc_detect_change(ptr, msecs_to_jiffies(200));
/* 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);
}
msleep(100); /* debounce */ msleep(100); /* debounce */
if (irq == DB1200_SD0_INSERT_INT) if (irq == DB1200_SD0_INSERT_INT)
@ -446,14 +438,7 @@ static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr)
static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr) static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr)
{ {
void (*mmc_cd)(struct mmc_host *, unsigned long); mmc_detect_change(ptr, msecs_to_jiffies(200));
/* 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);
}
msleep(100); /* debounce */ msleep(100); /* debounce */
if (irq == PB1200_SD1_INSERT_INT) if (irq == PB1200_SD1_INSERT_INT)

View File

@ -17,7 +17,6 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/ata_platform.h> #include <linux/ata_platform.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/rawnand.h> #include <linux/mtd/rawnand.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
@ -457,14 +456,7 @@ static irqreturn_t db1300_mmc_cd(int irq, void *ptr)
static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr) static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr)
{ {
void (*mmc_cd)(struct mmc_host *, unsigned long); mmc_detect_change(ptr, msecs_to_jiffies(200));
/* 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);
msleep(100); /* debounce */ msleep(100); /* debounce */
if (irq == DB1300_SD1_INSERT_INT) if (irq == DB1300_SD1_INSERT_INT)

View File

@ -11,8 +11,8 @@
#define LED1 0x02 #define LED1 0x02
#define LED0 0x01 /* bottom (or furthest left) LED */ #define LED0 0x01 /* bottom (or furthest left) LED */
#define LED_LAN_TX LED0 /* for LAN transmit activity */ #define LED_LAN_RCV LED0 /* for LAN receive activity */
#define LED_LAN_RCV LED1 /* for LAN receive activity */ #define LED_LAN_TX LED1 /* for LAN transmit activity */
#define LED_DISK_IO LED2 /* for disk activity */ #define LED_DISK_IO LED2 /* for disk activity */
#define LED_HEARTBEAT LED3 /* heartbeat */ #define LED_HEARTBEAT LED3 /* heartbeat */

View File

@ -108,7 +108,6 @@ struct cpuinfo_parisc {
unsigned long cpu_loc; /* CPU location from PAT firmware */ unsigned long cpu_loc; /* CPU location from PAT firmware */
unsigned int state; unsigned int state;
struct parisc_device *dev; struct parisc_device *dev;
unsigned long loops_per_jiffy;
}; };
extern struct system_cpuinfo_parisc boot_cpu_data; extern struct system_cpuinfo_parisc boot_cpu_data;

View File

@ -177,7 +177,6 @@ static int __init processor_probe(struct parisc_device *dev)
if (cpuid) if (cpuid)
memset(p, 0, sizeof(struct cpuinfo_parisc)); memset(p, 0, sizeof(struct cpuinfo_parisc));
p->loops_per_jiffy = loops_per_jiffy;
p->dev = dev; /* Save IODC data in case we need it */ p->dev = dev; /* Save IODC data in case we need it */
p->hpa = dev->hpa.start; /* save CPU hpa */ p->hpa = dev->hpa.start; /* save CPU hpa */
p->cpuid = cpuid; /* save CPU id */ p->cpuid = cpuid; /* save CPU id */
@ -370,10 +369,18 @@ int
show_cpuinfo (struct seq_file *m, void *v) show_cpuinfo (struct seq_file *m, void *v)
{ {
unsigned long cpu; unsigned long cpu;
char cpu_name[60], *p;
/* strip PA path from CPU name to not confuse lscpu */
strlcpy(cpu_name, per_cpu(cpu_data, 0).dev->name, sizeof(cpu_name));
p = strrchr(cpu_name, '[');
if (p)
*(--p) = 0;
for_each_online_cpu(cpu) { for_each_online_cpu(cpu) {
const struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
const struct cpuinfo_parisc *cpuinfo = &per_cpu(cpu_data, cpu);
if (0 == cpuinfo->hpa) if (0 == cpuinfo->hpa)
continue; continue;
#endif #endif
@ -410,8 +417,7 @@ show_cpuinfo (struct seq_file *m, void *v)
seq_printf(m, "model\t\t: %s - %s\n", seq_printf(m, "model\t\t: %s - %s\n",
boot_cpu_data.pdc.sys_model_name, boot_cpu_data.pdc.sys_model_name,
cpuinfo->dev ? cpu_name);
cpuinfo->dev->name : "Unknown");
seq_printf(m, "hversion\t: 0x%08x\n" seq_printf(m, "hversion\t: 0x%08x\n"
"sversion\t: 0x%08x\n", "sversion\t: 0x%08x\n",
@ -422,8 +428,8 @@ show_cpuinfo (struct seq_file *m, void *v)
show_cache_info(m); show_cache_info(m);
seq_printf(m, "bogomips\t: %lu.%02lu\n", seq_printf(m, "bogomips\t: %lu.%02lu\n",
cpuinfo->loops_per_jiffy / (500000 / HZ), loops_per_jiffy / (500000 / HZ),
(cpuinfo->loops_per_jiffy / (5000 / HZ)) % 100); loops_per_jiffy / (5000 / HZ) % 100);
seq_printf(m, "software id\t: %ld\n\n", seq_printf(m, "software id\t: %ld\n\n",
boot_cpu_data.pdc.model.sw_id); boot_cpu_data.pdc.model.sw_id);

View File

@ -986,7 +986,7 @@ start_here:
*/ */
lis r5, abatron_pteptrs@h lis r5, abatron_pteptrs@h
ori r5, r5, abatron_pteptrs@l ori r5, r5, abatron_pteptrs@l
stw r5, 0xf0(r0) /* This much match your Abatron config */ stw r5, 0xf0(0) /* This much match your Abatron config */
lis r6, swapper_pg_dir@h lis r6, swapper_pg_dir@h
ori r6, r6, swapper_pg_dir@l ori r6, r6, swapper_pg_dir@l
tophys(r5, r5) tophys(r5, r5)

View File

@ -145,17 +145,28 @@ static int fail_iommu_bus_notify(struct notifier_block *nb,
return 0; return 0;
} }
static struct notifier_block fail_iommu_bus_notifier = { /*
* PCI and VIO buses need separate notifier_block structs, since they're linked
* list nodes. Sharing a notifier_block would mean that any notifiers later
* registered for PCI buses would also get called by VIO buses and vice versa.
*/
static struct notifier_block fail_iommu_pci_bus_notifier = {
.notifier_call = fail_iommu_bus_notify .notifier_call = fail_iommu_bus_notify
}; };
#ifdef CONFIG_IBMVIO
static struct notifier_block fail_iommu_vio_bus_notifier = {
.notifier_call = fail_iommu_bus_notify
};
#endif
static int __init fail_iommu_setup(void) static int __init fail_iommu_setup(void)
{ {
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
bus_register_notifier(&pci_bus_type, &fail_iommu_bus_notifier); bus_register_notifier(&pci_bus_type, &fail_iommu_pci_bus_notifier);
#endif #endif
#ifdef CONFIG_IBMVIO #ifdef CONFIG_IBMVIO
bus_register_notifier(&vio_bus_type, &fail_iommu_bus_notifier); bus_register_notifier(&vio_bus_type, &fail_iommu_vio_bus_notifier);
#endif #endif
return 0; return 0;

View File

@ -322,6 +322,7 @@ SECTIONS
*(.sdata2) *(.sdata2)
*(.got.plt) *(.got) *(.got.plt) *(.got)
*(.plt) *(.plt)
*(.branch_lt)
} }
#else #else
.data : AT(ADDR(.data) - LOAD_OFFSET) { .data : AT(ADDR(.data) - LOAD_OFFSET) {

View File

@ -452,6 +452,7 @@ static int __init ibmebus_bus_init(void)
if (err) { if (err) {
printk(KERN_WARNING "%s: device_register returned %i\n", printk(KERN_WARNING "%s: device_register returned %i\n",
__func__, err); __func__, err);
put_device(&ibmebus_bus_device);
bus_unregister(&ibmebus_bus_type); bus_unregister(&ibmebus_bus_type);
return err; return err;

View File

@ -89,12 +89,6 @@ static inline int cpu_has_svm(const char **msg)
return 0; return 0;
} }
if (boot_cpu_data.extended_cpuid_level < SVM_CPUID_FUNC) {
if (msg)
*msg = "can't execute cpuid_8000000a";
return 0;
}
if (!boot_cpu_has(X86_FEATURE_SVM)) { if (!boot_cpu_has(X86_FEATURE_SVM)) {
if (msg) if (msg)
*msg = "svm not available"; *msg = "svm not available";

View File

@ -246,12 +246,6 @@
extern int (*console_blank_hook)(int); extern int (*console_blank_hook)(int);
#endif #endif
/*
* The apm_bios device is one of the misc char devices.
* This is its minor number.
*/
#define APM_MINOR_DEV 134
/* /*
* Various options can be changed at boot time as follows: * Various options can be changed at boot time as follows:
* (We allow underscores for compatibility with the modules code) * (We allow underscores for compatibility with the modules code)

View File

@ -138,6 +138,11 @@ int x509_check_for_self_signed(struct x509_certificate *cert)
if (strcmp(cert->pub->pkey_algo, cert->sig->pkey_algo) != 0) if (strcmp(cert->pub->pkey_algo, cert->sig->pkey_algo) != 0)
goto out; goto out;
if (cert->unsupported_sig) {
ret = 0;
goto out;
}
ret = public_key_verify_signature(cert->pub, cert->sig); ret = public_key_verify_signature(cert->pub, cert->sig);
if (ret < 0) { if (ret < 0) {
if (ret == -ENOPKG) { if (ret == -ENOPKG) {

View File

@ -637,7 +637,7 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {
/* 7E */ ACPI_OP("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY, /* 7E */ ACPI_OP("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY,
AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R, AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R,
AML_FLAGS_EXEC_0A_0T_1R), AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE),
/* ACPI 5.0 opcodes */ /* ACPI 5.0 opcodes */

View File

@ -294,6 +294,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "Lenovo IdeaPad S405"), DMI_MATCH(DMI_BOARD_NAME, "Lenovo IdeaPad S405"),
}, },
}, },
{
/* https://bugzilla.suse.com/show_bug.cgi?id=1208724 */
.callback = video_detect_force_native,
/* Lenovo Ideapad Z470 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Z470"),
},
},
{ {
/* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */ /* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */
.callback = video_detect_force_native, .callback = video_detect_force_native,

View File

@ -344,6 +344,7 @@ static void amba_device_release(struct device *dev)
{ {
struct amba_device *d = to_amba_device(dev); struct amba_device *d = to_amba_device(dev);
of_node_put(d->dev.of_node);
if (d->res.parent) if (d->res.parent)
release_resource(&d->res); release_resource(&d->res);
kfree(d); kfree(d);

View File

@ -569,6 +569,7 @@ static struct platform_driver pata_ftide010_driver = {
}; };
module_platform_driver(pata_ftide010_driver); module_platform_driver(pata_ftide010_driver);
MODULE_DESCRIPTION("low level driver for Faraday Technology FTIDE010");
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>"); MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:" DRV_NAME); MODULE_ALIAS("platform:" DRV_NAME);

View File

@ -434,6 +434,7 @@ static struct platform_driver gemini_sata_driver = {
}; };
module_platform_driver(gemini_sata_driver); module_platform_driver(gemini_sata_driver);
MODULE_DESCRIPTION("low level driver for Cortina Systems Gemini SATA bridge");
MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>"); MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:" DRV_NAME); MODULE_ALIAS("platform:" DRV_NAME);

View File

@ -291,7 +291,7 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
blk = krealloc(rbnode->block, blk = krealloc(rbnode->block,
blklen * map->cache_word_size, blklen * map->cache_word_size,
GFP_KERNEL); map->alloc_flags);
if (!blk) if (!blk)
return -ENOMEM; return -ENOMEM;
@ -300,7 +300,7 @@ static int regcache_rbtree_insert_to_block(struct regmap *map,
if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) { if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
present = krealloc(rbnode->cache_present, present = krealloc(rbnode->cache_present,
BITS_TO_LONGS(blklen) * sizeof(*present), BITS_TO_LONGS(blklen) * sizeof(*present),
GFP_KERNEL); map->alloc_flags);
if (!present) if (!present)
return -ENOMEM; return -ENOMEM;
@ -334,7 +334,7 @@ regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg)
const struct regmap_range *range; const struct regmap_range *range;
int i; int i;
rbnode = kzalloc(sizeof(*rbnode), GFP_KERNEL); rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags);
if (!rbnode) if (!rbnode)
return NULL; return NULL;
@ -360,13 +360,13 @@ regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg)
} }
rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size, rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size,
GFP_KERNEL); map->alloc_flags);
if (!rbnode->block) if (!rbnode->block)
goto err_free; goto err_free;
rbnode->cache_present = kcalloc(BITS_TO_LONGS(rbnode->blklen), rbnode->cache_present = kcalloc(BITS_TO_LONGS(rbnode->blklen),
sizeof(*rbnode->cache_present), sizeof(*rbnode->cache_present),
GFP_KERNEL); map->alloc_flags);
if (!rbnode->cache_present) if (!rbnode->cache_present)
goto err_free_block; goto err_free_block;

View File

@ -356,6 +356,7 @@ static void btsdio_remove(struct sdio_func *func)
if (!data) if (!data)
return; return;
cancel_work_sync(&data->work);
hdev = data->hdev; hdev = data->hdev;
sdio_set_drvdata(func, NULL); sdio_set_drvdata(func, NULL);

View File

@ -746,7 +746,11 @@ static int nokia_bluetooth_serdev_probe(struct serdev_device *serdev)
return err; return err;
} }
clk_prepare_enable(sysclk); err = clk_prepare_enable(sysclk);
if (err) {
dev_err(dev, "could not enable sysclk: %d", err);
return err;
}
btdev->sysclk_speed = clk_get_rate(sysclk); btdev->sysclk_speed = clk_get_rate(sysclk);
clk_disable_unprepare(sysclk); clk_disable_unprepare(sysclk);

View File

@ -364,10 +364,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)
int rc; int rc;
u32 ordinal; u32 ordinal;
unsigned long dur; unsigned long dur;
unsigned int try;
rc = tpm_tis_send_data(chip, buf, len); for (try = 0; try < TPM_RETRY; try++) {
if (rc < 0) rc = tpm_tis_send_data(chip, buf, len);
return rc; if (rc >= 0)
/* Data transfer done successfully */
break;
else if (rc != -EIO)
/* Data transfer failed, not recoverable */
return rc;
}
/* go and do it */ /* go and do it */
rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO); rc = tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO);

View File

@ -213,7 +213,7 @@ static void __init _of_pll_clk_init(struct device_node *node, bool pllctrl)
} }
clk = clk_register_pll(NULL, node->name, parent_name, pll_data); clk = clk_register_pll(NULL, node->name, parent_name, pll_data);
if (clk) { if (!IS_ERR_OR_NULL(clk)) {
of_clk_add_provider(node, of_clk_src_simple_get, clk); of_clk_add_provider(node, of_clk_src_simple_get, clk);
return; return;
} }

View File

@ -66,7 +66,7 @@ static struct clk_regmap pll0_vote = {
.enable_mask = BIT(0), .enable_mask = BIT(0),
.hw.init = &(struct clk_init_data){ .hw.init = &(struct clk_init_data){
.name = "pll0_vote", .name = "pll0_vote",
.parent_names = (const char *[]){ "pll8" }, .parent_names = (const char *[]){ "pll0" },
.num_parents = 1, .num_parents = 1,
.ops = &clk_pll_vote_ops, .ops = &clk_pll_vote_ops,
}, },

View File

@ -50,7 +50,7 @@ int sunxi_ccu_set_mmc_timing_mode(struct clk *clk, bool new_mode)
EXPORT_SYMBOL_GPL(sunxi_ccu_set_mmc_timing_mode); EXPORT_SYMBOL_GPL(sunxi_ccu_set_mmc_timing_mode);
/** /**
* sunxi_ccu_set_mmc_timing_mode: Get the current MMC clock timing mode * sunxi_ccu_get_mmc_timing_mode: Get the current MMC clock timing mode
* @clk: clock to query * @clk: clock to query
* *
* Returns 0 if the clock is in old timing mode, > 0 if it is in * Returns 0 if the clock is in old timing mode, > 0 if it is in

View File

@ -1120,7 +1120,8 @@ static int powernowk8_cpu_exit(struct cpufreq_policy *pol)
kfree(data->powernow_table); kfree(data->powernow_table);
kfree(data); kfree(data);
for_each_cpu(cpu, pol->cpus) /* pol->cpus will be empty here, use related_cpus instead. */
for_each_cpu(cpu, pol->related_cpus)
per_cpu(powernow_data, cpu) = NULL; per_cpu(powernow_data, cpu) = NULL;
return 0; return 0;

View File

@ -194,7 +194,9 @@ static int caam_rsa_count_leading_zeros(struct scatterlist *sgl,
if (len && *buff) if (len && *buff)
break; break;
sg_miter_next(&miter); if (!sg_miter_next(&miter))
break;
buff = miter.addr; buff = miter.addr;
len = miter.length; len = miter.length;

View File

@ -574,9 +574,9 @@ static int stm32_hash_dma_send(struct stm32_hash_dev *hdev)
} }
for_each_sg(rctx->sg, tsg, rctx->nents, i) { for_each_sg(rctx->sg, tsg, rctx->nents, i) {
sg[0] = *tsg;
len = sg->length; len = sg->length;
sg[0] = *tsg;
if (sg_is_last(sg)) { if (sg_is_last(sg)) {
if (hdev->dma_mode == 1) { if (hdev->dma_mode == 1) {
len = (ALIGN(sg->length, 16) - 16); len = (ALIGN(sg->length, 16) - 16);

View File

@ -495,6 +495,7 @@ static void devfreq_dev_release(struct device *dev)
devfreq->profile->exit(devfreq->dev.parent); devfreq->profile->exit(devfreq->dev.parent);
mutex_destroy(&devfreq->lock); mutex_destroy(&devfreq->lock);
srcu_cleanup_notifier_head(&devfreq->transition_notifier_list);
kfree(devfreq); kfree(devfreq);
} }

View File

@ -209,6 +209,7 @@ config FSL_DMA
config FSL_EDMA config FSL_EDMA
tristate "Freescale eDMA engine support" tristate "Freescale eDMA engine support"
depends on OF depends on OF
depends on HAS_IOMEM
select DMA_ENGINE select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS select DMA_VIRTUAL_CHANNELS
help help
@ -254,6 +255,7 @@ config IMX_SDMA
config INTEL_IDMA64 config INTEL_IDMA64
tristate "Intel integrated DMA 64-bit support" tristate "Intel integrated DMA 64-bit support"
depends on HAS_IOMEM
select DMA_ENGINE select DMA_ENGINE
select DMA_VIRTUAL_CHANNELS select DMA_VIRTUAL_CHANNELS
help help

View File

@ -3577,6 +3577,10 @@ static int __init d40_probe(struct platform_device *pdev)
spin_lock_init(&base->lcla_pool.lock); spin_lock_init(&base->lcla_pool.lock);
base->irq = platform_get_irq(pdev, 0); base->irq = platform_get_irq(pdev, 0);
if (base->irq < 0) {
ret = base->irq;
goto destroy_cache;
}
ret = request_irq(base->irq, d40_handle_interrupt, 0, D40_NAME, base); ret = request_irq(base->irq, d40_handle_interrupt, 0, D40_NAME, base);
if (ret) { if (ret) {

View File

@ -291,7 +291,7 @@ static void ast_init_dram_reg(struct drm_device *dev)
; ;
} while (ast_read32(ast, 0x10100) != 0xa8); } while (ast_read32(ast, 0x10100) != 0xa8);
} else {/* AST2100/1100 */ } else {/* AST2100/1100 */
if (ast->chip == AST2100 || ast->chip == 2200) if (ast->chip == AST2100 || ast->chip == AST2200)
dram_reg_info = ast2100_dram_table_data; dram_reg_info = ast2100_dram_table_data;
else else
dram_reg_info = ast1100_dram_table_data; dram_reg_info = ast1100_dram_table_data;

View File

@ -744,8 +744,13 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
else else
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE; low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
regmap_update_bits(adv7511->regmap, 0xfb, if (adv7511->type == ADV7511)
0x6, low_refresh_rate << 1); regmap_update_bits(adv7511->regmap, 0xfb,
0x6, low_refresh_rate << 1);
else
regmap_update_bits(adv7511->regmap, 0x4a,
0xc, low_refresh_rate << 2);
regmap_update_bits(adv7511->regmap, 0x17, regmap_update_bits(adv7511->regmap, 0x17,
0x60, (vsync_polarity << 6) | (hsync_polarity << 5)); 0x60, (vsync_polarity << 6) | (hsync_polarity << 5));

View File

@ -43,13 +43,12 @@ static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,
if (exynos_crtc->ops->disable) if (exynos_crtc->ops->disable)
exynos_crtc->ops->disable(exynos_crtc); exynos_crtc->ops->disable(exynos_crtc);
spin_lock_irq(&crtc->dev->event_lock);
if (crtc->state->event && !crtc->state->active) { if (crtc->state->event && !crtc->state->active) {
spin_lock_irq(&crtc->dev->event_lock);
drm_crtc_send_vblank_event(crtc, crtc->state->event); drm_crtc_send_vblank_event(crtc, crtc->state->event);
spin_unlock_irq(&crtc->dev->event_lock);
crtc->state->event = NULL; crtc->state->event = NULL;
} }
spin_unlock_irq(&crtc->dev->event_lock);
} }
static int exynos_crtc_atomic_check(struct drm_crtc *crtc, static int exynos_crtc_atomic_check(struct drm_crtc *crtc,

View File

@ -1136,7 +1136,6 @@ static void mt_post_parse(struct mt_device *td)
static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi) static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
{ {
struct mt_device *td = hid_get_drvdata(hdev); struct mt_device *td = hid_get_drvdata(hdev);
char *name;
const char *suffix = NULL; const char *suffix = NULL;
struct hid_field *field = hi->report->field[0]; struct hid_field *field = hi->report->field[0];
int ret; int ret;
@ -1196,15 +1195,9 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
} }
} }
if (suffix) { if (suffix)
name = devm_kzalloc(&hi->input->dev, hi->input->name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
strlen(hdev->name) + strlen(suffix) + 2, "%s %s", hdev->name, suffix);
GFP_KERNEL);
if (name) {
sprintf(name, "%s %s", hdev->name, suffix);
hi->input->name = name;
}
}
return 0; return 0;
} }

View File

@ -155,6 +155,7 @@ struct wacom_remote {
struct input_dev *input; struct input_dev *input;
bool registered; bool registered;
struct wacom_battery battery; struct wacom_battery battery;
ktime_t active_time;
} remotes[WACOM_MAX_REMOTES]; } remotes[WACOM_MAX_REMOTES];
}; };

View File

@ -2361,6 +2361,18 @@ fail:
return; 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) static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
{ {
struct wacom_remote *remote = wacom->remote; struct wacom_remote *remote = wacom->remote;
@ -2375,9 +2387,7 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
remote->remotes[i].registered = false; remote->remotes[i].registered = false;
spin_unlock_irqrestore(&remote->remote_lock, flags); spin_unlock_irqrestore(&remote->remote_lock, flags);
if (remote->remotes[i].battery.battery) wacom_remote_destroy_battery(wacom, i);
devres_release_group(&wacom->hdev->dev,
&remote->remotes[i].battery.bat_desc);
if (remote->remotes[i].group.name) if (remote->remotes[i].group.name)
devres_release_group(&wacom->hdev->dev, devres_release_group(&wacom->hdev->dev,
@ -2385,7 +2395,6 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
remote->remotes[i].serial = 0; remote->remotes[i].serial = 0;
remote->remotes[i].group.name = NULL; remote->remotes[i].group.name = NULL;
remote->remotes[i].battery.battery = NULL;
wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
} }
} }
@ -2470,6 +2479,9 @@ static int wacom_remote_attach_battery(struct wacom *wacom, int index)
if (remote->remotes[index].battery.battery) if (remote->remotes[index].battery.battery)
return 0; return 0;
if (!remote->remotes[index].active_time)
return 0;
if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN) if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
return 0; return 0;
@ -2485,6 +2497,7 @@ static void wacom_remote_work(struct work_struct *work)
{ {
struct wacom *wacom = container_of(work, struct wacom, remote_work); struct wacom *wacom = container_of(work, struct wacom, remote_work);
struct wacom_remote *remote = wacom->remote; struct wacom_remote *remote = wacom->remote;
ktime_t kt = ktime_get();
struct wacom_remote_data data; struct wacom_remote_data data;
unsigned long flags; unsigned long flags;
unsigned int count; unsigned int count;
@ -2511,6 +2524,10 @@ static void wacom_remote_work(struct work_struct *work)
serial = data.remote[i].serial; serial = data.remote[i].serial;
if (data.remote[i].connected) { 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) { if (remote->remotes[i].serial == serial) {
wacom_remote_attach_battery(wacom, i); wacom_remote_attach_battery(wacom, i);
continue; continue;

View File

@ -1039,6 +1039,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len)
if (index < 0 || !remote->remotes[index].registered) if (index < 0 || !remote->remotes[index].registered)
goto out; goto out;
remote->remotes[i].active_time = ktime_get();
input = remote->remotes[index].input; input = remote->remotes[index].input;
input_report_key(input, BTN_0, (data[9] & 0x01)); input_report_key(input, BTN_0, (data[9] & 0x01));

View File

@ -18,6 +18,7 @@
#define WACOM_NAME_MAX 64 #define WACOM_NAME_MAX 64
#define WACOM_MAX_REMOTES 5 #define WACOM_MAX_REMOTES 5
#define WACOM_STATUS_UNKNOWN 255 #define WACOM_STATUS_UNKNOWN 255
#define WACOM_REMOTE_BATTERY_TIMEOUT 21000000000ll
/* packet length for individual models */ /* packet length for individual models */
#define WACOM_PKGLEN_BBFUN 9 #define WACOM_PKGLEN_BBFUN 9

View File

@ -328,7 +328,7 @@ static ssize_t iio_debugfs_write_reg(struct file *file,
char buf[80]; char buf[80];
int ret; int ret;
count = min_t(size_t, count, (sizeof(buf)-1)); count = min(count, sizeof(buf) - 1);
if (copy_from_user(buf, userbuf, count)) if (copy_from_user(buf, userbuf, count))
return -EFAULT; return -EFAULT;

View File

@ -2652,6 +2652,8 @@ static void isert_wait_conn(struct iscsi_conn *conn)
isert_put_unsol_pending_cmds(conn); isert_put_unsol_pending_cmds(conn);
isert_wait4cmds(conn); isert_wait4cmds(conn);
isert_wait4logout(isert_conn); isert_wait4logout(isert_conn);
queue_work(isert_release_wq, &isert_conn->release_work);
} }
static void isert_free_conn(struct iscsi_conn *conn) static void isert_free_conn(struct iscsi_conn *conn)

View File

@ -1777,6 +1777,9 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
int number = rdev->raid_disk; int number = rdev->raid_disk;
struct raid1_info *p = conf->mirrors + number; struct raid1_info *p = conf->mirrors + number;
if (unlikely(number >= conf->raid_disks))
goto abort;
if (rdev != p->rdev) if (rdev != p->rdev)
p = conf->mirrors + conf->raid_disks + number; p = conf->mirrors + conf->raid_disks + number;

View File

@ -542,7 +542,7 @@ struct dvb_frontend *ascot2e_attach(struct dvb_frontend *fe,
priv->i2c_address, priv->i2c); priv->i2c_address, priv->i2c);
return fe; return fe;
} }
EXPORT_SYMBOL(ascot2e_attach); EXPORT_SYMBOL_GPL(ascot2e_attach);
MODULE_DESCRIPTION("Sony ASCOT2E terr/cab tuner driver"); MODULE_DESCRIPTION("Sony ASCOT2E terr/cab tuner driver");
MODULE_AUTHOR("info@netup.ru"); MODULE_AUTHOR("info@netup.ru");

View File

@ -498,7 +498,7 @@ error_out:
return NULL; return NULL;
} }
EXPORT_SYMBOL(atbm8830_attach); EXPORT_SYMBOL_GPL(atbm8830_attach);
MODULE_DESCRIPTION("AltoBeam ATBM8830/8831 GB20600 demodulator driver"); MODULE_DESCRIPTION("AltoBeam ATBM8830/8831 GB20600 demodulator driver");
MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>"); MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");

View File

@ -891,7 +891,7 @@ error:
au8522_release_state(state); au8522_release_state(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(au8522_attach); EXPORT_SYMBOL_GPL(au8522_attach);
static const struct dvb_frontend_ops au8522_ops = { static const struct dvb_frontend_ops au8522_ops = {
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B }, .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },

View File

@ -835,7 +835,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(bcm3510_attach); EXPORT_SYMBOL_GPL(bcm3510_attach);
static const struct dvb_frontend_ops bcm3510_ops = { static const struct dvb_frontend_ops bcm3510_ops = {
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B }, .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },

View File

@ -444,4 +444,4 @@ MODULE_DESCRIPTION("Conexant CX22700 DVB-T Demodulator driver");
MODULE_AUTHOR("Holger Waechtler"); MODULE_AUTHOR("Holger Waechtler");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
EXPORT_SYMBOL(cx22700_attach); EXPORT_SYMBOL_GPL(cx22700_attach);

View File

@ -616,7 +616,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(cx22702_attach); EXPORT_SYMBOL_GPL(cx22702_attach);
static const struct dvb_frontend_ops cx22702_ops = { static const struct dvb_frontend_ops cx22702_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -666,4 +666,4 @@ MODULE_DESCRIPTION("Conexant CX24110 DVB-S Demodulator driver");
MODULE_AUTHOR("Peter Hettkamp"); MODULE_AUTHOR("Peter Hettkamp");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
EXPORT_SYMBOL(cx24110_attach); EXPORT_SYMBOL_GPL(cx24110_attach);

View File

@ -602,7 +602,7 @@ error:
return NULL; return NULL;
} }
EXPORT_SYMBOL(cx24113_attach); EXPORT_SYMBOL_GPL(cx24113_attach);
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)"); MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");

View File

@ -1151,7 +1151,7 @@ struct dvb_frontend *cx24116_attach(const struct cx24116_config *config,
error2: kfree(state); error2: kfree(state);
error1: return NULL; error1: return NULL;
} }
EXPORT_SYMBOL(cx24116_attach); EXPORT_SYMBOL_GPL(cx24116_attach);
/* /*
* Initialise or wake up device * Initialise or wake up device

View File

@ -313,7 +313,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(cx24120_attach); EXPORT_SYMBOL_GPL(cx24120_attach);
static int cx24120_test_rom(struct cx24120_state *state) static int cx24120_test_rom(struct cx24120_state *state)
{ {
@ -980,7 +980,9 @@ static void cx24120_set_clock_ratios(struct dvb_frontend *fe)
cmd.arg[8] = (clock_ratios_table[idx].rate >> 8) & 0xff; cmd.arg[8] = (clock_ratios_table[idx].rate >> 8) & 0xff;
cmd.arg[9] = (clock_ratios_table[idx].rate >> 0) & 0xff; cmd.arg[9] = (clock_ratios_table[idx].rate >> 0) & 0xff;
cx24120_message_send(state, &cmd); ret = cx24120_message_send(state, &cmd);
if (ret != 0)
return;
/* Calculate ber window rates for stat work */ /* Calculate ber window rates for stat work */
cx24120_calculate_ber_window(state, clock_ratios_table[idx].rate); cx24120_calculate_ber_window(state, clock_ratios_table[idx].rate);

View File

@ -1105,7 +1105,7 @@ error:
return NULL; return NULL;
} }
EXPORT_SYMBOL(cx24123_attach); EXPORT_SYMBOL_GPL(cx24123_attach);
static const struct dvb_frontend_ops cx24123_ops = { static const struct dvb_frontend_ops cx24123_ops = {
.delsys = { SYS_DVBS }, .delsys = { SYS_DVBS },

View File

@ -549,7 +549,7 @@ struct dvb_frontend *cxd2820r_attach(const struct cxd2820r_config *config,
return pdata.get_dvb_frontend(client); return pdata.get_dvb_frontend(client);
} }
EXPORT_SYMBOL(cxd2820r_attach); EXPORT_SYMBOL_GPL(cxd2820r_attach);
static struct dvb_frontend *cxd2820r_get_dvb_frontend(struct i2c_client *client) static struct dvb_frontend *cxd2820r_get_dvb_frontend(struct i2c_client *client)
{ {

View File

@ -3926,14 +3926,14 @@ struct dvb_frontend *cxd2841er_attach_s(struct cxd2841er_config *cfg,
{ {
return cxd2841er_attach(cfg, i2c, SYS_DVBS); return cxd2841er_attach(cfg, i2c, SYS_DVBS);
} }
EXPORT_SYMBOL(cxd2841er_attach_s); EXPORT_SYMBOL_GPL(cxd2841er_attach_s);
struct dvb_frontend *cxd2841er_attach_t_c(struct cxd2841er_config *cfg, struct dvb_frontend *cxd2841er_attach_t_c(struct cxd2841er_config *cfg,
struct i2c_adapter *i2c) struct i2c_adapter *i2c)
{ {
return cxd2841er_attach(cfg, i2c, 0); return cxd2841er_attach(cfg, i2c, 0);
} }
EXPORT_SYMBOL(cxd2841er_attach_t_c); EXPORT_SYMBOL_GPL(cxd2841er_attach_t_c);
static const struct dvb_frontend_ops cxd2841er_dvbs_s2_ops = { static const struct dvb_frontend_ops cxd2841er_dvbs_s2_ops = {
.delsys = { SYS_DVBS, SYS_DVBS2 }, .delsys = { SYS_DVBS, SYS_DVBS2 },

View File

@ -767,7 +767,7 @@ free_mem:
fe->tuner_priv = NULL; fe->tuner_priv = NULL;
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib0070_attach); EXPORT_SYMBOL_GPL(dib0070_attach);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
MODULE_DESCRIPTION("Driver for the DiBcom 0070 base-band RF Tuner"); MODULE_DESCRIPTION("Driver for the DiBcom 0070 base-band RF Tuner");

View File

@ -2643,7 +2643,7 @@ struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapte
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib0090_register); EXPORT_SYMBOL_GPL(dib0090_register);
struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config) struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config)
{ {
@ -2669,7 +2669,7 @@ free_mem:
fe->tuner_priv = NULL; fe->tuner_priv = NULL;
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib0090_fw_register); EXPORT_SYMBOL_GPL(dib0090_fw_register);
MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>"); MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
MODULE_AUTHOR("Olivier Grenie <olivier.grenie@parrot.com>"); MODULE_AUTHOR("Olivier Grenie <olivier.grenie@parrot.com>");

View File

@ -819,4 +819,4 @@ MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC); MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
EXPORT_SYMBOL(dib3000mb_attach); EXPORT_SYMBOL_GPL(dib3000mb_attach);

View File

@ -938,7 +938,7 @@ error:
kfree(st); kfree(st);
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib3000mc_attach); EXPORT_SYMBOL_GPL(dib3000mc_attach);
static const struct dvb_frontend_ops dib3000mc_ops = { static const struct dvb_frontend_ops dib3000mc_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -1437,7 +1437,7 @@ error:
kfree(st); kfree(st);
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib7000m_attach); EXPORT_SYMBOL_GPL(dib7000m_attach);
static const struct dvb_frontend_ops dib7000m_ops = { static const struct dvb_frontend_ops dib7000m_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -500,7 +500,7 @@ static int dib7000p_update_pll(struct dvb_frontend *fe, struct dibx000_bandwidth
prediv = reg_1856 & 0x3f; prediv = reg_1856 & 0x3f;
loopdiv = (reg_1856 >> 6) & 0x3f; loopdiv = (reg_1856 >> 6) & 0x3f;
if ((bw != NULL) && (bw->pll_prediv != prediv || bw->pll_ratio != loopdiv)) { if (loopdiv && bw && (bw->pll_prediv != prediv || bw->pll_ratio != loopdiv)) {
dprintk("Updating pll (prediv: old = %d new = %d ; loopdiv : old = %d new = %d)\n", prediv, bw->pll_prediv, loopdiv, bw->pll_ratio); dprintk("Updating pll (prediv: old = %d new = %d ; loopdiv : old = %d new = %d)\n", prediv, bw->pll_prediv, loopdiv, bw->pll_ratio);
reg_1856 &= 0xf000; reg_1856 &= 0xf000;
reg_1857 = dib7000p_read_word(state, 1857); reg_1857 = dib7000p_read_word(state, 1857);
@ -2818,7 +2818,7 @@ void *dib7000p_attach(struct dib7000p_ops *ops)
return ops; return ops;
} }
EXPORT_SYMBOL(dib7000p_attach); EXPORT_SYMBOL_GPL(dib7000p_attach);
static const struct dvb_frontend_ops dib7000p_ops = { static const struct dvb_frontend_ops dib7000p_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -4530,7 +4530,7 @@ void *dib8000_attach(struct dib8000_ops *ops)
return ops; return ops;
} }
EXPORT_SYMBOL(dib8000_attach); EXPORT_SYMBOL_GPL(dib8000_attach);
MODULE_AUTHOR("Olivier Grenie <Olivier.Grenie@parrot.com, Patrick Boettcher <patrick.boettcher@posteo.de>"); MODULE_AUTHOR("Olivier Grenie <Olivier.Grenie@parrot.com, Patrick Boettcher <patrick.boettcher@posteo.de>");
MODULE_DESCRIPTION("Driver for the DiBcom 8000 ISDB-T demodulator"); MODULE_DESCRIPTION("Driver for the DiBcom 8000 ISDB-T demodulator");

View File

@ -2547,7 +2547,7 @@ error:
kfree(st); kfree(st);
return NULL; return NULL;
} }
EXPORT_SYMBOL(dib9000_attach); EXPORT_SYMBOL_GPL(dib9000_attach);
static const struct dvb_frontend_ops dib9000_ops = { static const struct dvb_frontend_ops dib9000_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -12364,7 +12364,7 @@ error:
return NULL; return NULL;
} }
EXPORT_SYMBOL(drx39xxj_attach); EXPORT_SYMBOL_GPL(drx39xxj_attach);
static const struct dvb_frontend_ops drx39xxj_ops = { static const struct dvb_frontend_ops drx39xxj_ops = {
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B }, .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },

View File

@ -2981,7 +2981,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(drxd_attach); EXPORT_SYMBOL_GPL(drxd_attach);
MODULE_DESCRIPTION("DRXD driver"); MODULE_DESCRIPTION("DRXD driver");
MODULE_AUTHOR("Micronas"); MODULE_AUTHOR("Micronas");

View File

@ -6873,7 +6873,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(drxk_attach); EXPORT_SYMBOL_GPL(drxk_attach);
MODULE_DESCRIPTION("DRX-K driver"); MODULE_DESCRIPTION("DRX-K driver");
MODULE_AUTHOR("Ralph Metzler"); MODULE_AUTHOR("Ralph Metzler");

View File

@ -879,7 +879,7 @@ error3:
error2: error2:
return NULL; return NULL;
} }
EXPORT_SYMBOL(ds3000_attach); EXPORT_SYMBOL_GPL(ds3000_attach);
static int ds3000_set_carrier_offset(struct dvb_frontend *fe, static int ds3000_set_carrier_offset(struct dvb_frontend *fe,
s32 carrier_offset_khz) s32 carrier_offset_khz)

View File

@ -825,7 +825,7 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
return fe; return fe;
} }
EXPORT_SYMBOL(dvb_pll_attach); EXPORT_SYMBOL_GPL(dvb_pll_attach);
MODULE_DESCRIPTION("dvb pll library"); MODULE_DESCRIPTION("dvb pll library");
MODULE_AUTHOR("Gerd Knorr"); MODULE_AUTHOR("Gerd Knorr");

View File

@ -309,7 +309,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(ec100_attach); EXPORT_SYMBOL_GPL(ec100_attach);
static const struct dvb_frontend_ops ec100_ops = { static const struct dvb_frontend_ops ec100_ops = {
.delsys = { SYS_DVBT }, .delsys = { SYS_DVBT },

View File

@ -1007,7 +1007,7 @@ struct dvb_frontend *helene_attach_s(struct dvb_frontend *fe,
priv->i2c_address, priv->i2c); priv->i2c_address, priv->i2c);
return fe; return fe;
} }
EXPORT_SYMBOL(helene_attach_s); EXPORT_SYMBOL_GPL(helene_attach_s);
struct dvb_frontend *helene_attach(struct dvb_frontend *fe, struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
const struct helene_config *config, const struct helene_config *config,
@ -1043,7 +1043,7 @@ struct dvb_frontend *helene_attach(struct dvb_frontend *fe,
priv->i2c_address, priv->i2c); priv->i2c_address, priv->i2c);
return fe; return fe;
} }
EXPORT_SYMBOL(helene_attach); EXPORT_SYMBOL_GPL(helene_attach);
MODULE_DESCRIPTION("Sony HELENE Sat/Ter tuner driver"); MODULE_DESCRIPTION("Sony HELENE Sat/Ter tuner driver");
MODULE_AUTHOR("Abylay Ospan <aospan@netup.ru>"); MODULE_AUTHOR("Abylay Ospan <aospan@netup.ru>");

View File

@ -404,7 +404,7 @@ struct dvb_frontend *horus3a_attach(struct dvb_frontend *fe,
priv->i2c_address, priv->i2c); priv->i2c_address, priv->i2c);
return fe; return fe;
} }
EXPORT_SYMBOL(horus3a_attach); EXPORT_SYMBOL_GPL(horus3a_attach);
MODULE_DESCRIPTION("Sony HORUS3A satellite tuner driver"); MODULE_DESCRIPTION("Sony HORUS3A satellite tuner driver");
MODULE_AUTHOR("Sergey Kozlov <serjk@netup.ru>"); MODULE_AUTHOR("Sergey Kozlov <serjk@netup.ru>");

View File

@ -155,7 +155,7 @@ struct dvb_frontend *isl6405_attach(struct dvb_frontend *fe, struct i2c_adapter
return fe; return fe;
} }
EXPORT_SYMBOL(isl6405_attach); EXPORT_SYMBOL_GPL(isl6405_attach);
MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6405"); MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6405");
MODULE_AUTHOR("Hartmut Hackmann & Oliver Endriss"); MODULE_AUTHOR("Hartmut Hackmann & Oliver Endriss");

View File

@ -227,7 +227,7 @@ struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter
return fe; return fe;
} }
EXPORT_SYMBOL(isl6421_attach); EXPORT_SYMBOL_GPL(isl6421_attach);
MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6421"); MODULE_DESCRIPTION("Driver for lnb supply and control ic isl6421");
MODULE_AUTHOR("Andrew de Quincey & Oliver Endriss"); MODULE_AUTHOR("Andrew de Quincey & Oliver Endriss");

View File

@ -301,7 +301,7 @@ exit:
fe->sec_priv = NULL; fe->sec_priv = NULL;
return NULL; return NULL;
} }
EXPORT_SYMBOL(isl6423_attach); EXPORT_SYMBOL_GPL(isl6423_attach);
MODULE_DESCRIPTION("ISL6423 SEC"); MODULE_DESCRIPTION("ISL6423 SEC");
MODULE_AUTHOR("Manu Abraham"); MODULE_AUTHOR("Manu Abraham");

View File

@ -399,7 +399,7 @@ struct dvb_frontend *itd1000_attach(struct dvb_frontend *fe, struct i2c_adapter
return fe; return fe;
} }
EXPORT_SYMBOL(itd1000_attach); EXPORT_SYMBOL_GPL(itd1000_attach);
MODULE_AUTHOR("Patrick Boettcher <pb@linuxtv.org>"); MODULE_AUTHOR("Patrick Boettcher <pb@linuxtv.org>");
MODULE_DESCRIPTION("Integrant ITD1000 driver"); MODULE_DESCRIPTION("Integrant ITD1000 driver");

View File

@ -311,7 +311,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(ix2505v_attach); EXPORT_SYMBOL_GPL(ix2505v_attach);
module_param_named(debug, ix2505v_debug, int, 0644); module_param_named(debug, ix2505v_debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");

View File

@ -606,4 +606,4 @@ MODULE_DESCRIPTION("LSI L64781 DVB-T Demodulator driver");
MODULE_AUTHOR("Holger Waechtler, Marko Kohtala"); MODULE_AUTHOR("Holger Waechtler, Marko Kohtala");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
EXPORT_SYMBOL(l64781_attach); EXPORT_SYMBOL_GPL(l64781_attach);

View File

@ -1450,7 +1450,7 @@ struct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
return &state->frontend; return &state->frontend;
} }
EXPORT_SYMBOL(lg2160_attach); EXPORT_SYMBOL_GPL(lg2160_attach);
MODULE_DESCRIPTION("LG Electronics LG216x ATSC/MH Demodulator Driver"); MODULE_DESCRIPTION("LG Electronics LG216x ATSC/MH Demodulator Driver");
MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>"); MODULE_AUTHOR("Michael Krufky <mkrufky@linuxtv.org>");

View File

@ -1158,7 +1158,7 @@ fail:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(lgdt3305_attach); EXPORT_SYMBOL_GPL(lgdt3305_attach);
static const struct dvb_frontend_ops lgdt3304_ops = { static const struct dvb_frontend_ops lgdt3304_ops = {
.delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B }, .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },

View File

@ -1846,7 +1846,7 @@ fail:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(lgdt3306a_attach); EXPORT_SYMBOL_GPL(lgdt3306a_attach);
#ifdef DBG_DUMP #ifdef DBG_DUMP

View File

@ -1053,7 +1053,7 @@ error_out:
return NULL; return NULL;
} }
EXPORT_SYMBOL(lgs8gxx_attach); EXPORT_SYMBOL_GPL(lgs8gxx_attach);
MODULE_DESCRIPTION("Legend Silicon LGS8913/LGS8GXX DMB-TH demodulator driver"); MODULE_DESCRIPTION("Legend Silicon LGS8913/LGS8GXX DMB-TH demodulator driver");
MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>"); MODULE_AUTHOR("David T. L. Wong <davidtlwong@gmail.com>");

View File

@ -182,7 +182,7 @@ struct dvb_frontend *lnbh25_attach(struct dvb_frontend *fe,
__func__, priv->i2c_address); __func__, priv->i2c_address);
return fe; return fe;
} }
EXPORT_SYMBOL(lnbh25_attach); EXPORT_SYMBOL_GPL(lnbh25_attach);
MODULE_DESCRIPTION("ST LNBH25 driver"); MODULE_DESCRIPTION("ST LNBH25 driver");
MODULE_AUTHOR("info@netup.ru"); MODULE_AUTHOR("info@netup.ru");

View File

@ -169,7 +169,7 @@ struct dvb_frontend *lnbh24_attach(struct dvb_frontend *fe,
return lnbx2x_attach(fe, i2c, override_set, override_clear, return lnbx2x_attach(fe, i2c, override_set, override_clear,
i2c_addr, LNBH24_TTX); i2c_addr, LNBH24_TTX);
} }
EXPORT_SYMBOL(lnbh24_attach); EXPORT_SYMBOL_GPL(lnbh24_attach);
struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
struct i2c_adapter *i2c, u8 override_set, struct i2c_adapter *i2c, u8 override_set,
@ -178,7 +178,7 @@ struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe,
return lnbx2x_attach(fe, i2c, override_set, override_clear, return lnbx2x_attach(fe, i2c, override_set, override_clear,
0x08, LNBP21_ISEL); 0x08, LNBP21_ISEL);
} }
EXPORT_SYMBOL(lnbp21_attach); EXPORT_SYMBOL_GPL(lnbp21_attach);
MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp21, lnbh24"); MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp21, lnbh24");
MODULE_AUTHOR("Oliver Endriss, Igor M. Liplianin"); MODULE_AUTHOR("Oliver Endriss, Igor M. Liplianin");

View File

@ -139,7 +139,7 @@ struct dvb_frontend *lnbp22_attach(struct dvb_frontend *fe,
return fe; return fe;
} }
EXPORT_SYMBOL(lnbp22_attach); EXPORT_SYMBOL_GPL(lnbp22_attach);
MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp22"); MODULE_DESCRIPTION("Driver for lnb supply and control ic lnbp22");
MODULE_AUTHOR("Dominik Kuhlen"); MODULE_AUTHOR("Dominik Kuhlen");

View File

@ -1293,7 +1293,7 @@ struct dvb_frontend *m88ds3103_attach(const struct m88ds3103_config *cfg,
*tuner_i2c_adapter = pdata.get_i2c_adapter(client); *tuner_i2c_adapter = pdata.get_i2c_adapter(client);
return pdata.get_dvb_frontend(client); return pdata.get_dvb_frontend(client);
} }
EXPORT_SYMBOL(m88ds3103_attach); EXPORT_SYMBOL_GPL(m88ds3103_attach);
static const struct dvb_frontend_ops m88ds3103_ops = { static const struct dvb_frontend_ops m88ds3103_ops = {
.delsys = {SYS_DVBS, SYS_DVBS2}, .delsys = {SYS_DVBS, SYS_DVBS2},

View File

@ -816,7 +816,7 @@ error:
return NULL; return NULL;
} }
EXPORT_SYMBOL(m88rs2000_attach); EXPORT_SYMBOL_GPL(m88rs2000_attach);
MODULE_DESCRIPTION("M88RS2000 DVB-S Demodulator driver"); MODULE_DESCRIPTION("M88RS2000 DVB-S Demodulator driver");
MODULE_AUTHOR("Malcolm Priestley tvboxspy@gmail.com"); MODULE_AUTHOR("Malcolm Priestley tvboxspy@gmail.com");

View File

@ -1865,6 +1865,6 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(mb86a16_attach); EXPORT_SYMBOL_GPL(mb86a16_attach);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Manu Abraham"); MODULE_AUTHOR("Manu Abraham");

View File

@ -2106,7 +2106,7 @@ error:
kfree(state); kfree(state);
return NULL; return NULL;
} }
EXPORT_SYMBOL(mb86a20s_attach); EXPORT_SYMBOL_GPL(mb86a20s_attach);
static const struct dvb_frontend_ops mb86a20s_ops = { static const struct dvb_frontend_ops mb86a20s_ops = {
.delsys = { SYS_ISDBT }, .delsys = { SYS_ISDBT },

Some files were not shown because too many files have changed in this diff Show More