mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.213 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl/rJWgACgkQONu9yGCS aT5qhxAAh1a9hKOtdMEbXnRpgWCXdP/9Ia+IBMPK1l7t2UXIjHg3o3QPMUQ02acr FOaTsHUV7QiBpSf9JDMDUXwpVs4/Jf3TIaQ41qBbV0f4MYhFVm06FqxaKRzYW4ME DlEr8YLfKsxxgQtllaMh7YzWDlSWkoHkgK6o03TLQvZJLxG6Hv3qeS+PJFRNzSff D03FmWmJ+c0iDoI8tGdaEE1YpbgxSY0nyDSoNyx6UQXM5974rxTXg1lxzi31F7dR juem63TesKZQfI/frBpKJCiTivV3ZFqBb0foFATcWxsAAZMZoxLLLvNobxxmSPKQ REboQ1tTrbW0I3tw+VWFeQHtSV7TWjKGEYAiRJPHWCAv8KNEyq28W/tl9v/9wTiQ SVhvqKiyHn0862/QV9mEOzR5XekSJduHefeco4s7aCs/xgDmjnFrOSTNX46wCQb/ dxsML7FDypXMuPfldugNq8OlZQT1DEgs1yV8d/a1MTiit8RzCX4b2Ye2assGUI2p Udh62Noalfx8s8Xau4dsFm3qMGKImDOpjJx5vZLV1eVy8Asmyod9dVM31FzGMLwR 6rL1xc8YCs5vSbD1Cecas+1NyQ4iO4ivwirJlIWKuF2ZnRFXDmIG0WBCtvlVxPlz bhIOl01T07BHZKAGLy1rXH/hlHi8dTf55YvcbMu2QE9uLNKk/8M= =Ehpf -----END PGP SIGNATURE----- Merge 4.14.213 into android-4.14-stable Changes in 4.14.213 spi: bcm2835aux: Fix use-after-free on unbind spi: bcm2835aux: Restore err assignment in bcm2835aux_spi_probe iwlwifi: pcie: limit memory read spin time arm64: dts: rockchip: Assign a fixed index to mmc devices on rk3399 boards. iwlwifi: mvm: fix kernel panic in case of assert during CSA ARC: stack unwinding: don't assume non-current task is sleeping scsi: ufs: Make sure clk scaling happens only when HBA is runtime ACTIVE soc: fsl: dpio: Get the cpumask through cpumask_of(cpu) platform/x86: acer-wmi: add automatic keyboard background light toggle key as KEY_LIGHTS_TOGGLE Input: cm109 - do not stomp on control URB Input: i8042 - add Acer laptops to the i8042 reset list pinctrl: amd: remove debounce filter setting in IRQ type setting kbuild: avoid static_assert for genksyms scsi: be2iscsi: Revert "Fix a theoretical leak in beiscsi_create_eqs()" x86/mm/mem_encrypt: Fix definition of PMD_FLAGS_DEC_WP PCI: qcom: Add missing reset for ipq806x net: stmmac: free tx skb buffer in stmmac_resume() tcp: fix cwnd-limited bug for TSO deferral where we send nothing net/mlx4_en: Avoid scheduling restart task if it is already running net/mlx4_en: Handle TX error CQE net: stmmac: delete the eee_ctrl_timer after napi disabled net: stmmac: dwmac-meson8b: fix mask definition of the m250_sel mux net: bridge: vlan: fix error return code in __vlan_add() mac80211: mesh: fix mesh_pathtbl_init() error path USB: dummy-hcd: Fix uninitialized array use in init() USB: add RESET_RESUME quirk for Snapscan 1212 ALSA: usb-audio: Fix potential out-of-bounds shift ALSA: usb-audio: Fix control 'access overflow' errors from chmap xhci: Give USB2 ports time to enter U3 in bus suspend USB: UAS: introduce a quirk to set no_write_same USB: sisusbvga: Make console support depend on BROKEN ALSA: pcm: oss: Fix potential out-of-bounds shift serial: 8250_omap: Avoid FIFO corruption caused by MDR1 access drm: fix drm_dp_mst_port refcount leaks in drm_dp_mst_allocate_vcpi pinctrl: merrifield: Set default bias in case no particular value given pinctrl: baytrail: Avoid clearing debounce value when turning it off ARM: dts: sun8i: v3s: fix GIC node memory range gpio: mvebu: fix potential user-after-free on probe scsi: bnx2i: Requires MMU can: softing: softing_netdev_open(): fix error handling RDMA/cm: Fix an attempt to use non-valid pointer when cleaning timewait kernel/cpu: add arch override for clear_tasks_mm_cpumask() mm handling drm/tegra: sor: Disable clocks on error in tegra_sor_init() vxlan: Add needed_headroom for lower device vxlan: Copy needed_tailroom from lowerdev scsi: mpt3sas: Increase IOCInit request timeout to 30s dm table: Remove BUG_ON(in_interrupt()) soc/tegra: fuse: Fix index bug in get_process_id USB: serial: option: add interface-number sanity check to flag handling USB: gadget: f_acm: add support for SuperSpeed Plus USB: gadget: f_midi: setup SuperSpeed Plus descriptors usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus USB: gadget: f_rndis: fix bitrate for SuperSpeed and above usb: chipidea: ci_hdrc_imx: Pass DISABLE_DEVICE_STREAMING flag to imx6ul ARM: dts: exynos: fix roles of USB 3.0 ports on Odroid XU ARM: dts: exynos: fix USB 3.0 VBUS control and over-current pins on Exynos5410 ARM: dts: exynos: fix USB 3.0 pins supply being turned off on Odroid XU HID: i2c-hid: add Vero K147 to descriptor override serial_core: Check for port state when tty is in error state quota: Sanity-check quota file headers on load media: msi2500: assign SPI bus number dynamically crypto: af_alg - avoid undefined behavior accessing salg_name md: fix a warning caused by a race between concurrent md_ioctl()s Bluetooth: Fix slab-out-of-bounds read in hci_le_direct_adv_report_evt() drm/gma500: fix double free of gma_connector soc: renesas: rmobile-sysc: Fix some leaks in rmobile_init_pm_domains() soc: mediatek: Check if power domains can be powered on at boot time RDMA/bnxt_re: Set queue pair state when being queried selinux: fix error initialization in inode_doinit_with_dentry() RDMA/rxe: Compute PSN windows correctly x86/mm/ident_map: Check for errors from ident_pud_init() ARM: p2v: fix handling of LPAE translation in BE mode sched/deadline: Fix sched_dl_global_validate() sched: Reenable interrupts in do_sched_yield() crypto: talitos - Fix return type of current_desc_hdr() spi: img-spfi: fix reference leak in img_spfi_resume ASoC: pcm: DRAIN support reactivation selinux: fix inode_doinit_with_dentry() LABEL_INVALID error handling arm64: dts: exynos: Correct psci compatible used on Exynos7 Bluetooth: Fix null pointer dereference in hci_event_packet() spi: spi-ti-qspi: fix reference leak in ti_qspi_setup spi: tegra20-slink: fix reference leak in slink ops of tegra20 spi: tegra20-sflash: fix reference leak in tegra_sflash_resume spi: tegra114: fix reference leak in tegra spi ops mwifiex: fix mwifiex_shutdown_sw() causing sw reset failure ASoC: wm8998: Fix PM disable depth imbalance on error ASoC: arizona: Fix a wrong free in wm8997_probe RDMa/mthca: Work around -Wenum-conversion warning MIPS: BCM47XX: fix kconfig dependency bug for BCM47XX_BCMA staging: greybus: codecs: Fix reference counter leak in error handling media: mtk-vcodec: add missing put_device() call in mtk_vcodec_release_dec_pm() scsi: core: Fix VPD LUN ID designator priorities media: solo6x10: fix missing snd_card_free in error handling case drm/omap: dmm_tiler: fix return error code in omap_dmm_probe() Input: ads7846 - fix race that causes missing releases Input: ads7846 - fix integer overflow on Rt calculation Input: ads7846 - fix unaligned access on 7845 powerpc/feature: Fix CPU_FTRS_ALWAYS by removing CPU_FTRS_GENERIC_32 crypto: omap-aes - Fix PM disable depth imbalance in omap_aes_probe soc: ti: knav_qmss: fix reference leak in knav_queue_probe soc: ti: Fix reference imbalance in knav_dma_probe drivers: soc: ti: knav_qmss_queue: Fix error return code in knav_queue_probe Input: omap4-keypad - fix runtime PM error handling RDMA/cxgb4: Validate the number of CQEs memstick: fix a double-free bug in memstick_check ARM: dts: at91: sama5d4_xplained: add pincontrol for USB Host ARM: dts: at91: sama5d3_xplained: add pincontrol for USB Host orinoco: Move context allocation after processing the skb cw1200: fix missing destroy_workqueue() on error in cw1200_init_common media: siano: fix memory leak of debugfs members in smsdvb_hotplug samples: bpf: Fix lwt_len_hist reusing previous BPF map mips: cdmm: fix use-after-free in mips_cdmm_bus_discover media: max2175: fix max2175_set_csm_mode() error code HSI: omap_ssi: Don't jump to free ID in ssi_add_controller() ARM: dts: Remove non-existent i2c1 from 98dx3236 power: supply: bq24190_charger: fix reference leak genirq/irqdomain: Don't try to free an interrupt that has no mapping PCI: iproc: Fix out-of-bound array accesses ARM: dts: at91: at91sam9rl: fix ADC triggers ath10k: Fix an error handling path ath10k: Release some resources in an error handling path NFSv4.2: condition READDIR's mask for security label based on LSM state SUNRPC: xprt_load_transport() needs to support the netid "rdma6" lockd: don't use interval-based rebinding over TCP NFS: switch nfsiod to be an UNBOUND workqueue. vfio-pci: Use io_remap_pfn_range() for PCI IO memory media: saa7146: fix array overflow in vidioc_s_audio() clocksource/drivers/cadence_ttc: Fix memory leak in ttc_setup_clockevent() ARM: dts: at91: sama5d2: map securam as device pinctrl: falcon: add missing put_device() call in pinctrl_falcon_probe() arm64: dts: rockchip: Fix UART pull-ups on rk3328 memstick: r592: Fix error return in r592_probe() net/mlx5: Properly convey driver version to firmware ASoC: jz4740-i2s: add missed checks for clk_get() dm ioctl: fix error return code in target_message clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI cpufreq: highbank: Add missing MODULE_DEVICE_TABLE cpufreq: mediatek: Add missing MODULE_DEVICE_TABLE cpufreq: st: Add missing MODULE_DEVICE_TABLE cpufreq: loongson1: Add missing MODULE_ALIAS cpufreq: scpi: Add missing MODULE_ALIAS scsi: qedi: Fix missing destroy_workqueue() on error in __qedi_probe scsi: pm80xx: Fix error return in pm8001_pci_probe() seq_buf: Avoid type mismatch for seq_buf_init scsi: fnic: Fix error return code in fnic_probe() powerpc/pseries/hibernation: drop pseries_suspend_begin() from suspend ops powerpc/pseries/hibernation: remove redundant cacheinfo update usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe usb: oxu210hp-hcd: Fix memory leak in oxu_create speakup: fix uninitialized flush_lock nfsd: Fix message level for normal termination nfs_common: need lock during iterate through the list x86/kprobes: Restore BTF if the single-stepping is cancelled clk: tegra: Fix duplicated SE clock entry extcon: max77693: Fix modalias string ASoC: wm_adsp: remove "ctl" from list on error in wm_adsp_create_control() irqchip/alpine-msi: Fix freeing of interrupts on allocation error path watchdog: sirfsoc: Add missing dependency on HAS_IOMEM um: chan_xterm: Fix fd leak nfc: s3fwrn5: Release the nfc firmware powerpc/ps3: use dma_mapping_error() checkpatch: fix unescaped left brace net: bcmgenet: Fix a resource leak in an error handling path in the probe functin net: allwinner: Fix some resources leak in the error handling path of the probe and in the remove function net: korina: fix return value watchdog: qcom: Avoid context switch in restart handler watchdog: coh901327: add COMMON_CLK dependency clk: ti: Fix memleak in ti_fapll_synth_setup pwm: zx: Add missing cleanup in error path pwm: lp3943: Dynamically allocate PWM chip base perf record: Fix memory leak when using '--user-regs=?' to list registers qlcnic: Fix error code in probe clk: s2mps11: Fix a resource leak in error handling paths in the probe function clk: sunxi-ng: Make sure divider tables have sentinel cfg80211: initialize rekey_data fix namespaced fscaps when !CONFIG_SECURITY Input: cros_ec_keyb - send 'scancodes' in addition to key events Input: goodix - add upside-down quirk for Teclast X98 Pro tablet media: gspca: Fix memory leak in probe media: sunxi-cir: ensure IR is handled when it is continuous media: netup_unidvb: Don't leak SPI master in probe error path Input: cyapa_gen6 - fix out-of-bounds stack access PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup() Revert "ACPI / resources: Use AE_CTRL_TERMINATE to terminate resources walks" ACPI: PNP: compare the string length in the matching_id() ALSA: hda/realtek - Enable headset mic of ASUS Q524UQK with ALC255 ALSA: pcm: oss: Fix a few more UBSAN fixes ALSA: usb-audio: Disable sample read check if firmware doesn't give back s390/smp: perform initial CPU reset also for SMT siblings s390/dasd: prevent inconsistent LCU device data s390/dasd: fix list corruption of pavgroup group list s390/dasd: fix list corruption of lcu list staging: comedi: mf6x4: Fix AI end-of-conversion detection powerpc/perf: Exclude kernel samples while counting events in user space. crypto: ecdh - avoid unaligned accesses in ecdh_set_secret() EDAC/amd64: Fix PCI component registration USB: serial: mos7720: fix parallel-port state restore USB: serial: keyspan_pda: fix dropped unthrottle interrupts USB: serial: keyspan_pda: fix write deadlock USB: serial: keyspan_pda: fix stalled writes USB: serial: keyspan_pda: fix write-wakeup use-after-free USB: serial: keyspan_pda: fix tx-unthrottle use-after-free USB: serial: keyspan_pda: fix write unthrottling Btrfs: fix selftests failure due to uninitialized i_mode in test inodes btrfs: fix return value mixup in btrfs_get_extent ext4: fix a memory leak of ext4_free_data ext4: fix deadlock with fs freezing and EA inodes KVM: arm64: Introduce handling of AArch32 TTBCR2 traps ARM: dts: at91: sama5d2: fix CAN message ram offset and size powerpc/rtas: Fix typo of ibm,open-errinjct in RTAS filter powerpc/xmon: Change printk() to pr_cont() powerpc/powernv/memtrace: Don't leak kernel memory to user space ima: Don't modify file descriptor mode on the fly ceph: fix race in concurrent __ceph_remove_cap invocations jffs2: Fix GC exit abnormally jfs: Fix array index bounds check in dbAdjTree drm/dp_aux_dev: check aux_dev before use in drm_dp_aux_dev_get_by_minor() spi: spi-sh: Fix use-after-free on unbind spi: davinci: Fix use-after-free on unbind spi: pic32: Don't leak DMA channels in probe error path spi: rb4xx: Don't leak SPI master in probe error path spi: sc18is602: Don't leak SPI master in probe error path spi: st-ssc4: Fix unbalanced pm_runtime_disable() in probe error path soc: qcom: smp2p: Safely acquire spinlock without IRQs mtd: parser: cmdline: Fix parsing of part-names with colons iio: buffer: Fix demux update iio: adc: rockchip_saradc: fix missing clk_disable_unprepare() on error in rockchip_saradc_resume iio:light:rpr0521: Fix timestamp alignment and prevent data leak. iio:pressure:mpl3115: Force alignment of buffer iio:imu:bmi160: Fix too large a buffer. md/cluster: fix deadlock when node is doing resync job clk: mvebu: a3700: fix the XTAL MODE pin to MPP1_9 xen-blkback: set ring->xenblkd to NULL after kthread_stop() xen/xenbus: Allow watches discard events before queueing xen/xenbus: Add 'will_handle' callback support in xenbus_watch_path() xen/xenbus/xen_bus_type: Support will_handle watch callback xen/xenbus: Count pending messages for each watch xenbus/xenbus_backend: Disallow pending watch messages libnvdimm/namespace: Fix reaping of invalidated block-window-namespace labels PCI: Fix pci_slot_release() NULL pointer dereference Linux 4.14.213 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ic39f6cbb08d6b12ddb9f5372eb14ff80f2bff04e
This commit is contained in:
commit
89616f108f
@ -4763,6 +4763,7 @@
|
||||
device);
|
||||
j = NO_REPORT_LUNS (don't use report luns
|
||||
command, uas only);
|
||||
k = NO_SAME (do not use WRITE_SAME, uas only)
|
||||
l = NOT_LOCKABLE (don't try to lock and
|
||||
unlock ejectable media, not on uas);
|
||||
m = MAX_SECTORS_64 (don't transfer more
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 212
|
||||
SUBLEVEL = 213
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -41,15 +41,15 @@
|
||||
|
||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||
|
||||
static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||
struct pt_regs *regs,
|
||||
struct unwind_frame_info *frame_info)
|
||||
static int
|
||||
seed_unwind_frame_info(struct task_struct *tsk, struct pt_regs *regs,
|
||||
struct unwind_frame_info *frame_info)
|
||||
{
|
||||
/*
|
||||
* synchronous unwinding (e.g. dump_stack)
|
||||
* - uses current values of SP and friends
|
||||
*/
|
||||
if (tsk == NULL && regs == NULL) {
|
||||
if (regs == NULL && (tsk == NULL || tsk == current)) {
|
||||
unsigned long fp, sp, blink, ret;
|
||||
frame_info->task = current;
|
||||
|
||||
@ -68,11 +68,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||
frame_info->call_frame = 0;
|
||||
} else if (regs == NULL) {
|
||||
/*
|
||||
* Asynchronous unwinding of sleeping task
|
||||
* - Gets SP etc from task's pt_regs (saved bottom of kernel
|
||||
* mode stack of task)
|
||||
* Asynchronous unwinding of a likely sleeping task
|
||||
* - first ensure it is actually sleeping
|
||||
* - if so, it will be in __switch_to, kernel mode SP of task
|
||||
* is safe-kept and BLINK at a well known location in there
|
||||
*/
|
||||
|
||||
if (tsk->state == TASK_RUNNING)
|
||||
return -1;
|
||||
|
||||
frame_info->task = tsk;
|
||||
|
||||
frame_info->regs.r27 = TSK_K_FP(tsk);
|
||||
@ -106,6 +110,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||
frame_info->regs.r63 = regs->ret;
|
||||
frame_info->call_frame = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -119,7 +125,8 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
||||
unsigned int address;
|
||||
struct unwind_frame_info frame_info;
|
||||
|
||||
seed_unwind_frame_info(tsk, regs, &frame_info);
|
||||
if (seed_unwind_frame_info(tsk, regs, &frame_info))
|
||||
return 0;
|
||||
|
||||
while (1) {
|
||||
address = UNW_PC(&frame_info);
|
||||
|
@ -303,11 +303,6 @@
|
||||
reg = <0x11000 0x100>;
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
|
||||
reg = <0x11100 0x100>;
|
||||
};
|
||||
|
||||
&mpic {
|
||||
reg = <0x20a00 0x2d0>, <0x21070 0x58>;
|
||||
};
|
||||
|
@ -231,6 +231,11 @@
|
||||
atmel,pins =
|
||||
<AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */
|
||||
};
|
||||
pinctrl_usb_default: usb_default {
|
||||
atmel,pins =
|
||||
<AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
|
||||
AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -248,6 +253,8 @@
|
||||
&pioE 3 GPIO_ACTIVE_LOW
|
||||
&pioE 4 GPIO_ACTIVE_LOW
|
||||
>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usb_default>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -158,6 +158,11 @@
|
||||
atmel,pins =
|
||||
<AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
|
||||
};
|
||||
pinctrl_usb_default: usb_default {
|
||||
atmel,pins =
|
||||
<AT91_PIOE 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
|
||||
AT91_PIOE 14 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
|
||||
};
|
||||
pinctrl_key_gpio: key_gpio_0 {
|
||||
atmel,pins =
|
||||
<AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
|
||||
@ -183,6 +188,8 @@
|
||||
&pioE 11 GPIO_ACTIVE_HIGH
|
||||
&pioE 14 GPIO_ACTIVE_HIGH
|
||||
>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usb_default>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -274,23 +274,26 @@
|
||||
atmel,adc-use-res = "highres";
|
||||
|
||||
trigger0 {
|
||||
trigger-name = "timer-counter-0";
|
||||
trigger-name = "external-rising";
|
||||
trigger-value = <0x1>;
|
||||
trigger-external;
|
||||
};
|
||||
|
||||
trigger1 {
|
||||
trigger-name = "timer-counter-1";
|
||||
trigger-value = <0x3>;
|
||||
trigger-name = "external-falling";
|
||||
trigger-value = <0x2>;
|
||||
trigger-external;
|
||||
};
|
||||
|
||||
trigger2 {
|
||||
trigger-name = "timer-counter-2";
|
||||
trigger-value = <0x5>;
|
||||
trigger-name = "external-any";
|
||||
trigger-value = <0x3>;
|
||||
trigger-external;
|
||||
};
|
||||
|
||||
trigger3 {
|
||||
trigger-name = "external";
|
||||
trigger-value = <0x13>;
|
||||
trigger-external;
|
||||
trigger-name = "continuous";
|
||||
trigger-value = <0x6>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -327,6 +327,8 @@
|
||||
regulator-name = "vddq_lcd";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
/* Supplies also GPK and GPJ */
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo8_reg: LDO8 {
|
||||
@ -629,11 +631,11 @@
|
||||
};
|
||||
|
||||
&usbdrd_dwc3_0 {
|
||||
dr_mode = "host";
|
||||
dr_mode = "peripheral";
|
||||
};
|
||||
|
||||
&usbdrd_dwc3_1 {
|
||||
dr_mode = "peripheral";
|
||||
dr_mode = "host";
|
||||
};
|
||||
|
||||
&usbdrd3_0 {
|
||||
|
@ -563,6 +563,34 @@
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
usb3_1_oc: usb3-1-oc {
|
||||
samsung,pins = "gpk2-4", "gpk2-5";
|
||||
samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
|
||||
samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
|
||||
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
||||
};
|
||||
|
||||
usb3_1_vbusctrl: usb3-1-vbusctrl {
|
||||
samsung,pins = "gpk2-6", "gpk2-7";
|
||||
samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
|
||||
samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
|
||||
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
||||
};
|
||||
|
||||
usb3_0_oc: usb3-0-oc {
|
||||
samsung,pins = "gpk3-0", "gpk3-1";
|
||||
samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
|
||||
samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
|
||||
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
||||
};
|
||||
|
||||
usb3_0_vbusctrl: usb3-0-vbusctrl {
|
||||
samsung,pins = "gpk3-2", "gpk3-3";
|
||||
samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
|
||||
samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
|
||||
samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>;
|
||||
};
|
||||
};
|
||||
|
||||
&pinctrl_2 {
|
||||
|
@ -381,6 +381,8 @@
|
||||
&usbdrd3_0 {
|
||||
clocks = <&clock CLK_USBD300>;
|
||||
clock-names = "usbdrd30";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb3_0_oc>, <&usb3_0_vbusctrl>;
|
||||
};
|
||||
|
||||
&usbdrd_phy0 {
|
||||
@ -392,6 +394,8 @@
|
||||
&usbdrd3_1 {
|
||||
clocks = <&clock CLK_USBD301>;
|
||||
clock-names = "usbdrd30";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb3_1_oc>, <&usb3_1_vbusctrl>;
|
||||
};
|
||||
|
||||
&usbdrd_dwc3_1 {
|
||||
|
@ -1243,6 +1243,7 @@
|
||||
clocks = <&securam_clk>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
no-memory-wc;
|
||||
ranges = <0 0xf8044000 0x1420>;
|
||||
};
|
||||
|
||||
@ -1293,7 +1294,7 @@
|
||||
|
||||
can0: can@f8054000 {
|
||||
compatible = "bosch,m_can";
|
||||
reg = <0xf8054000 0x4000>, <0x210000 0x4000>;
|
||||
reg = <0xf8054000 0x4000>, <0x210000 0x1c00>;
|
||||
reg-names = "m_can", "message_ram";
|
||||
interrupts = <56 IRQ_TYPE_LEVEL_HIGH 7>,
|
||||
<64 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
@ -1484,7 +1485,7 @@
|
||||
|
||||
can1: can@fc050000 {
|
||||
compatible = "bosch,m_can";
|
||||
reg = <0xfc050000 0x4000>, <0x210000 0x4000>;
|
||||
reg = <0xfc050000 0x4000>, <0x210000 0x3800>;
|
||||
reg-names = "m_can", "message_ram";
|
||||
interrupts = <57 IRQ_TYPE_LEVEL_HIGH 7>,
|
||||
<65 IRQ_TYPE_LEVEL_HIGH 7>;
|
||||
@ -1494,7 +1495,7 @@
|
||||
assigned-clocks = <&can1_gclk>;
|
||||
assigned-clock-parents = <&utmi>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
bosch,mram-cfg = <0x1100 0 0 64 0 0 32 32>;
|
||||
bosch,mram-cfg = <0x1c00 0 0 64 0 0 32 32>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -419,7 +419,7 @@
|
||||
gic: interrupt-controller@01c81000 {
|
||||
compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
|
||||
reg = <0x01c81000 0x1000>,
|
||||
<0x01c82000 0x1000>,
|
||||
<0x01c82000 0x2000>,
|
||||
<0x01c84000 0x2000>,
|
||||
<0x01c86000 0x2000>;
|
||||
interrupt-controller;
|
||||
|
@ -674,12 +674,8 @@ ARM_BE8(rev16 ip, ip)
|
||||
ldrcc r7, [r4], #4 @ use branch for delay slot
|
||||
bcc 1b
|
||||
bx lr
|
||||
#else
|
||||
#ifdef CONFIG_CPU_ENDIAN_BE8
|
||||
moveq r0, #0x00004000 @ set bit 22, mov to mvn instruction
|
||||
#else
|
||||
moveq r0, #0x400000 @ set bit 22, mov to mvn instruction
|
||||
#endif
|
||||
b 2f
|
||||
1: ldr ip, [r7, r3]
|
||||
#ifdef CONFIG_CPU_ENDIAN_BE8
|
||||
@ -688,7 +684,7 @@ ARM_BE8(rev16 ip, ip)
|
||||
tst ip, #0x000f0000 @ check the rotation field
|
||||
orrne ip, ip, r6, lsl #24 @ mask in offset bits 31-24
|
||||
biceq ip, ip, #0x00004000 @ clear bit 22
|
||||
orreq ip, ip, r0 @ mask in offset bits 7-0
|
||||
orreq ip, ip, r0, ror #8 @ mask in offset bits 7-0
|
||||
#else
|
||||
bic ip, ip, #0x000000ff
|
||||
tst ip, #0xf00 @ check the rotation field
|
||||
|
@ -336,6 +336,7 @@ static int __init rmobile_init_pm_domains(void)
|
||||
|
||||
pmd = of_get_child_by_name(np, "pm-domains");
|
||||
if (!pmd) {
|
||||
iounmap(base);
|
||||
pr_warn("%pOF lacks pm-domains node\n", np);
|
||||
continue;
|
||||
}
|
||||
|
@ -65,8 +65,10 @@
|
||||
};
|
||||
|
||||
psci {
|
||||
compatible = "arm,psci-0.2";
|
||||
compatible = "arm,psci";
|
||||
method = "smc";
|
||||
cpu_off = <0x84000002>;
|
||||
cpu_on = <0xC4000003>;
|
||||
};
|
||||
|
||||
soc: soc {
|
||||
|
@ -1062,8 +1062,8 @@
|
||||
|
||||
uart0 {
|
||||
uart0_xfer: uart0-xfer {
|
||||
rockchip,pins = <1 RK_PB1 1 &pcfg_pull_up>,
|
||||
<1 RK_PB0 1 &pcfg_pull_none>;
|
||||
rockchip,pins = <1 RK_PB1 1 &pcfg_pull_none>,
|
||||
<1 RK_PB0 1 &pcfg_pull_up>;
|
||||
};
|
||||
|
||||
uart0_cts: uart0-cts {
|
||||
@ -1081,8 +1081,8 @@
|
||||
|
||||
uart1 {
|
||||
uart1_xfer: uart1-xfer {
|
||||
rockchip,pins = <3 RK_PA4 4 &pcfg_pull_up>,
|
||||
<3 RK_PA6 4 &pcfg_pull_none>;
|
||||
rockchip,pins = <3 RK_PA4 4 &pcfg_pull_none>,
|
||||
<3 RK_PA6 4 &pcfg_pull_up>;
|
||||
};
|
||||
|
||||
uart1_cts: uart1-cts {
|
||||
@ -1100,15 +1100,15 @@
|
||||
|
||||
uart2-0 {
|
||||
uart2m0_xfer: uart2m0-xfer {
|
||||
rockchip,pins = <1 RK_PA0 2 &pcfg_pull_up>,
|
||||
<1 RK_PA1 2 &pcfg_pull_none>;
|
||||
rockchip,pins = <1 RK_PA0 2 &pcfg_pull_none>,
|
||||
<1 RK_PA1 2 &pcfg_pull_up>;
|
||||
};
|
||||
};
|
||||
|
||||
uart2-1 {
|
||||
uart2m1_xfer: uart2m1-xfer {
|
||||
rockchip,pins = <2 RK_PA0 1 &pcfg_pull_up>,
|
||||
<2 RK_PA1 1 &pcfg_pull_none>;
|
||||
rockchip,pins = <2 RK_PA0 1 &pcfg_pull_none>,
|
||||
<2 RK_PA1 1 &pcfg_pull_up>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -66,6 +66,9 @@
|
||||
i2c6 = &i2c6;
|
||||
i2c7 = &i2c7;
|
||||
i2c8 = &i2c8;
|
||||
mmc0 = &sdio0;
|
||||
mmc1 = &sdmmc;
|
||||
mmc2 = &sdhci;
|
||||
serial0 = &uart0;
|
||||
serial1 = &uart1;
|
||||
serial2 = &uart2;
|
||||
|
@ -158,6 +158,7 @@ enum vcpu_sysreg {
|
||||
#define c2_TTBR1 (TTBR1_EL1 * 2) /* Translation Table Base Register 1 */
|
||||
#define c2_TTBR1_high (c2_TTBR1 + 1) /* TTBR1 top 32 bits */
|
||||
#define c2_TTBCR (TCR_EL1 * 2) /* Translation Table Base Control R. */
|
||||
#define c2_TTBCR2 (c2_TTBCR + 1) /* Translation Table Base Control R. 2 */
|
||||
#define c3_DACR (DACR32_EL2 * 2)/* Domain Access Control Register */
|
||||
#define c5_DFSR (ESR_EL1 * 2) /* Data Fault Status Register */
|
||||
#define c5_IFSR (IFSR32_EL2 * 2)/* Instruction Fault Status Register */
|
||||
|
@ -1286,6 +1286,7 @@ static const struct sys_reg_desc cp15_regs[] = {
|
||||
{ Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 },
|
||||
{ Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 },
|
||||
{ Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, c2_TTBCR },
|
||||
{ Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, c2_TTBCR2 },
|
||||
{ Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, c3_DACR },
|
||||
{ Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, c5_DFSR },
|
||||
{ Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, c5_IFSR },
|
||||
|
@ -27,6 +27,7 @@ config BCM47XX_BCMA
|
||||
select BCMA
|
||||
select BCMA_HOST_SOC
|
||||
select BCMA_DRIVER_MIPS
|
||||
select BCMA_DRIVER_PCI if PCI
|
||||
select BCMA_DRIVER_PCI_HOSTMODE if PCI
|
||||
select BCMA_DRIVER_GPIO
|
||||
default y
|
||||
|
@ -423,7 +423,6 @@ enum {
|
||||
CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
|
||||
CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_CELL_TB_BUG | CPU_FTR_SMT)
|
||||
#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)
|
||||
|
||||
/* 64-bit CPUs */
|
||||
#define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
|
||||
@ -515,8 +514,6 @@ enum {
|
||||
CPU_FTRS_7447 | CPU_FTRS_7447A | CPU_FTRS_82XX |
|
||||
CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 |
|
||||
CPU_FTRS_CLASSIC32 |
|
||||
#else
|
||||
CPU_FTRS_GENERIC_32 |
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
CPU_FTRS_8XX |
|
||||
@ -567,8 +564,6 @@ enum {
|
||||
CPU_FTRS_7447 & CPU_FTRS_7447A & CPU_FTRS_82XX &
|
||||
CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 &
|
||||
CPU_FTRS_CLASSIC32 &
|
||||
#else
|
||||
CPU_FTRS_GENERIC_32 &
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_8xx
|
||||
CPU_FTRS_8XX &
|
||||
|
@ -1094,7 +1094,7 @@ static struct rtas_filter rtas_filters[] __ro_after_init = {
|
||||
{ "ibm,display-message", -1, 0, -1, -1, -1 },
|
||||
{ "ibm,errinjct", -1, 2, -1, -1, -1, 1024 },
|
||||
{ "ibm,close-errinjct", -1, -1, -1, -1, -1 },
|
||||
{ "ibm,open-errinct", -1, -1, -1, -1, -1 },
|
||||
{ "ibm,open-errinjct", -1, -1, -1, -1, -1 },
|
||||
{ "ibm,get-config-addr-info2", -1, -1, -1, -1, -1 },
|
||||
{ "ibm,get-dynamic-sensor-state", -1, 1, -1, -1, -1 },
|
||||
{ "ibm,get-indices", -1, 2, 3, -1, -1 },
|
||||
|
@ -2066,6 +2066,16 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
|
||||
local64_set(&event->hw.period_left, left);
|
||||
perf_event_update_userpage(event);
|
||||
|
||||
/*
|
||||
* Due to hardware limitation, sometimes SIAR could sample a kernel
|
||||
* address even when freeze on supervisor state (kernel) is set in
|
||||
* MMCR2. Check attr.exclude_kernel and address to drop the sample in
|
||||
* these cases.
|
||||
*/
|
||||
if (event->attr.exclude_kernel && record)
|
||||
if (is_kernel_addr(mfspr(SPRN_SIAR)))
|
||||
record = 0;
|
||||
|
||||
/*
|
||||
* Finally record data if requested.
|
||||
*/
|
||||
|
@ -99,6 +99,23 @@ static int change_memblock_state(struct memory_block *mem, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void memtrace_clear_range(unsigned long start_pfn,
|
||||
unsigned long nr_pages)
|
||||
{
|
||||
unsigned long pfn;
|
||||
|
||||
/*
|
||||
* As pages are offline, we cannot trust the memmap anymore. As HIGHMEM
|
||||
* does not apply, avoid passing around "struct page" and use
|
||||
* clear_page() instead directly.
|
||||
*/
|
||||
for (pfn = start_pfn; pfn < start_pfn + nr_pages; pfn++) {
|
||||
if (IS_ALIGNED(pfn, PAGES_PER_SECTION))
|
||||
cond_resched();
|
||||
clear_page(__va(PFN_PHYS(pfn)));
|
||||
}
|
||||
}
|
||||
|
||||
/* called with device_hotplug_lock held */
|
||||
static bool memtrace_offline_pages(u32 nid, u64 start_pfn, u64 nr_pages)
|
||||
{
|
||||
@ -143,6 +160,11 @@ static u64 memtrace_alloc_node(u32 nid, u64 size)
|
||||
lock_device_hotplug();
|
||||
for (base_pfn = end_pfn; base_pfn > start_pfn; base_pfn -= nr_pages) {
|
||||
if (memtrace_offline_pages(nid, base_pfn, nr_pages) == true) {
|
||||
/*
|
||||
* Clear the range while we still have a linear
|
||||
* mapping.
|
||||
*/
|
||||
memtrace_clear_range(base_pfn, nr_pages);
|
||||
/*
|
||||
* Remove memory in memory block size chunks so that
|
||||
* iomem resources are always split to the same size and
|
||||
|
@ -26,7 +26,6 @@
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/rtas.h>
|
||||
#include <asm/topology.h>
|
||||
#include "../../kernel/cacheinfo.h"
|
||||
|
||||
static u64 stream_id;
|
||||
static struct device suspend_dev;
|
||||
@ -91,9 +90,7 @@ static void pseries_suspend_enable_irqs(void)
|
||||
* Update configuration which can be modified based on device tree
|
||||
* changes during resume.
|
||||
*/
|
||||
cacheinfo_cpu_offline(smp_processor_id());
|
||||
post_mobility_fixup();
|
||||
cacheinfo_cpu_online(smp_processor_id());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -224,7 +221,6 @@ static struct bus_type suspend_subsys = {
|
||||
|
||||
static const struct platform_suspend_ops pseries_suspend_ops = {
|
||||
.valid = suspend_valid_only_mem,
|
||||
.begin = pseries_suspend_begin,
|
||||
.prepare_late = pseries_prepare_late,
|
||||
.enter = pseries_suspend_enter,
|
||||
};
|
||||
|
@ -182,7 +182,7 @@ void xmon_printf(const char *format, ...)
|
||||
|
||||
if (n && rc == 0) {
|
||||
/* No udbg hooks, fallback to printk() - dangerous */
|
||||
printk("%s", xmon_outbuf);
|
||||
pr_cont("%s", xmon_outbuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -864,24 +864,12 @@ static void smp_start_secondary(void *cpuvoid)
|
||||
/* Upping and downing of CPUs */
|
||||
int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||
{
|
||||
struct pcpu *pcpu;
|
||||
int base, i, rc;
|
||||
struct pcpu *pcpu = pcpu_devices + cpu;
|
||||
int rc;
|
||||
|
||||
pcpu = pcpu_devices + cpu;
|
||||
if (pcpu->state != CPU_STATE_CONFIGURED)
|
||||
return -EIO;
|
||||
base = smp_get_base_cpu(cpu);
|
||||
for (i = 0; i <= smp_cpu_mtid; i++) {
|
||||
if (base + i < nr_cpu_ids)
|
||||
if (cpu_online(base + i))
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* If this is the first CPU of the core to get online
|
||||
* do an initial CPU reset.
|
||||
*/
|
||||
if (i > smp_cpu_mtid &&
|
||||
pcpu_sigp_retry(pcpu_devices + base, SIGP_INITIAL_CPU_RESET, 0) !=
|
||||
if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
|
||||
SIGP_CC_ORDER_CODE_ACCEPTED)
|
||||
return -EIO;
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
struct xterm_chan {
|
||||
int pid;
|
||||
int helper_pid;
|
||||
int chan_fd;
|
||||
char *title;
|
||||
int device;
|
||||
int raw;
|
||||
@ -33,6 +34,7 @@ static void *xterm_init(char *str, int device, const struct chan_opts *opts)
|
||||
return NULL;
|
||||
*data = ((struct xterm_chan) { .pid = -1,
|
||||
.helper_pid = -1,
|
||||
.chan_fd = -1,
|
||||
.device = device,
|
||||
.title = opts->xterm_title,
|
||||
.raw = opts->raw } );
|
||||
@ -149,6 +151,7 @@ static int xterm_open(int input, int output, int primary, void *d,
|
||||
goto out_kill;
|
||||
}
|
||||
|
||||
data->chan_fd = fd;
|
||||
new = xterm_fd(fd, &data->helper_pid);
|
||||
if (new < 0) {
|
||||
err = new;
|
||||
@ -206,6 +209,8 @@ static void xterm_close(int fd, void *d)
|
||||
os_kill_process(data->helper_pid, 0);
|
||||
data->helper_pid = -1;
|
||||
|
||||
if (data->chan_fd != -1)
|
||||
os_close_file(data->chan_fd);
|
||||
os_close_file(fd);
|
||||
}
|
||||
|
||||
|
@ -148,6 +148,7 @@ enum page_cache_mode {
|
||||
#endif
|
||||
|
||||
#define _PAGE_CACHE_MASK (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT)
|
||||
#define _PAGE_LARGE_CACHE_MASK (_PAGE_PWT | _PAGE_PCD | _PAGE_PAT_LARGE)
|
||||
#define _PAGE_NOCACHE (cachemode2protval(_PAGE_CACHE_MODE_UC))
|
||||
#define _PAGE_CACHE_WP (cachemode2protval(_PAGE_CACHE_MODE_WP))
|
||||
|
||||
|
@ -1022,6 +1022,11 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
||||
* So clear it by resetting the current kprobe:
|
||||
*/
|
||||
regs->flags &= ~X86_EFLAGS_TF;
|
||||
/*
|
||||
* Since the single step (trap) has been cancelled,
|
||||
* we need to restore BTF here.
|
||||
*/
|
||||
restore_btf();
|
||||
|
||||
/*
|
||||
* If the TF flag was set before the kprobe hit,
|
||||
|
@ -62,6 +62,7 @@ static int ident_p4d_init(struct x86_mapping_info *info, p4d_t *p4d_page,
|
||||
unsigned long addr, unsigned long end)
|
||||
{
|
||||
unsigned long next;
|
||||
int result;
|
||||
|
||||
for (; addr < end; addr = next) {
|
||||
p4d_t *p4d = p4d_page + p4d_index(addr);
|
||||
@ -73,13 +74,20 @@ static int ident_p4d_init(struct x86_mapping_info *info, p4d_t *p4d_page,
|
||||
|
||||
if (p4d_present(*p4d)) {
|
||||
pud = pud_offset(p4d, 0);
|
||||
ident_pud_init(info, pud, addr, next);
|
||||
result = ident_pud_init(info, pud, addr, next);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
continue;
|
||||
}
|
||||
pud = (pud_t *)info->alloc_pgt_page(info->context);
|
||||
if (!pud)
|
||||
return -ENOMEM;
|
||||
ident_pud_init(info, pud, addr, next);
|
||||
|
||||
result = ident_pud_init(info, pud, addr, next);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
set_p4d(p4d, __p4d(__pa(pud) | info->kernpg_flag));
|
||||
}
|
||||
|
||||
|
@ -248,8 +248,8 @@ static void __init sme_clear_pgd(struct sme_populate_pgd_data *ppd)
|
||||
#define PMD_FLAGS_LARGE (__PAGE_KERNEL_LARGE_EXEC & ~_PAGE_GLOBAL)
|
||||
|
||||
#define PMD_FLAGS_DEC PMD_FLAGS_LARGE
|
||||
#define PMD_FLAGS_DEC_WP ((PMD_FLAGS_DEC & ~_PAGE_CACHE_MASK) | \
|
||||
(_PAGE_PAT | _PAGE_PWT))
|
||||
#define PMD_FLAGS_DEC_WP ((PMD_FLAGS_DEC & ~_PAGE_LARGE_CACHE_MASK) | \
|
||||
(_PAGE_PAT_LARGE | _PAGE_PWT))
|
||||
|
||||
#define PMD_FLAGS_ENC (PMD_FLAGS_LARGE | _PAGE_ENC)
|
||||
|
||||
|
@ -151,7 +151,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
|
||||
struct sock *sk = sock->sk;
|
||||
struct alg_sock *ask = alg_sk(sk);
|
||||
struct sockaddr_alg *sa = (void *)uaddr;
|
||||
struct sockaddr_alg_new *sa = (void *)uaddr;
|
||||
const struct af_alg_type *type;
|
||||
void *private;
|
||||
int err;
|
||||
@ -159,7 +159,11 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
if (sock->state == SS_CONNECTED)
|
||||
return -EINVAL;
|
||||
|
||||
if (addr_len < sizeof(*sa))
|
||||
BUILD_BUG_ON(offsetof(struct sockaddr_alg_new, salg_name) !=
|
||||
offsetof(struct sockaddr_alg, salg_name));
|
||||
BUILD_BUG_ON(offsetof(struct sockaddr_alg, salg_name) != sizeof(*sa));
|
||||
|
||||
if (addr_len < sizeof(*sa) + 1)
|
||||
return -EINVAL;
|
||||
|
||||
/* If caller uses non-allowed flag, return error. */
|
||||
@ -167,7 +171,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
return -EINVAL;
|
||||
|
||||
sa->salg_type[sizeof(sa->salg_type) - 1] = 0;
|
||||
sa->salg_name[sizeof(sa->salg_name) + addr_len - sizeof(*sa) - 1] = 0;
|
||||
sa->salg_name[addr_len - sizeof(*sa) - 1] = 0;
|
||||
|
||||
type = alg_get_type(sa->salg_type);
|
||||
if (IS_ERR(type) && PTR_ERR(type) == -ENOENT) {
|
||||
|
@ -57,12 +57,13 @@ static int ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
|
||||
return ecc_gen_privkey(ctx->curve_id, ctx->ndigits,
|
||||
ctx->private_key);
|
||||
|
||||
if (ecc_is_key_valid(ctx->curve_id, ctx->ndigits,
|
||||
(const u64 *)params.key, params.key_size) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(ctx->private_key, params.key, params.key_size);
|
||||
|
||||
if (ecc_is_key_valid(ctx->curve_id, ctx->ndigits,
|
||||
ctx->private_key, params.key_size) < 0) {
|
||||
memzero_explicit(ctx->private_key, params.key_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -320,6 +320,9 @@ static bool matching_id(const char *idstr, const char *list_id)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (strlen(idstr) != strlen(list_id))
|
||||
return false;
|
||||
|
||||
if (memcmp(idstr, list_id, 3))
|
||||
return false;
|
||||
|
||||
|
@ -695,7 +695,7 @@ static void acpi_pm_notify_work_func(struct acpi_device_wakeup_context *context)
|
||||
static DEFINE_MUTEX(acpi_wakeup_lock);
|
||||
|
||||
static int __acpi_device_wakeup_enable(struct acpi_device *adev,
|
||||
u32 target_state, int max_count)
|
||||
u32 target_state)
|
||||
{
|
||||
struct acpi_device_wakeup *wakeup = &adev->wakeup;
|
||||
acpi_status status;
|
||||
@ -703,9 +703,10 @@ static int __acpi_device_wakeup_enable(struct acpi_device *adev,
|
||||
|
||||
mutex_lock(&acpi_wakeup_lock);
|
||||
|
||||
if (wakeup->enable_count >= max_count)
|
||||
if (wakeup->enable_count >= INT_MAX) {
|
||||
acpi_handle_info(adev->handle, "Wakeup enable count out of bounds!\n");
|
||||
goto out;
|
||||
|
||||
}
|
||||
if (wakeup->enable_count > 0)
|
||||
goto inc;
|
||||
|
||||
@ -742,7 +743,7 @@ out:
|
||||
*/
|
||||
static int acpi_device_wakeup_enable(struct acpi_device *adev, u32 target_state)
|
||||
{
|
||||
return __acpi_device_wakeup_enable(adev, target_state, 1);
|
||||
return __acpi_device_wakeup_enable(adev, target_state);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -772,8 +773,12 @@ out:
|
||||
mutex_unlock(&acpi_wakeup_lock);
|
||||
}
|
||||
|
||||
static int __acpi_pm_set_device_wakeup(struct device *dev, bool enable,
|
||||
int max_count)
|
||||
/**
|
||||
* acpi_pm_set_device_wakeup - Enable/disable remote wakeup for given device.
|
||||
* @dev: Device to enable/disable to generate wakeup events.
|
||||
* @enable: Whether to enable or disable the wakeup functionality.
|
||||
*/
|
||||
int acpi_pm_set_device_wakeup(struct device *dev, bool enable)
|
||||
{
|
||||
struct acpi_device *adev;
|
||||
int error;
|
||||
@ -793,36 +798,14 @@ static int __acpi_pm_set_device_wakeup(struct device *dev, bool enable,
|
||||
return 0;
|
||||
}
|
||||
|
||||
error = __acpi_device_wakeup_enable(adev, acpi_target_system_state(),
|
||||
max_count);
|
||||
error = __acpi_device_wakeup_enable(adev, acpi_target_system_state());
|
||||
if (!error)
|
||||
dev_dbg(dev, "Wakeup enabled by ACPI\n");
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
* acpi_pm_set_device_wakeup - Enable/disable remote wakeup for given device.
|
||||
* @dev: Device to enable/disable to generate wakeup events.
|
||||
* @enable: Whether to enable or disable the wakeup functionality.
|
||||
*/
|
||||
int acpi_pm_set_device_wakeup(struct device *dev, bool enable)
|
||||
{
|
||||
return __acpi_pm_set_device_wakeup(dev, enable, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_pm_set_device_wakeup);
|
||||
|
||||
/**
|
||||
* acpi_pm_set_bridge_wakeup - Enable/disable remote wakeup for given bridge.
|
||||
* @dev: Bridge device to enable/disable to generate wakeup events.
|
||||
* @enable: Whether to enable or disable the wakeup functionality.
|
||||
*/
|
||||
int acpi_pm_set_bridge_wakeup(struct device *dev, bool enable)
|
||||
{
|
||||
return __acpi_pm_set_device_wakeup(dev, enable, INT_MAX);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_pm_set_bridge_wakeup);
|
||||
|
||||
/**
|
||||
* acpi_dev_pm_low_power - Put ACPI device into a low-power state.
|
||||
* @dev: Device to put into a low-power state.
|
||||
|
@ -548,7 +548,7 @@ static acpi_status acpi_dev_process_resource(struct acpi_resource *ares,
|
||||
ret = c->preproc(ares, c->preproc_data);
|
||||
if (ret < 0) {
|
||||
c->error = ret;
|
||||
return AE_CTRL_TERMINATE;
|
||||
return AE_ABORT_METHOD;
|
||||
} else if (ret > 0) {
|
||||
return AE_OK;
|
||||
}
|
||||
|
@ -263,6 +263,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
|
||||
|
||||
if (ring->xenblkd) {
|
||||
kthread_stop(ring->xenblkd);
|
||||
ring->xenblkd = NULL;
|
||||
wake_up(&ring->shutdown_wq);
|
||||
}
|
||||
|
||||
@ -650,7 +651,8 @@ static int xen_blkbk_probe(struct xenbus_device *dev,
|
||||
/* setup back pointer */
|
||||
be->blkif->be = be;
|
||||
|
||||
err = xenbus_watch_pathfmt(dev, &be->backend_watch, backend_changed,
|
||||
err = xenbus_watch_pathfmt(dev, &be->backend_watch, NULL,
|
||||
backend_changed,
|
||||
"%s/%s", dev->nodename, "physical-device");
|
||||
if (err)
|
||||
goto fail;
|
||||
|
@ -544,10 +544,8 @@ static void mips_cdmm_bus_discover(struct mips_cdmm_bus *bus)
|
||||
dev_set_name(&dev->dev, "cdmm%u-%u", cpu, id);
|
||||
++id;
|
||||
ret = device_register(&dev->dev);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
put_device(&dev->dev);
|
||||
kfree(dev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,6 +211,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
|
||||
err_reg:
|
||||
of_node_put(s2mps11_clks[0].clk_np);
|
||||
while (--i >= 0)
|
||||
clkdev_drop(s2mps11_clks[i].lookup);
|
||||
|
||||
|
@ -15,8 +15,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#define NB_GPIO1_LATCH 0xC
|
||||
#define XTAL_MODE BIT(31)
|
||||
#define NB_GPIO1_LATCH 0x8
|
||||
#define XTAL_MODE BIT(9)
|
||||
|
||||
static int armada_3700_xtal_clock_probe(struct platform_device *pdev)
|
||||
{
|
||||
|
@ -381,6 +381,7 @@ static struct clk_div_table ths_div_table[] = {
|
||||
{ .val = 1, .div = 2 },
|
||||
{ .val = 2, .div = 4 },
|
||||
{ .val = 3, .div = 6 },
|
||||
{ /* Sentinel */ },
|
||||
};
|
||||
static const char * const ths_parents[] = { "osc24M" };
|
||||
static struct ccu_div ths_clk = {
|
||||
|
@ -315,6 +315,7 @@ static struct clk_div_table ths_div_table[] = {
|
||||
{ .val = 1, .div = 2 },
|
||||
{ .val = 2, .div = 4 },
|
||||
{ .val = 3, .div = 6 },
|
||||
{ /* Sentinel */ },
|
||||
};
|
||||
static SUNXI_CCU_DIV_TABLE_WITH_GATE(ths_clk, "ths", "osc24M",
|
||||
0x074, 0, 2, ths_div_table, BIT(31), 0);
|
||||
|
@ -234,6 +234,7 @@ enum clk_id {
|
||||
tegra_clk_sdmmc4_8,
|
||||
tegra_clk_sdmmc4_9,
|
||||
tegra_clk_se,
|
||||
tegra_clk_se_10,
|
||||
tegra_clk_soc_therm,
|
||||
tegra_clk_soc_therm_8,
|
||||
tegra_clk_sor0,
|
||||
|
@ -673,7 +673,7 @@ static struct tegra_periph_init_data periph_clks[] = {
|
||||
INT8("host1x", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_HOST1X, 28, 0, tegra_clk_host1x_8),
|
||||
INT8("host1x", mux_pllc4_out1_pllc_pllc4_out2_pllp_clkm_plla_pllc4_out0, CLK_SOURCE_HOST1X, 28, 0, tegra_clk_host1x_9),
|
||||
INT8("se", mux_pllp_pllc2_c_c3_pllm_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se),
|
||||
INT8("se", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se),
|
||||
INT8("se", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_SE, 127, TEGRA_PERIPH_ON_APB, tegra_clk_se_10),
|
||||
INT8("2d", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_2D, 21, 0, tegra_clk_gr2d_8),
|
||||
INT8("3d", mux_pllm_pllc2_c_c3_pllp_plla, CLK_SOURCE_3D, 24, 0, tegra_clk_gr3d_8),
|
||||
INT8("vic03", mux_pllm_pllc_pllp_plla_pllc2_c3_clkm, CLK_SOURCE_VIC03, 178, 0, tegra_clk_vic03),
|
||||
|
@ -497,6 +497,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd,
|
||||
{
|
||||
struct clk_init_data *init;
|
||||
struct fapll_synth *synth;
|
||||
struct clk *clk = ERR_PTR(-ENOMEM);
|
||||
|
||||
init = kzalloc(sizeof(*init), GFP_KERNEL);
|
||||
if (!init)
|
||||
@ -519,13 +520,19 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd,
|
||||
synth->hw.init = init;
|
||||
synth->clk_pll = pll_clk;
|
||||
|
||||
return clk_register(NULL, &synth->hw);
|
||||
clk = clk_register(NULL, &synth->hw);
|
||||
if (IS_ERR(clk)) {
|
||||
pr_err("failed to register clock\n");
|
||||
goto free;
|
||||
}
|
||||
|
||||
return clk;
|
||||
|
||||
free:
|
||||
kfree(synth);
|
||||
kfree(init);
|
||||
|
||||
return ERR_PTR(-ENOMEM);
|
||||
return clk;
|
||||
}
|
||||
|
||||
static void __init ti_fapll_setup(struct device_node *node)
|
||||
|
@ -744,15 +744,24 @@ static void arch_timer_evtstrm_enable(int divider)
|
||||
|
||||
static void arch_timer_configure_evtstream(void)
|
||||
{
|
||||
int evt_stream_div, pos;
|
||||
int evt_stream_div, lsb;
|
||||
|
||||
/*
|
||||
* As the event stream can at most be generated at half the frequency
|
||||
* of the counter, use half the frequency when computing the divider.
|
||||
*/
|
||||
evt_stream_div = arch_timer_rate / ARCH_TIMER_EVT_STREAM_FREQ / 2;
|
||||
|
||||
/*
|
||||
* Find the closest power of two to the divisor. If the adjacent bit
|
||||
* of lsb (last set bit, starts from 0) is set, then we use (lsb + 1).
|
||||
*/
|
||||
lsb = fls(evt_stream_div) - 1;
|
||||
if (lsb > 0 && (evt_stream_div & BIT(lsb - 1)))
|
||||
lsb++;
|
||||
|
||||
/* Find the closest power of two to the divisor */
|
||||
evt_stream_div = arch_timer_rate / ARCH_TIMER_EVT_STREAM_FREQ;
|
||||
pos = fls(evt_stream_div);
|
||||
if (pos > 1 && !(evt_stream_div & (1 << (pos - 2))))
|
||||
pos--;
|
||||
/* enable event stream */
|
||||
arch_timer_evtstrm_enable(min(pos, 15));
|
||||
arch_timer_evtstrm_enable(max(0, min(lsb, 15)));
|
||||
}
|
||||
|
||||
static void arch_counter_set_user_access(void)
|
||||
|
@ -419,10 +419,8 @@ static int __init ttc_setup_clockevent(struct clk *clk,
|
||||
ttcce->ttc.clk = clk;
|
||||
|
||||
err = clk_prepare_enable(ttcce->ttc.clk);
|
||||
if (err) {
|
||||
kfree(ttcce);
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto out_kfree;
|
||||
|
||||
ttcce->ttc.clk_rate_change_nb.notifier_call =
|
||||
ttc_rate_change_clockevent_cb;
|
||||
@ -432,7 +430,7 @@ static int __init ttc_setup_clockevent(struct clk *clk,
|
||||
&ttcce->ttc.clk_rate_change_nb);
|
||||
if (err) {
|
||||
pr_warn("Unable to register clock notifier.\n");
|
||||
return err;
|
||||
goto out_kfree;
|
||||
}
|
||||
|
||||
ttcce->ttc.freq = clk_get_rate(ttcce->ttc.clk);
|
||||
@ -461,15 +459,17 @@ static int __init ttc_setup_clockevent(struct clk *clk,
|
||||
|
||||
err = request_irq(irq, ttc_clock_event_interrupt,
|
||||
IRQF_TIMER, ttcce->ce.name, ttcce);
|
||||
if (err) {
|
||||
kfree(ttcce);
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto out_kfree;
|
||||
|
||||
clockevents_config_and_register(&ttcce->ce,
|
||||
ttcce->ttc.freq / PRESCALE, 1, 0xfffe);
|
||||
|
||||
return 0;
|
||||
|
||||
out_kfree:
|
||||
kfree(ttcce);
|
||||
return err;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -104,6 +104,13 @@ out_put_node:
|
||||
}
|
||||
module_init(hb_cpufreq_driver_init);
|
||||
|
||||
static const struct of_device_id __maybe_unused hb_cpufreq_of_match[] = {
|
||||
{ .compatible = "calxeda,highbank" },
|
||||
{ .compatible = "calxeda,ecx-2000" },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, hb_cpufreq_of_match);
|
||||
|
||||
MODULE_AUTHOR("Mark Langsdorf <mark.langsdorf@calxeda.com>");
|
||||
MODULE_DESCRIPTION("Calxeda Highbank cpufreq driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -217,6 +217,7 @@ static struct platform_driver ls1x_cpufreq_platdrv = {
|
||||
|
||||
module_platform_driver(ls1x_cpufreq_platdrv);
|
||||
|
||||
MODULE_ALIAS("platform:ls1x-cpufreq");
|
||||
MODULE_AUTHOR("Kelvin Cheung <keguang.zhang@gmail.com>");
|
||||
MODULE_DESCRIPTION("Loongson1 CPUFreq driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -582,6 +582,7 @@ static const struct of_device_id mtk_cpufreq_machines[] __initconst = {
|
||||
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mtk_cpufreq_machines);
|
||||
|
||||
static int __init mtk_cpufreq_driver_init(void)
|
||||
{
|
||||
|
@ -85,6 +85,7 @@ static struct platform_driver scpi_cpufreq_platdrv = {
|
||||
};
|
||||
module_platform_driver(scpi_cpufreq_platdrv);
|
||||
|
||||
MODULE_ALIAS("platform:scpi-cpufreq");
|
||||
MODULE_AUTHOR("Sudeep Holla <sudeep.holla@arm.com>");
|
||||
MODULE_DESCRIPTION("ARM SCPI CPUFreq interface driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -295,6 +295,13 @@ register_cpufreq_dt:
|
||||
}
|
||||
module_init(sti_cpufreq_init);
|
||||
|
||||
static const struct of_device_id __maybe_unused sti_cpufreq_of_match[] = {
|
||||
{ .compatible = "st,stih407" },
|
||||
{ .compatible = "st,stih410" },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, sti_cpufreq_of_match);
|
||||
|
||||
MODULE_DESCRIPTION("STMicroelectronics CPUFreq/OPP driver");
|
||||
MODULE_AUTHOR("Ajitpal Singh <ajitpal.singh@st.com>");
|
||||
MODULE_AUTHOR("Lee Jones <lee.jones@linaro.org>");
|
||||
|
@ -1071,7 +1071,7 @@ static int omap_aes_probe(struct platform_device *pdev)
|
||||
if (err < 0) {
|
||||
dev_err(dev, "%s: failed to get_sync(%d)\n",
|
||||
__func__, err);
|
||||
goto err_res;
|
||||
goto err_pm_disable;
|
||||
}
|
||||
|
||||
omap_aes_dma_stop(dd);
|
||||
@ -1180,6 +1180,7 @@ err_engine:
|
||||
omap_aes_dma_cleanup(dd);
|
||||
err_irq:
|
||||
tasklet_kill(&dd->done_task);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(dev);
|
||||
err_res:
|
||||
dd = NULL;
|
||||
|
@ -447,7 +447,7 @@ DEF_TALITOS2_DONE(ch1_3, TALITOS2_ISR_CH_1_3_DONE)
|
||||
/*
|
||||
* locate current (offending) descriptor
|
||||
*/
|
||||
static u32 current_desc_hdr(struct device *dev, int ch)
|
||||
static __be32 current_desc_hdr(struct device *dev, int ch)
|
||||
{
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
int tail, iter;
|
||||
@ -478,13 +478,13 @@ static u32 current_desc_hdr(struct device *dev, int ch)
|
||||
/*
|
||||
* user diagnostics; report root cause of error based on execution unit status
|
||||
*/
|
||||
static void report_eu_error(struct device *dev, int ch, u32 desc_hdr)
|
||||
static void report_eu_error(struct device *dev, int ch, __be32 desc_hdr)
|
||||
{
|
||||
struct talitos_private *priv = dev_get_drvdata(dev);
|
||||
int i;
|
||||
|
||||
if (!desc_hdr)
|
||||
desc_hdr = in_be32(priv->chan[ch].reg + TALITOS_DESCBUF);
|
||||
desc_hdr = cpu_to_be32(in_be32(priv->chan[ch].reg + TALITOS_DESCBUF));
|
||||
|
||||
switch (desc_hdr & DESC_HDR_SEL0_MASK) {
|
||||
case DESC_HDR_SEL0_AFEU:
|
||||
|
@ -18,6 +18,9 @@ static struct msr __percpu *msrs;
|
||||
/* Per-node stuff */
|
||||
static struct ecc_settings **ecc_stngs;
|
||||
|
||||
/* Device for the PCI component */
|
||||
static struct device *pci_ctl_dev;
|
||||
|
||||
/*
|
||||
* Valid scrub rates for the K8 hardware memory scrubber. We map the scrubbing
|
||||
* bandwidth to a valid bit pattern. The 'set' operation finds the 'matching-
|
||||
@ -2554,6 +2557,9 @@ reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!pci_ctl_dev)
|
||||
pci_ctl_dev = &pvt->F0->dev;
|
||||
|
||||
edac_dbg(1, "F0: %s\n", pci_name(pvt->F0));
|
||||
edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
|
||||
edac_dbg(1, "F6: %s\n", pci_name(pvt->F6));
|
||||
@ -2578,6 +2584,9 @@ reserve_mc_sibling_devs(struct amd64_pvt *pvt, u16 pci_id1, u16 pci_id2)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!pci_ctl_dev)
|
||||
pci_ctl_dev = &pvt->F2->dev;
|
||||
|
||||
edac_dbg(1, "F1: %s\n", pci_name(pvt->F1));
|
||||
edac_dbg(1, "F2: %s\n", pci_name(pvt->F2));
|
||||
edac_dbg(1, "F3: %s\n", pci_name(pvt->F3));
|
||||
@ -3428,21 +3437,10 @@ static void remove_one_instance(unsigned int nid)
|
||||
|
||||
static void setup_pci_device(void)
|
||||
{
|
||||
struct mem_ctl_info *mci;
|
||||
struct amd64_pvt *pvt;
|
||||
|
||||
if (pci_ctl)
|
||||
return;
|
||||
|
||||
mci = edac_mc_find(0);
|
||||
if (!mci)
|
||||
return;
|
||||
|
||||
pvt = mci->pvt_info;
|
||||
if (pvt->umc)
|
||||
pci_ctl = edac_pci_create_generic_ctl(&pvt->F0->dev, EDAC_MOD_STR);
|
||||
else
|
||||
pci_ctl = edac_pci_create_generic_ctl(&pvt->F2->dev, EDAC_MOD_STR);
|
||||
pci_ctl = edac_pci_create_generic_ctl(pci_ctl_dev, EDAC_MOD_STR);
|
||||
if (!pci_ctl) {
|
||||
pr_warn("%s(): Unable to create PCI control\n", __func__);
|
||||
pr_warn("%s(): PCI error report via EDAC not set\n", __func__);
|
||||
@ -3517,6 +3515,8 @@ static int __init amd64_edac_init(void)
|
||||
return 0;
|
||||
|
||||
err_pci:
|
||||
pci_ctl_dev = NULL;
|
||||
|
||||
msrs_free(msrs);
|
||||
msrs = NULL;
|
||||
|
||||
@ -3548,6 +3548,8 @@ static void __exit amd64_edac_exit(void)
|
||||
kfree(ecc_stngs);
|
||||
ecc_stngs = NULL;
|
||||
|
||||
pci_ctl_dev = NULL;
|
||||
|
||||
msrs_free(msrs);
|
||||
msrs = NULL;
|
||||
}
|
||||
|
@ -1275,4 +1275,4 @@ module_platform_driver(max77693_muic_driver);
|
||||
MODULE_DESCRIPTION("Maxim MAX77693 Extcon driver");
|
||||
MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:extcon-max77693");
|
||||
MODULE_ALIAS("platform:max77693-muic");
|
||||
|
@ -1195,6 +1195,13 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
||||
|
||||
devm_gpiochip_add_data(&pdev->dev, &mvchip->chip, mvchip);
|
||||
|
||||
/* Some MVEBU SoCs have simple PWM support for GPIO lines */
|
||||
if (IS_ENABLED(CONFIG_PWM)) {
|
||||
err = mvebu_pwm_probe(pdev, mvchip, id);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Some gpio controllers do not provide irq support */
|
||||
if (!have_irqs)
|
||||
return 0;
|
||||
@ -1204,7 +1211,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
||||
if (!mvchip->domain) {
|
||||
dev_err(&pdev->dev, "couldn't allocate irq domain %s (DT).\n",
|
||||
mvchip->chip.label);
|
||||
return -ENODEV;
|
||||
err = -ENODEV;
|
||||
goto err_pwm;
|
||||
}
|
||||
|
||||
err = irq_alloc_domain_generic_chips(
|
||||
@ -1252,14 +1260,12 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
||||
mvchip);
|
||||
}
|
||||
|
||||
/* Some MVEBU SoCs have simple PWM support for GPIO lines */
|
||||
if (IS_ENABLED(CONFIG_PWM))
|
||||
return mvebu_pwm_probe(pdev, mvchip, id);
|
||||
|
||||
return 0;
|
||||
|
||||
err_domain:
|
||||
irq_domain_remove(mvchip->domain);
|
||||
err_pwm:
|
||||
pwmchip_remove(&mvchip->mvpwm->chip);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ static struct drm_dp_aux_dev *drm_dp_aux_dev_get_by_minor(unsigned index)
|
||||
|
||||
mutex_lock(&aux_idr_mutex);
|
||||
aux_dev = idr_find(&aux_idr, index);
|
||||
if (!kref_get_unless_zero(&aux_dev->refcount))
|
||||
if (aux_dev && !kref_get_unless_zero(&aux_dev->refcount))
|
||||
aux_dev = NULL;
|
||||
mutex_unlock(&aux_idr_mutex);
|
||||
|
||||
|
@ -2629,11 +2629,11 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
|
||||
{
|
||||
int ret;
|
||||
|
||||
port = drm_dp_get_validated_port_ref(mgr, port);
|
||||
if (!port)
|
||||
if (slots < 0)
|
||||
return false;
|
||||
|
||||
if (slots < 0)
|
||||
port = drm_dp_get_validated_port_ref(mgr, port);
|
||||
if (!port)
|
||||
return false;
|
||||
|
||||
if (port->vcpi.vcpi > 0) {
|
||||
@ -2648,6 +2648,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
|
||||
if (ret) {
|
||||
DRM_DEBUG_KMS("failed to init vcpi slots=%d max=63 ret=%d\n",
|
||||
DIV_ROUND_UP(pbn, mgr->pbn_div), ret);
|
||||
drm_dp_put_port(port);
|
||||
goto out;
|
||||
}
|
||||
DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n",
|
||||
|
@ -2126,7 +2126,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev
|
||||
DRM_INFO("failed to retrieve link info, disabling eDP\n");
|
||||
cdv_intel_dp_encoder_destroy(encoder);
|
||||
cdv_intel_dp_destroy(connector);
|
||||
goto err_priv;
|
||||
goto err_connector;
|
||||
} else {
|
||||
DRM_DEBUG_KMS("DPCD: Rev=%x LN_Rate=%x LN_CNT=%x LN_DOWNSP=%x\n",
|
||||
intel_dp->dpcd[0], intel_dp->dpcd[1],
|
||||
|
@ -751,6 +751,7 @@ static int omap_dmm_probe(struct platform_device *dev)
|
||||
&omap_dmm->refill_pa, GFP_KERNEL);
|
||||
if (!omap_dmm->refill_va) {
|
||||
dev_err(&dev->dev, "could not allocate refill memory\n");
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -2378,17 +2378,23 @@ static int tegra_sor_init(struct host1x_client *client)
|
||||
if (err < 0) {
|
||||
dev_err(sor->dev, "failed to deassert SOR reset: %d\n",
|
||||
err);
|
||||
clk_disable_unprepare(sor->clk);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
err = clk_prepare_enable(sor->clk_safe);
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
clk_disable_unprepare(sor->clk);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = clk_prepare_enable(sor->clk_dp);
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
clk_disable_unprepare(sor->clk_safe);
|
||||
clk_disable_unprepare(sor->clk);
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -397,6 +397,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = {
|
||||
},
|
||||
.driver_data = (void *)&sipodev_desc
|
||||
},
|
||||
{
|
||||
.ident = "Vero K147",
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VERO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "K147"),
|
||||
},
|
||||
.driver_data = (void *)&sipodev_desc
|
||||
},
|
||||
{ } /* Terminate list */
|
||||
};
|
||||
|
||||
|
@ -389,7 +389,7 @@ static int ssi_add_controller(struct hsi_controller *ssi,
|
||||
|
||||
err = ida_simple_get(&platform_omap_ssi_ida, 0, 0, GFP_KERNEL);
|
||||
if (err < 0)
|
||||
goto out_err;
|
||||
return err;
|
||||
ssi->id = err;
|
||||
|
||||
ssi->owner = THIS_MODULE;
|
||||
|
@ -384,7 +384,7 @@ static int rockchip_saradc_resume(struct device *dev)
|
||||
|
||||
ret = clk_prepare_enable(info->clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
clk_disable_unprepare(info->pclk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -385,8 +385,8 @@ static irqreturn_t bmi160_trigger_handler(int irq, void *p)
|
||||
struct iio_poll_func *pf = p;
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct bmi160_data *data = iio_priv(indio_dev);
|
||||
__le16 buf[16];
|
||||
/* 3 sens x 3 axis x __le16 + 3 x __le16 pad + 4 x __le16 tstamp */
|
||||
__le16 buf[12];
|
||||
/* 2 sens x 3 axis x __le16 + 2 x __le16 pad + 4 x __le16 tstamp */
|
||||
int i, ret, j = 0, base = BMI160_REG_DATA_MAGN_XOUT_L;
|
||||
__le16 sample;
|
||||
|
||||
|
@ -850,12 +850,12 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev,
|
||||
indio_dev->masklength,
|
||||
in_ind + 1);
|
||||
while (in_ind != out_ind) {
|
||||
in_ind = find_next_bit(indio_dev->active_scan_mask,
|
||||
indio_dev->masklength,
|
||||
in_ind + 1);
|
||||
length = iio_storage_bytes_for_si(indio_dev, in_ind);
|
||||
/* Make sure we are aligned */
|
||||
in_loc = roundup(in_loc, length) + length;
|
||||
in_ind = find_next_bit(indio_dev->active_scan_mask,
|
||||
indio_dev->masklength,
|
||||
in_ind + 1);
|
||||
}
|
||||
length = iio_storage_bytes_for_si(indio_dev, in_ind);
|
||||
out_loc = roundup(out_loc, length);
|
||||
|
@ -197,6 +197,17 @@ struct rpr0521_data {
|
||||
bool pxs_need_dis;
|
||||
|
||||
struct regmap *regmap;
|
||||
|
||||
/*
|
||||
* Ensure correct naturally aligned timestamp.
|
||||
* Note that the read will put garbage data into
|
||||
* the padding but this should not be a problem
|
||||
*/
|
||||
struct {
|
||||
__le16 channels[3];
|
||||
u8 garbage;
|
||||
s64 ts __aligned(8);
|
||||
} scan;
|
||||
};
|
||||
|
||||
static IIO_CONST_ATTR(in_intensity_scale_available, RPR0521_ALS_SCALE_AVAIL);
|
||||
@ -452,8 +463,6 @@ static irqreturn_t rpr0521_trigger_consumer_handler(int irq, void *p)
|
||||
struct rpr0521_data *data = iio_priv(indio_dev);
|
||||
int err;
|
||||
|
||||
u8 buffer[16]; /* 3 16-bit channels + padding + ts */
|
||||
|
||||
/* Use irq timestamp when reasonable. */
|
||||
if (iio_trigger_using_own(indio_dev) && data->irq_timestamp) {
|
||||
pf->timestamp = data->irq_timestamp;
|
||||
@ -464,11 +473,11 @@ static irqreturn_t rpr0521_trigger_consumer_handler(int irq, void *p)
|
||||
pf->timestamp = iio_get_time_ns(indio_dev);
|
||||
|
||||
err = regmap_bulk_read(data->regmap, RPR0521_REG_PXS_DATA,
|
||||
&buffer,
|
||||
data->scan.channels,
|
||||
(3 * 2) + 1); /* 3 * 16-bit + (discarded) int clear reg. */
|
||||
if (!err)
|
||||
iio_push_to_buffers_with_timestamp(indio_dev,
|
||||
buffer, pf->timestamp);
|
||||
&data->scan, pf->timestamp);
|
||||
else
|
||||
dev_err(&data->client->dev,
|
||||
"Trigger consumer can't read from sensor.\n");
|
||||
|
@ -147,7 +147,14 @@ static irqreturn_t mpl3115_trigger_handler(int irq, void *p)
|
||||
struct iio_poll_func *pf = p;
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct mpl3115_data *data = iio_priv(indio_dev);
|
||||
u8 buffer[16]; /* 32-bit channel + 16-bit channel + padding + ts */
|
||||
/*
|
||||
* 32-bit channel + 16-bit channel + padding + ts
|
||||
* Note that it is possible for only one of the first 2
|
||||
* channels to be enabled. If that happens, the first element
|
||||
* of the buffer may be either 16 or 32-bits. As such we cannot
|
||||
* use a simple structure definition to express this data layout.
|
||||
*/
|
||||
u8 buffer[16] __aligned(8);
|
||||
int ret, pos = 0;
|
||||
|
||||
mutex_lock(&data->lock);
|
||||
|
@ -1349,6 +1349,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_id,
|
||||
id.local_id);
|
||||
if (IS_ERR(cm_id_priv->timewait_info)) {
|
||||
ret = PTR_ERR(cm_id_priv->timewait_info);
|
||||
cm_id_priv->timewait_info = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1836,6 +1837,7 @@ static int cm_req_handler(struct cm_work *work)
|
||||
id.local_id);
|
||||
if (IS_ERR(cm_id_priv->timewait_info)) {
|
||||
ret = PTR_ERR(cm_id_priv->timewait_info);
|
||||
cm_id_priv->timewait_info = NULL;
|
||||
goto destroy;
|
||||
}
|
||||
cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id;
|
||||
|
@ -1590,6 +1590,7 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
|
||||
goto out;
|
||||
}
|
||||
qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state);
|
||||
qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state);
|
||||
qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0;
|
||||
qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access);
|
||||
qp_attr->pkey_index = qplib_qp->pkey_index;
|
||||
|
@ -906,6 +906,9 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev,
|
||||
|
||||
rhp = to_c4iw_dev(ibdev);
|
||||
|
||||
if (entries < 1 || entries > ibdev->attrs.max_cqe)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
if (vector >= rhp->rdev.lldi.nciq)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
|
@ -609,7 +609,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
|
||||
entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
|
||||
break;
|
||||
default:
|
||||
entry->opcode = MTHCA_OPCODE_INVALID;
|
||||
entry->opcode = 0xFF;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -105,7 +105,6 @@ enum {
|
||||
MTHCA_OPCODE_ATOMIC_CS = 0x11,
|
||||
MTHCA_OPCODE_ATOMIC_FA = 0x12,
|
||||
MTHCA_OPCODE_BIND_MW = 0x18,
|
||||
MTHCA_OPCODE_INVALID = 0xff
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -664,7 +664,8 @@ next_wqe:
|
||||
}
|
||||
|
||||
if (unlikely(qp_type(qp) == IB_QPT_RC &&
|
||||
qp->req.psn > (qp->comp.psn + RXE_MAX_UNACKED_PSNS))) {
|
||||
psn_compare(qp->req.psn, (qp->comp.psn +
|
||||
RXE_MAX_UNACKED_PSNS)) > 0)) {
|
||||
qp->req.wait_psn = 1;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -196,6 +196,7 @@ static void cros_ec_keyb_process(struct cros_ec_keyb *ckdev,
|
||||
"changed: [r%d c%d]: byte %02x\n",
|
||||
row, col, new_state);
|
||||
|
||||
input_event(idev, EV_MSC, MSC_SCAN, pos);
|
||||
input_report_key(idev, keycodes[pos],
|
||||
new_state);
|
||||
}
|
||||
|
@ -199,12 +199,8 @@ static int omap4_keypad_open(struct input_dev *input)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void omap4_keypad_close(struct input_dev *input)
|
||||
static void omap4_keypad_stop(struct omap4_keypad *keypad_data)
|
||||
{
|
||||
struct omap4_keypad *keypad_data = input_get_drvdata(input);
|
||||
|
||||
disable_irq(keypad_data->irq);
|
||||
|
||||
/* Disable interrupts and wake-up events */
|
||||
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
|
||||
OMAP4_VAL_IRQDISABLE);
|
||||
@ -213,7 +209,15 @@ static void omap4_keypad_close(struct input_dev *input)
|
||||
/* clear pending interrupts */
|
||||
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
|
||||
kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
|
||||
}
|
||||
|
||||
static void omap4_keypad_close(struct input_dev *input)
|
||||
{
|
||||
struct omap4_keypad *keypad_data;
|
||||
|
||||
keypad_data = input_get_drvdata(input);
|
||||
disable_irq(keypad_data->irq);
|
||||
omap4_keypad_stop(keypad_data);
|
||||
enable_irq(keypad_data->irq);
|
||||
|
||||
pm_runtime_put_sync(input->dev.parent);
|
||||
@ -236,13 +240,37 @@ static int omap4_keypad_parse_dt(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_keypad_check_revision(struct device *dev,
|
||||
struct omap4_keypad *keypad_data)
|
||||
{
|
||||
unsigned int rev;
|
||||
|
||||
rev = __raw_readl(keypad_data->base + OMAP4_KBD_REVISION);
|
||||
rev &= 0x03 << 30;
|
||||
rev >>= 30;
|
||||
switch (rev) {
|
||||
case KBD_REVISION_OMAP4:
|
||||
keypad_data->reg_offset = 0x00;
|
||||
keypad_data->irqreg_offset = 0x00;
|
||||
break;
|
||||
case KBD_REVISION_OMAP5:
|
||||
keypad_data->reg_offset = 0x10;
|
||||
keypad_data->irqreg_offset = 0x0c;
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "Keypad reports unsupported revision %d", rev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap4_keypad_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct omap4_keypad *keypad_data;
|
||||
struct input_dev *input_dev;
|
||||
struct resource *res;
|
||||
unsigned int max_keys;
|
||||
int rev;
|
||||
int irq;
|
||||
int error;
|
||||
|
||||
@ -282,41 +310,33 @@ static int omap4_keypad_probe(struct platform_device *pdev)
|
||||
goto err_release_mem;
|
||||
}
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
/*
|
||||
* Enable clocks for the keypad module so that we can read
|
||||
* revision register.
|
||||
*/
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
error = pm_runtime_get_sync(&pdev->dev);
|
||||
if (error) {
|
||||
dev_err(&pdev->dev, "pm_runtime_get_sync() failed\n");
|
||||
goto err_unmap;
|
||||
}
|
||||
rev = __raw_readl(keypad_data->base + OMAP4_KBD_REVISION);
|
||||
rev &= 0x03 << 30;
|
||||
rev >>= 30;
|
||||
switch (rev) {
|
||||
case KBD_REVISION_OMAP4:
|
||||
keypad_data->reg_offset = 0x00;
|
||||
keypad_data->irqreg_offset = 0x00;
|
||||
break;
|
||||
case KBD_REVISION_OMAP5:
|
||||
keypad_data->reg_offset = 0x10;
|
||||
keypad_data->irqreg_offset = 0x0c;
|
||||
break;
|
||||
default:
|
||||
dev_err(&pdev->dev,
|
||||
"Keypad reports unsupported revision %d", rev);
|
||||
error = -EINVAL;
|
||||
goto err_pm_put_sync;
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
} else {
|
||||
error = omap4_keypad_check_revision(&pdev->dev,
|
||||
keypad_data);
|
||||
if (!error) {
|
||||
/* Ensure device does not raise interrupts */
|
||||
omap4_keypad_stop(keypad_data);
|
||||
}
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
}
|
||||
if (error)
|
||||
goto err_pm_disable;
|
||||
|
||||
/* input device allocation */
|
||||
keypad_data->input = input_dev = input_allocate_device();
|
||||
if (!input_dev) {
|
||||
error = -ENOMEM;
|
||||
goto err_pm_put_sync;
|
||||
goto err_pm_disable;
|
||||
}
|
||||
|
||||
input_dev->name = pdev->name;
|
||||
@ -361,28 +381,25 @@ static int omap4_keypad_probe(struct platform_device *pdev)
|
||||
goto err_free_keymap;
|
||||
}
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
|
||||
error = input_register_device(keypad_data->input);
|
||||
if (error < 0) {
|
||||
dev_err(&pdev->dev, "failed to register input device\n");
|
||||
goto err_pm_disable;
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
device_init_wakeup(&pdev->dev, true);
|
||||
platform_set_drvdata(pdev, keypad_data);
|
||||
|
||||
return 0;
|
||||
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_free_irq:
|
||||
free_irq(keypad_data->irq, keypad_data);
|
||||
err_free_keymap:
|
||||
kfree(keypad_data->keymap);
|
||||
err_free_input:
|
||||
input_free_device(input_dev);
|
||||
err_pm_put_sync:
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
err_unmap:
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(keypad_data->base);
|
||||
err_release_mem:
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
|
@ -571,12 +571,15 @@ static int cm109_input_open(struct input_dev *idev)
|
||||
dev->ctl_data->byte[HID_OR2] = dev->keybit;
|
||||
dev->ctl_data->byte[HID_OR3] = 0x00;
|
||||
|
||||
dev->ctl_urb_pending = 1;
|
||||
error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
|
||||
if (error)
|
||||
if (error) {
|
||||
dev->ctl_urb_pending = 0;
|
||||
dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
|
||||
__func__, error);
|
||||
else
|
||||
} else {
|
||||
dev->open = 1;
|
||||
}
|
||||
|
||||
mutex_unlock(&dev->pm_mutex);
|
||||
|
||||
|
@ -573,7 +573,7 @@ static int cyapa_pip_retrieve_data_structure(struct cyapa *cyapa,
|
||||
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
put_unaligned_le16(PIP_OUTPUT_REPORT_ADDR, &cmd.head.addr);
|
||||
put_unaligned_le16(sizeof(cmd), &cmd.head.length - 2);
|
||||
put_unaligned_le16(sizeof(cmd) - 2, &cmd.head.length);
|
||||
cmd.head.report_id = PIP_APP_CMD_REPORT_ID;
|
||||
cmd.head.cmd_code = PIP_RETRIEVE_DATA_STRUCTURE;
|
||||
put_unaligned_le16(read_offset, &cmd.read_offset);
|
||||
|
@ -615,6 +615,48 @@ static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A114-31"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A314-31"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire A315-31"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-132"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-332"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire ES1-432"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate Spin B118-RN"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Advent 4211 */
|
||||
.matches = {
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
/*
|
||||
* This code has been heavily tested on a Nokia 770, and lightly
|
||||
@ -199,6 +200,26 @@ struct ads7846 {
|
||||
#define REF_ON (READ_12BIT_DFR(x, 1, 1))
|
||||
#define REF_OFF (READ_12BIT_DFR(y, 0, 0))
|
||||
|
||||
static int get_pendown_state(struct ads7846 *ts)
|
||||
{
|
||||
if (ts->get_pendown_state)
|
||||
return ts->get_pendown_state();
|
||||
|
||||
return !gpio_get_value(ts->gpio_pendown);
|
||||
}
|
||||
|
||||
static void ads7846_report_pen_up(struct ads7846 *ts)
|
||||
{
|
||||
struct input_dev *input = ts->input;
|
||||
|
||||
input_report_key(input, BTN_TOUCH, 0);
|
||||
input_report_abs(input, ABS_PRESSURE, 0);
|
||||
input_sync(input);
|
||||
|
||||
ts->pendown = false;
|
||||
dev_vdbg(&ts->spi->dev, "UP\n");
|
||||
}
|
||||
|
||||
/* Must be called with ts->lock held */
|
||||
static void ads7846_stop(struct ads7846 *ts)
|
||||
{
|
||||
@ -215,6 +236,10 @@ static void ads7846_stop(struct ads7846 *ts)
|
||||
static void ads7846_restart(struct ads7846 *ts)
|
||||
{
|
||||
if (!ts->disabled && !ts->suspended) {
|
||||
/* Check if pen was released since last stop */
|
||||
if (ts->pendown && !get_pendown_state(ts))
|
||||
ads7846_report_pen_up(ts);
|
||||
|
||||
/* Tell IRQ thread that it may poll the device. */
|
||||
ts->stopped = false;
|
||||
mb();
|
||||
@ -410,7 +435,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command)
|
||||
|
||||
if (status == 0) {
|
||||
/* BE12 value, then padding */
|
||||
status = be16_to_cpu(*((u16 *)&req->sample[1]));
|
||||
status = get_unaligned_be16(&req->sample[1]);
|
||||
status = status >> 3;
|
||||
status &= 0x0fff;
|
||||
}
|
||||
@ -605,14 +630,6 @@ static const struct attribute_group ads784x_attr_group = {
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
static int get_pendown_state(struct ads7846 *ts)
|
||||
{
|
||||
if (ts->get_pendown_state)
|
||||
return ts->get_pendown_state();
|
||||
|
||||
return !gpio_get_value(ts->gpio_pendown);
|
||||
}
|
||||
|
||||
static void null_wait_for_sync(void)
|
||||
{
|
||||
}
|
||||
@ -785,10 +802,11 @@ static void ads7846_report_state(struct ads7846 *ts)
|
||||
/* compute touch pressure resistance using equation #2 */
|
||||
Rt = z2;
|
||||
Rt -= z1;
|
||||
Rt *= x;
|
||||
Rt *= ts->x_plate_ohms;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 16);
|
||||
Rt *= x;
|
||||
Rt /= z1;
|
||||
Rt = (Rt + 2047) >> 12;
|
||||
Rt = DIV_ROUND_CLOSEST(Rt, 256);
|
||||
} else {
|
||||
Rt = 0;
|
||||
}
|
||||
@ -871,16 +889,8 @@ static irqreturn_t ads7846_irq(int irq, void *handle)
|
||||
msecs_to_jiffies(TS_POLL_PERIOD));
|
||||
}
|
||||
|
||||
if (ts->pendown && !ts->stopped) {
|
||||
struct input_dev *input = ts->input;
|
||||
|
||||
input_report_key(input, BTN_TOUCH, 0);
|
||||
input_report_abs(input, ABS_PRESSURE, 0);
|
||||
input_sync(input);
|
||||
|
||||
ts->pendown = false;
|
||||
dev_vdbg(&ts->spi->dev, "UP\n");
|
||||
}
|
||||
if (ts->pendown && !ts->stopped)
|
||||
ads7846_report_pen_up(ts);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -101,6 +101,18 @@ static const struct dmi_system_id rotated_screen[] = {
|
||||
DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Teclast X98 Pro",
|
||||
.matches = {
|
||||
/*
|
||||
* Only match BIOS date, because the manufacturers
|
||||
* BIOS does not report the board name at all
|
||||
* (sometimes)...
|
||||
*/
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
|
||||
DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "WinBook TW100",
|
||||
.matches = {
|
||||
|
@ -165,8 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,
|
||||
return 0;
|
||||
|
||||
err_sgi:
|
||||
while (--i >= 0)
|
||||
irq_domain_free_irqs_parent(domain, virq, i);
|
||||
irq_domain_free_irqs_parent(domain, virq, i - 1);
|
||||
alpine_msix_free_sgi(priv, sgi, nr_irqs);
|
||||
return err;
|
||||
}
|
||||
|
@ -1574,6 +1574,7 @@ static int target_message(struct file *filp, struct dm_ioctl *param, size_t para
|
||||
|
||||
if (!argc) {
|
||||
DMWARN("Empty message received.");
|
||||
r = -EINVAL;
|
||||
goto out_argv;
|
||||
}
|
||||
|
||||
|
@ -1297,12 +1297,6 @@ void dm_table_event_callback(struct dm_table *t,
|
||||
|
||||
void dm_table_event(struct dm_table *t)
|
||||
{
|
||||
/*
|
||||
* You can no longer call dm_table_event() from interrupt
|
||||
* context, use a bottom half instead.
|
||||
*/
|
||||
BUG_ON(in_interrupt());
|
||||
|
||||
mutex_lock(&_event_lock);
|
||||
if (t->event_fn)
|
||||
t->event_fn(t->event_context);
|
||||
|
@ -659,9 +659,27 @@ out:
|
||||
* Takes the lock on the TOKEN lock resource so no other
|
||||
* node can communicate while the operation is underway.
|
||||
*/
|
||||
static int lock_token(struct md_cluster_info *cinfo, bool mddev_locked)
|
||||
static int lock_token(struct md_cluster_info *cinfo)
|
||||
{
|
||||
int error, set_bit = 0;
|
||||
int error;
|
||||
|
||||
error = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX);
|
||||
if (error) {
|
||||
pr_err("md-cluster(%s:%d): failed to get EX on TOKEN (%d)\n",
|
||||
__func__, __LINE__, error);
|
||||
} else {
|
||||
/* Lock the receive sequence */
|
||||
mutex_lock(&cinfo->recv_mutex);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
/* lock_comm()
|
||||
* Sets the MD_CLUSTER_SEND_LOCK bit to lock the send channel.
|
||||
*/
|
||||
static int lock_comm(struct md_cluster_info *cinfo, bool mddev_locked)
|
||||
{
|
||||
int rv, set_bit = 0;
|
||||
struct mddev *mddev = cinfo->mddev;
|
||||
|
||||
/*
|
||||
@ -672,34 +690,19 @@ static int lock_token(struct md_cluster_info *cinfo, bool mddev_locked)
|
||||
*/
|
||||
if (mddev_locked && !test_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD,
|
||||
&cinfo->state)) {
|
||||
error = test_and_set_bit_lock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD,
|
||||
rv = test_and_set_bit_lock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD,
|
||||
&cinfo->state);
|
||||
WARN_ON_ONCE(error);
|
||||
WARN_ON_ONCE(rv);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
set_bit = 1;
|
||||
}
|
||||
error = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX);
|
||||
if (set_bit)
|
||||
clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
|
||||
|
||||
if (error)
|
||||
pr_err("md-cluster(%s:%d): failed to get EX on TOKEN (%d)\n",
|
||||
__func__, __LINE__, error);
|
||||
|
||||
/* Lock the receive sequence */
|
||||
mutex_lock(&cinfo->recv_mutex);
|
||||
return error;
|
||||
}
|
||||
|
||||
/* lock_comm()
|
||||
* Sets the MD_CLUSTER_SEND_LOCK bit to lock the send channel.
|
||||
*/
|
||||
static int lock_comm(struct md_cluster_info *cinfo, bool mddev_locked)
|
||||
{
|
||||
wait_event(cinfo->wait,
|
||||
!test_and_set_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state));
|
||||
|
||||
return lock_token(cinfo, mddev_locked);
|
||||
rv = lock_token(cinfo);
|
||||
if (set_bit)
|
||||
clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static void unlock_comm(struct md_cluster_info *cinfo)
|
||||
@ -779,9 +782,11 @@ static int sendmsg(struct md_cluster_info *cinfo, struct cluster_msg *cmsg,
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_comm(cinfo, mddev_locked);
|
||||
ret = __sendmsg(cinfo, cmsg);
|
||||
unlock_comm(cinfo);
|
||||
ret = lock_comm(cinfo, mddev_locked);
|
||||
if (!ret) {
|
||||
ret = __sendmsg(cinfo, cmsg);
|
||||
unlock_comm(cinfo);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1053,7 +1058,7 @@ static int metadata_update_start(struct mddev *mddev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = lock_token(cinfo, 1);
|
||||
ret = lock_token(cinfo);
|
||||
clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
|
||||
return ret;
|
||||
}
|
||||
@ -1171,7 +1176,10 @@ static void update_size(struct mddev *mddev, sector_t old_dev_sectors)
|
||||
int raid_slot = -1;
|
||||
|
||||
md_update_sb(mddev, 1);
|
||||
lock_comm(cinfo, 1);
|
||||
if (lock_comm(cinfo, 1)) {
|
||||
pr_err("%s: lock_comm failed\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&cmsg, 0, sizeof(cmsg));
|
||||
cmsg.type = cpu_to_le32(METADATA_UPDATED);
|
||||
@ -1310,7 +1318,8 @@ static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev)
|
||||
cmsg.type = cpu_to_le32(NEWDISK);
|
||||
memcpy(cmsg.uuid, uuid, 16);
|
||||
cmsg.raid_slot = cpu_to_le32(rdev->desc_nr);
|
||||
lock_comm(cinfo, 1);
|
||||
if (lock_comm(cinfo, 1))
|
||||
return -EAGAIN;
|
||||
ret = __sendmsg(cinfo, &cmsg);
|
||||
if (ret) {
|
||||
unlock_comm(cinfo);
|
||||
|
@ -6537,8 +6537,10 @@ static int hot_remove_disk(struct mddev *mddev, dev_t dev)
|
||||
goto busy;
|
||||
|
||||
kick_rdev:
|
||||
if (mddev_is_clustered(mddev))
|
||||
md_cluster_ops->remove_disk(mddev, rdev);
|
||||
if (mddev_is_clustered(mddev)) {
|
||||
if (md_cluster_ops->remove_disk(mddev, rdev))
|
||||
goto busy;
|
||||
}
|
||||
|
||||
md_kick_rdev_from_array(rdev);
|
||||
set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
|
||||
@ -7187,8 +7189,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
|
||||
err = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
WARN_ON_ONCE(test_bit(MD_CLOSING, &mddev->flags));
|
||||
set_bit(MD_CLOSING, &mddev->flags);
|
||||
if (test_and_set_bit(MD_CLOSING, &mddev->flags)) {
|
||||
mutex_unlock(&mddev->open_mutex);
|
||||
err = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
did_set_md_closing = true;
|
||||
mutex_unlock(&mddev->open_mutex);
|
||||
sync_blockdev(bdev);
|
||||
|
@ -1180,12 +1180,15 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
|
||||
rc = dvb_create_media_graph(&client->adapter, true);
|
||||
if (rc < 0) {
|
||||
pr_err("dvb_create_media_graph failed %d\n", rc);
|
||||
goto client_error;
|
||||
goto media_graph_error;
|
||||
}
|
||||
|
||||
pr_info("DVB interface registered.\n");
|
||||
return 0;
|
||||
|
||||
media_graph_error:
|
||||
smsdvb_debugfs_release(client);
|
||||
|
||||
client_error:
|
||||
dvb_unregister_frontend(&client->frontend);
|
||||
|
||||
|
@ -511,7 +511,7 @@ static void max2175_set_bbfilter(struct max2175 *ctx)
|
||||
}
|
||||
}
|
||||
|
||||
static bool max2175_set_csm_mode(struct max2175 *ctx,
|
||||
static int max2175_set_csm_mode(struct max2175 *ctx,
|
||||
enum max2175_csm_mode new_mode)
|
||||
{
|
||||
int ret = max2175_poll_csm_ready(ctx);
|
||||
|
@ -184,7 +184,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)
|
||||
struct spi_master *master;
|
||||
struct netup_spi *nspi;
|
||||
|
||||
master = spi_alloc_master(&ndev->pci_dev->dev,
|
||||
master = devm_spi_alloc_master(&ndev->pci_dev->dev,
|
||||
sizeof(struct netup_spi));
|
||||
if (!master) {
|
||||
dev_err(&ndev->pci_dev->dev,
|
||||
@ -217,6 +217,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)
|
||||
ndev->pci_slot,
|
||||
ndev->pci_func);
|
||||
if (!spi_new_device(master, &netup_spi_board)) {
|
||||
spi_unregister_master(master);
|
||||
ndev->spi = NULL;
|
||||
dev_err(&ndev->pci_dev->dev,
|
||||
"%s(): unable to create SPI device\n", __func__);
|
||||
@ -235,13 +236,13 @@ void netup_spi_release(struct netup_unidvb_dev *ndev)
|
||||
if (!spi)
|
||||
return;
|
||||
|
||||
spi_unregister_master(spi->master);
|
||||
spin_lock_irqsave(&spi->lock, flags);
|
||||
reg = readw(&spi->regs->control_stat);
|
||||
writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat);
|
||||
reg = readw(&spi->regs->control_stat);
|
||||
writew(reg & ~NETUP_SPI_CTRL_IMASK, &spi->regs->control_stat);
|
||||
spin_unlock_irqrestore(&spi->lock, flags);
|
||||
spi_unregister_master(spi->master);
|
||||
ndev->spi = NULL;
|
||||
}
|
||||
|
||||
|
@ -652,16 +652,17 @@ static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *
|
||||
struct mxb *mxb = (struct mxb *)dev->ext_priv;
|
||||
|
||||
DEB_D("VIDIOC_S_AUDIO %d\n", a->index);
|
||||
if (mxb_inputs[mxb->cur_input].audioset & (1 << a->index)) {
|
||||
if (mxb->cur_audinput != a->index) {
|
||||
mxb->cur_audinput = a->index;
|
||||
tea6420_route(mxb, a->index);
|
||||
if (mxb->cur_audinput == 0)
|
||||
mxb_update_audmode(mxb);
|
||||
}
|
||||
return 0;
|
||||
if (a->index >= 32 ||
|
||||
!(mxb_inputs[mxb->cur_input].audioset & (1 << a->index)))
|
||||
return -EINVAL;
|
||||
|
||||
if (mxb->cur_audinput != a->index) {
|
||||
mxb->cur_audinput = a->index;
|
||||
tea6420_route(mxb, a->index);
|
||||
if (mxb->cur_audinput == 0)
|
||||
mxb_update_audmode(mxb);
|
||||
}
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
|
@ -401,7 +401,7 @@ int solo_g723_init(struct solo_dev *solo_dev)
|
||||
|
||||
ret = snd_ctl_add(card, snd_ctl_new1(&kctl, solo_dev));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto snd_error;
|
||||
|
||||
ret = solo_snd_pcm_init(solo_dev);
|
||||
if (ret < 0)
|
||||
|
@ -103,6 +103,7 @@ int mtk_vcodec_init_dec_pm(struct mtk_vcodec_dev *mtkdev)
|
||||
void mtk_vcodec_release_dec_pm(struct mtk_vcodec_dev *dev)
|
||||
{
|
||||
pm_runtime_disable(dev->pm.dev);
|
||||
put_device(dev->pm.larbvdec);
|
||||
}
|
||||
|
||||
void mtk_vcodec_dec_pw_on(struct mtk_vcodec_pm *pm)
|
||||
|
@ -132,6 +132,8 @@ static irqreturn_t sunxi_ir_irq(int irqno, void *dev_id)
|
||||
} else if (status & REG_RXINT_RPEI_EN) {
|
||||
ir_raw_event_set_idle(ir->rc, true);
|
||||
ir_raw_event_handle(ir->rc);
|
||||
} else {
|
||||
ir_raw_event_handle(ir->rc);
|
||||
}
|
||||
|
||||
spin_unlock(&ir->ir_lock);
|
||||
|
@ -2140,6 +2140,7 @@ out:
|
||||
input_unregister_device(gspca_dev->input_dev);
|
||||
#endif
|
||||
v4l2_ctrl_handler_free(gspca_dev->vdev.ctrl_handler);
|
||||
v4l2_device_unregister(&gspca_dev->v4l2_dev);
|
||||
kfree(gspca_dev->usb_buf);
|
||||
kfree(gspca_dev);
|
||||
return ret;
|
||||
|
@ -1250,7 +1250,7 @@ static int msi2500_probe(struct usb_interface *intf,
|
||||
}
|
||||
|
||||
dev->master = master;
|
||||
master->bus_num = 0;
|
||||
master->bus_num = -1;
|
||||
master->num_chipselect = 1;
|
||||
master->transfer_one_message = msi2500_transfer_one_message;
|
||||
spi_master_set_devdata(master, dev);
|
||||
|
@ -469,7 +469,6 @@ static void memstick_check(struct work_struct *work)
|
||||
host->card = card;
|
||||
if (device_register(&card->dev)) {
|
||||
put_device(&card->dev);
|
||||
kfree(host->card);
|
||||
host->card = NULL;
|
||||
}
|
||||
} else
|
||||
|
@ -762,8 +762,10 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
goto error3;
|
||||
|
||||
dev->mmio = pci_ioremap_bar(pdev, 0);
|
||||
if (!dev->mmio)
|
||||
if (!dev->mmio) {
|
||||
error = -ENOMEM;
|
||||
goto error4;
|
||||
}
|
||||
|
||||
dev->irq = pdev->irq;
|
||||
spin_lock_init(&dev->irq_lock);
|
||||
@ -790,12 +792,14 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
&dev->dummy_dma_page_physical_address, GFP_KERNEL);
|
||||
r592_stop_dma(dev , 0);
|
||||
|
||||
if (request_irq(dev->irq, &r592_irq, IRQF_SHARED,
|
||||
DRV_NAME, dev))
|
||||
error = request_irq(dev->irq, &r592_irq, IRQF_SHARED,
|
||||
DRV_NAME, dev);
|
||||
if (error)
|
||||
goto error6;
|
||||
|
||||
r592_update_card_detect(dev);
|
||||
if (memstick_add_host(host))
|
||||
error = memstick_add_host(host);
|
||||
if (error)
|
||||
goto error7;
|
||||
|
||||
message("driver successfully loaded");
|
||||
|
@ -228,7 +228,7 @@ static int mtdpart_setup_real(char *s)
|
||||
struct cmdline_mtd_partition *this_mtd;
|
||||
struct mtd_partition *parts;
|
||||
int mtd_id_len, num_parts;
|
||||
char *p, *mtd_id, *semicol;
|
||||
char *p, *mtd_id, *semicol, *open_parenth;
|
||||
|
||||
/*
|
||||
* Replace the first ';' by a NULL char so strrchr can work
|
||||
@ -238,6 +238,14 @@ static int mtdpart_setup_real(char *s)
|
||||
if (semicol)
|
||||
*semicol = '\0';
|
||||
|
||||
/*
|
||||
* make sure that part-names with ":" will not be handled as
|
||||
* part of the mtd-id with an ":"
|
||||
*/
|
||||
open_parenth = strchr(s, '(');
|
||||
if (open_parenth)
|
||||
*open_parenth = '\0';
|
||||
|
||||
mtd_id = s;
|
||||
|
||||
/*
|
||||
@ -247,6 +255,10 @@ static int mtdpart_setup_real(char *s)
|
||||
*/
|
||||
p = strrchr(s, ':');
|
||||
|
||||
/* Restore the '(' now. */
|
||||
if (open_parenth)
|
||||
*open_parenth = '(';
|
||||
|
||||
/* Restore the ';' now. */
|
||||
if (semicol)
|
||||
*semicol = ';';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user