aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/ac.c17
-rw-r--r--drivers/acpi/acpica/hwsleep.c22
-rw-r--r--drivers/acpi/acpica/nspredef.c2
-rw-r--r--drivers/acpi/battery.c15
-rw-r--r--drivers/acpi/button.c9
-rw-r--r--drivers/acpi/fan.c21
-rw-r--r--drivers/acpi/power.c12
-rw-r--r--drivers/acpi/processor_core.c6
-rw-r--r--drivers/acpi/processor_driver.c13
-rw-r--r--drivers/acpi/processor_idle.c43
-rw-r--r--drivers/acpi/sbs.c10
-rw-r--r--drivers/acpi/scan.c22
-rw-r--r--drivers/acpi/thermal.c17
-rw-r--r--drivers/base/dd.c2
-rw-r--r--drivers/base/devtmpfs.c98
-rw-r--r--drivers/base/power/domain.c342
-rw-r--r--drivers/base/power/main.c26
-rw-r--r--drivers/base/power/qos.c2
-rw-r--r--drivers/base/power/sysfs.c4
-rw-r--r--drivers/base/regmap/internal.h17
-rw-r--r--drivers/base/regmap/regmap-irq.c57
-rw-r--r--drivers/base/regmap/regmap-mmio.c30
-rw-r--r--drivers/base/regmap/regmap.c344
-rw-r--r--drivers/block/drbd/drbd_bitmap.c11
-rw-r--r--drivers/block/drbd/drbd_req.c66
-rw-r--r--drivers/block/floppy.c1
-rw-r--r--drivers/block/loop.c8
-rw-r--r--drivers/block/mg_disk.c13
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c166
-rw-r--r--drivers/block/mtip32xx/mtip32xx.h5
-rw-r--r--drivers/block/rbd.c4
-rw-r--r--drivers/block/umem.c40
-rw-r--r--drivers/block/xen-blkback/common.h2
-rw-r--r--drivers/block/xen-blkfront.c58
-rw-r--r--drivers/char/hw_random/omap-rng.c13
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c16
-rw-r--r--drivers/char/sonypi.c13
-rw-r--r--drivers/char/tpm/tpm.c2
-rw-r--r--drivers/char/tpm/tpm.h2
-rw-r--r--drivers/char/tpm/tpm_atmel.c12
-rw-r--r--drivers/char/tpm/tpm_nsc.c13
-rw-r--r--drivers/char/tpm/tpm_tis.c18
-rw-r--r--drivers/clk/clk.c28
-rw-r--r--drivers/clk/spear/spear1310_clock.c312
-rw-r--r--drivers/clk/spear/spear1340_clock.c279
-rw-r--r--drivers/clk/spear/spear3xx_clock.c180
-rw-r--r--drivers/clk/spear/spear6xx_clock.c122
-rw-r--r--drivers/cpufreq/cpufreq.c35
-rw-r--r--drivers/cpufreq/exynos-cpufreq.c14
-rw-r--r--drivers/cpuidle/cpuidle.c18
-rw-r--r--drivers/cpuidle/driver.c29
-rw-r--r--drivers/cpuidle/governors/menu.c6
-rw-r--r--drivers/cpuidle/sysfs.c21
-rw-r--r--drivers/crypto/ux500/cryp/cryp_core.c39
-rw-r--r--drivers/crypto/ux500/hash/hash_core.c33
-rw-r--r--drivers/gpio/Kconfig2
-rw-r--r--drivers/gpio/devres.c1
-rw-r--r--drivers/gpio/gpio-mxc.c10
-rw-r--r--drivers/gpio/gpio-omap.c14
-rw-r--r--drivers/gpio/gpio-sta2x11.c5
-rw-r--r--drivers/gpio/gpio-tps65910.c3
-rw-r--r--drivers/gpio/gpio-wm8994.c5
-rw-r--r--drivers/gpu/drm/drm_edid.c27
-rw-r--r--drivers/gpu/drm/gma500/cdv_device.c35
-rw-r--r--drivers/gpu/drm/gma500/opregion.c8
-rw-r--r--drivers/gpu/drm/gma500/opregion.h5
-rw-r--r--drivers/gpu/drm/gma500/psb_device.c12
-rw-r--r--drivers/gpu/drm/gma500/psb_drv.c1
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c37
-rw-r--r--drivers/gpu/drm/radeon/radeon_gart.c13
-rw-r--r--drivers/gpu/drm/radeon/radeon_gem.c10
-rw-r--r--drivers/gpu/drm/radeon/si.c4
-rw-r--r--drivers/hid/Kconfig1
-rw-r--r--drivers/hid/hid-apple.c6
-rw-r--r--drivers/hid/hid-core.c7
-rw-r--r--drivers/hid/hid-ids.h12
-rw-r--r--drivers/hid/hid-input.c3
-rw-r--r--drivers/hid/hid-multitouch.c5
-rw-r--r--drivers/hid/usbhid/hid-quirks.c1
-rw-r--r--drivers/hwmon/acpi_power_meter.c13
-rw-r--r--drivers/hwmon/it87.c2
-rw-r--r--drivers/hwmon/k10temp.c5
-rw-r--r--drivers/hwspinlock/hwspinlock_core.c4
-rw-r--r--drivers/idle/intel_idle.c41
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ib.c12
-rw-r--r--drivers/infiniband/ulp/srpt/ib_srpt.c15
-rw-r--r--drivers/input/joystick/as5011.c5
-rw-r--r--drivers/input/joystick/xpad.c6
-rw-r--r--drivers/input/keyboard/mcs_touchkey.c3
-rw-r--r--drivers/input/keyboard/mpr121_touchkey.c2
-rw-r--r--drivers/input/keyboard/qt1070.c3
-rw-r--r--drivers/input/keyboard/tca6416-keypad.c3
-rw-r--r--drivers/input/keyboard/tca8418_keypad.c2
-rw-r--r--drivers/input/keyboard/tnetv107x-keypad.c8
-rw-r--r--drivers/input/misc/ad714x.c8
-rw-r--r--drivers/input/misc/dm355evm_keys.c3
-rw-r--r--drivers/input/mouse/bcm5974.c20
-rw-r--r--drivers/input/tablet/wacom_sys.c6
-rw-r--r--drivers/input/touchscreen/ad7879.c2
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c3
-rw-r--r--drivers/input/touchscreen/bu21013_ts.c3
-rw-r--r--drivers/input/touchscreen/cy8ctmg110_ts.c3
-rw-r--r--drivers/input/touchscreen/intel-mid-touch.c2
-rw-r--r--drivers/input/touchscreen/pixcir_i2c_ts.c2
-rw-r--r--drivers/input/touchscreen/tnetv107x-ts.c2
-rw-r--r--drivers/input/touchscreen/tsc2005.c3
-rw-r--r--drivers/iommu/amd_iommu.c11
-rw-r--r--drivers/iommu/amd_iommu_init.c6
-rw-r--r--drivers/iommu/amd_iommu_types.h2
-rw-r--r--drivers/iommu/dmar.c194
-rw-r--r--drivers/iommu/intel_irq_remapping.c20
-rw-r--r--drivers/iommu/irq_remapping.c5
-rw-r--r--drivers/iommu/irq_remapping.h2
-rw-r--r--drivers/iommu/tegra-smmu.c4
-rw-r--r--drivers/isdn/mISDN/stack.c4
-rw-r--r--drivers/leds/ledtrig-heartbeat.c16
-rw-r--r--drivers/md/dm-raid1.c3
-rw-r--r--drivers/md/dm-region-hash.c5
-rw-r--r--drivers/md/dm-thin.c13
-rw-r--r--drivers/md/md.c45
-rw-r--r--drivers/md/multipath.c3
-rw-r--r--drivers/md/persistent-data/dm-space-map-checker.c54
-rw-r--r--drivers/md/persistent-data/dm-space-map-disk.c11
-rw-r--r--drivers/md/persistent-data/dm-transaction-manager.c11
-rw-r--r--drivers/md/raid1.c26
-rw-r--r--drivers/md/raid10.c26
-rw-r--r--drivers/md/raid5.c67
-rw-r--r--drivers/media/dvb/dvb-core/dvbdev.c1
-rw-r--r--drivers/media/rc/winbond-cir.c4
-rw-r--r--drivers/media/video/cx231xx/cx231xx-audio.c4
-rw-r--r--drivers/media/video/cx231xx/cx231xx-vbi.c2
-rw-r--r--drivers/media/video/cx23885/cx23885-cards.c89
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c6
-rw-r--r--drivers/media/video/cx23885/cx23885-video.c9
-rw-r--r--drivers/media/video/cx23885/cx23885.h1
-rw-r--r--drivers/media/video/cx25821/cx25821-core.c3
-rw-r--r--drivers/media/video/cx25821/cx25821.h2
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c76
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c2
-rw-r--r--drivers/media/video/gspca/sn9c20x.c13
-rw-r--r--drivers/media/video/mx2_camera.c27
-rw-r--r--drivers/media/video/omap3isp/isppreview.c6
-rw-r--r--drivers/media/video/pms.c1
-rw-r--r--drivers/media/video/s5p-fimc/fimc-capture.c69
-rw-r--r--drivers/media/video/s5p-fimc/fimc-core.c19
-rw-r--r--drivers/media/video/s5p-fimc/fimc-lite.c73
-rw-r--r--drivers/media/video/s5p-fimc/fimc-mdevice.c48
-rw-r--r--drivers/media/video/s5p-fimc/fimc-mdevice.h2
-rw-r--r--drivers/media/video/s5p-mfc/s5p_mfc_dec.c1
-rw-r--r--drivers/media/video/s5p-mfc/s5p_mfc_enc.c1
-rw-r--r--drivers/media/video/smiapp/smiapp-core.c1
-rw-r--r--drivers/media/video/v4l2-dev.c1
-rw-r--r--drivers/media/video/zoran/zoran.h4
-rw-r--r--drivers/media/video/zoran/zoran_driver.c4
-rw-r--r--drivers/mfd/Kconfig1
-rw-r--r--drivers/mfd/ab5500-core.h87
-rw-r--r--drivers/mfd/mc13xxx-spi.c67
-rw-r--r--drivers/mfd/omap-usb-host.c48
-rw-r--r--drivers/mfd/palmas.c13
-rw-r--r--drivers/mfd/tps65217.c67
-rw-r--r--drivers/misc/mei/main.c2
-rw-r--r--drivers/misc/sgi-xp/xpc_uv.c4
-rw-r--r--drivers/mmc/card/block.c36
-rw-r--r--drivers/mmc/core/Makefile2
-rw-r--r--drivers/mmc/core/cd-gpio.c83
-rw-r--r--drivers/mmc/core/core.c90
-rw-r--r--drivers/mmc/core/host.c6
-rw-r--r--drivers/mmc/core/mmc.c21
-rw-r--r--drivers/mmc/core/mmc_ops.c1
-rw-r--r--drivers/mmc/core/sd.c171
-rw-r--r--drivers/mmc/core/sdio.c7
-rw-r--r--drivers/mmc/core/sdio_cis.c2
-rw-r--r--drivers/mmc/core/slot-gpio.c188
-rw-r--r--drivers/mmc/host/atmel-mci.c14
-rw-r--r--drivers/mmc/host/dw_mmc.c17
-rw-r--r--drivers/mmc/host/mxs-mmc.c26
-rw-r--r--drivers/mmc/host/omap_hsmmc.c16
-rw-r--r--drivers/mmc/host/s3cmci.c10
-rw-r--r--drivers/mmc/host/sdhci-dove.c51
-rw-r--r--drivers/mmc/host/sdhci-esdhc-imx.c9
-rw-r--r--drivers/mmc/host/sdhci-pci.c1
-rw-r--r--drivers/mmc/host/sdhci-pxav2.c54
-rw-r--r--drivers/mmc/host/sdhci-pxav3.c52
-rw-r--r--drivers/mmc/host/sdhci.c144
-rw-r--r--drivers/mmc/host/sdhci.h1
-rw-r--r--drivers/mmc/host/sh_mmcif.c185
-rw-r--r--drivers/mmc/host/sh_mobile_sdhi.c66
-rw-r--r--drivers/mmc/host/tmio_mmc_pio.c132
-rw-r--r--drivers/mtd/mtdsuper.c4
-rw-r--r--drivers/mtd/nand/cafe_nand.c2
-rw-r--r--drivers/mtd/nand/gpmi-nand/gpmi-nand.c10
-rw-r--r--drivers/mtd/nand/mxc_nand.c37
-rw-r--r--drivers/mtd/nand/nand_base.c7
-rw-r--r--drivers/mtd/nand/nandsim.c12
-rw-r--r--drivers/mtd/ubi/Kconfig2
-rw-r--r--drivers/mtd/ubi/cdev.c2
-rw-r--r--drivers/mtd/ubi/misc.c25
-rw-r--r--drivers/mtd/ubi/ubi.h1
-rw-r--r--drivers/mtd/ubi/vmt.c20
-rw-r--r--drivers/net/bonding/bond_debugfs.c2
-rw-r--r--drivers/net/bonding/bond_main.c9
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c1
-rw-r--r--drivers/net/ethernet/broadcom/b44.c4
-rw-r--r--drivers/net/ethernet/broadcom/bnx2.c6
-rw-r--r--drivers/net/ethernet/broadcom/cnic.c10
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c17
-rw-r--r--drivers/net/ethernet/intel/e1000e/82571.c3
-rw-r--r--drivers/net/ethernet/intel/e1000e/defines.h1
-rw-r--r--drivers/net/ethernet/intel/e1000e/ich8lan.c42
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c75
-rw-r--r--drivers/net/ethernet/intel/igbvf/ethtool.c29
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c5
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c15
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/ring_mode.c3
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_main.c3
-rw-r--r--drivers/net/ethernet/ti/davinci_cpdma.c1
-rw-r--r--drivers/net/phy/mdio-mux.c10
-rw-r--r--drivers/net/usb/qmi_wwan.c22
-rw-r--r--drivers/net/wireless/ath/ath.h1
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/recv.c7
-rw-r--r--drivers/net/wireless/ath/key.c4
-rw-r--r--drivers/net/wireless/b43legacy/dma.c2
-rw-r--r--drivers/net/wireless/iwlegacy/4965-mac.c4
-rw-r--r--drivers/net/wireless/iwlegacy/common.c14
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-mac80211.c12
-rw-r--r--drivers/net/wireless/mwifiex/11n_rxreorder.c5
-rw-r--r--drivers/net/wireless/mwifiex/11n_rxreorder.h7
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c1
-rw-r--r--drivers/net/wireless/mwifiex/ie.c1
-rw-r--r--drivers/net/wireless/mwifiex/sdio.c6
-rw-r--r--drivers/net/wireless/mwifiex/sta_event.c9
-rw-r--r--drivers/net/wireless/mwifiex/usb.c28
-rw-r--r--drivers/net/wireless/mwifiex/wmm.c3
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00usb.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/sw.c3
-rw-r--r--drivers/net/wireless/ti/wlcore/Kconfig1
-rw-r--r--drivers/of/platform.c8
-rw-r--r--drivers/oprofile/oprofile_perf.c23
-rw-r--r--drivers/pci/pci-driver.c12
-rw-r--r--drivers/pci/pci.c5
-rw-r--r--drivers/pci/quirks.c26
-rw-r--r--drivers/pinctrl/pinctrl-imx.c2
-rw-r--r--drivers/pinctrl/pinctrl-imx6q.c2
-rw-r--r--drivers/platform/x86/acer-wmi.c10
-rw-r--r--drivers/platform/x86/classmate-laptop.c13
-rw-r--r--drivers/platform/x86/fujitsu-tablet.c8
-rw-r--r--drivers/platform/x86/hdaps.c6
-rw-r--r--drivers/platform/x86/hp_accel.c15
-rw-r--r--drivers/platform/x86/ideapad-laptop.c6
-rw-r--r--drivers/platform/x86/intel_ips.c39
-rw-r--r--drivers/platform/x86/intel_mid_thermal.c16
-rw-r--r--drivers/platform/x86/msi-laptop.c7
-rw-r--r--drivers/platform/x86/panasonic-laptop.c16
-rw-r--r--drivers/platform/x86/sony-laptop.c156
-rw-r--r--drivers/platform/x86/thinkpad_acpi.c23
-rw-r--r--drivers/platform/x86/toshiba_acpi.c15
-rw-r--r--drivers/platform/x86/toshiba_bluetooth.c10
-rw-r--r--drivers/platform/x86/xo15-ebook.c8
-rw-r--r--drivers/regulator/Kconfig37
-rw-r--r--drivers/regulator/Makefile6
-rw-r--r--drivers/regulator/aat2870-regulator.c21
-rw-r--r--drivers/regulator/ab3100.c119
-rw-r--r--drivers/regulator/ab8500.c96
-rw-r--r--drivers/regulator/ad5398.c9
-rw-r--r--drivers/regulator/anatop-regulator.c42
-rw-r--r--drivers/regulator/arizona-ldo1.c138
-rw-r--r--drivers/regulator/arizona-micsupp.c188
-rw-r--r--drivers/regulator/core.c412
-rw-r--r--drivers/regulator/da903x.c6
-rw-r--r--drivers/regulator/da9052-regulator.c4
-rw-r--r--drivers/regulator/fixed-helper.c19
-rw-r--r--drivers/regulator/fixed.c163
-rw-r--r--drivers/regulator/gpio-regulator.c115
-rw-r--r--drivers/regulator/isl6271a-regulator.c13
-rw-r--r--drivers/regulator/lp3971.c66
-rw-r--r--drivers/regulator/lp3972.c102
-rw-r--r--drivers/regulator/lp872x.c943
-rw-r--r--drivers/regulator/lp8788-buck.c629
-rw-r--r--drivers/regulator/lp8788-ldo.c842
-rw-r--r--drivers/regulator/max1586.c108
-rw-r--r--drivers/regulator/max77686.c389
-rw-r--r--drivers/regulator/max8952.c60
-rw-r--r--drivers/regulator/max8997.c40
-rw-r--r--drivers/regulator/max8998.c133
-rw-r--r--drivers/regulator/mc13783-regulator.c38
-rw-r--r--drivers/regulator/mc13892-regulator.c43
-rw-r--r--drivers/regulator/mc13xxx-regulator-core.c36
-rw-r--r--drivers/regulator/mc13xxx.h11
-rw-r--r--drivers/regulator/of_regulator.c57
-rw-r--r--drivers/regulator/palmas-regulator.c59
-rw-r--r--drivers/regulator/pcap-regulator.c95
-rw-r--r--drivers/regulator/pcf50633-regulator.c20
-rw-r--r--drivers/regulator/rc5t583-regulator.c24
-rw-r--r--drivers/regulator/s2mps11.c363
-rw-r--r--drivers/regulator/s5m8767.c229
-rw-r--r--drivers/regulator/tps6105x-regulator.c14
-rw-r--r--drivers/regulator/tps62360-regulator.c57
-rw-r--r--drivers/regulator/tps65023-regulator.c201
-rw-r--r--drivers/regulator/tps6507x-regulator.c98
-rw-r--r--drivers/regulator/tps65217-regulator.c140
-rw-r--r--drivers/regulator/tps6524x-regulator.c94
-rw-r--r--drivers/regulator/tps6586x-regulator.c106
-rw-r--r--drivers/regulator/tps65910-regulator.c425
-rw-r--r--drivers/regulator/twl-regulator.c92
-rw-r--r--drivers/regulator/wm831x-dcdc.c78
-rw-r--r--drivers/regulator/wm831x-ldo.c131
-rw-r--r--drivers/regulator/wm8350-regulator.c426
-rw-r--r--drivers/regulator/wm8400-regulator.c25
-rw-r--r--drivers/regulator/wm8994-regulator.c93
-rw-r--r--drivers/remoteproc/Kconfig2
-rw-r--r--drivers/rpmsg/virtio_rpmsg_bus.c57
-rw-r--r--drivers/rtc/rtc-ab8500.c10
-rw-r--r--drivers/rtc/rtc-cmos.c1
-rw-r--r--drivers/rtc/rtc-mxc.c5
-rw-r--r--drivers/rtc/rtc-spear.c2
-rw-r--r--drivers/rtc/rtc-twl.c2
-rw-r--r--drivers/scsi/aic94xx/aic94xx_task.c2
-rw-r--r--drivers/scsi/bnx2i/bnx2i.h1
-rw-r--r--drivers/scsi/bnx2i/bnx2i_hwi.c3
-rw-r--r--drivers/scsi/bnx2i/bnx2i_iscsi.c10
-rw-r--r--drivers/scsi/libsas/sas_ata.c12
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c51
-rw-r--r--drivers/scsi/qla2xxx/qla_target.h3
-rw-r--r--drivers/scsi/qla2xxx/tcm_qla2xxx.c55
-rw-r--r--drivers/scsi/scsi_wait_scan.c5
-rw-r--r--drivers/target/Makefile3
-rw-r--r--drivers/target/iscsi/iscsi_target.c30
-rw-r--r--drivers/target/iscsi/iscsi_target_configfs.c22
-rw-r--r--drivers/target/iscsi/iscsi_target_core.h3
-rw-r--r--drivers/target/iscsi/iscsi_target_erl1.c4
-rw-r--r--drivers/target/iscsi/iscsi_target_login.c66
-rw-r--r--drivers/target/iscsi/iscsi_target_parameters.c2
-rw-r--r--drivers/target/iscsi/iscsi_target_tmr.c46
-rw-r--r--drivers/target/iscsi/iscsi_target_tpg.c27
-rw-r--r--drivers/target/loopback/tcm_loop.c11
-rw-r--r--drivers/target/sbp/sbp_target.c39
-rw-r--r--drivers/target/target_core_device.c170
-rw-r--r--drivers/target/target_core_fabric_configfs.c3
-rw-r--r--drivers/target/target_core_file.c25
-rw-r--r--drivers/target/target_core_iblock.c142
-rw-r--r--drivers/target/target_core_iblock.h1
-rw-r--r--drivers/target/target_core_internal.h22
-rw-r--r--drivers/target/target_core_pr.c13
-rw-r--r--drivers/target/target_core_pscsi.c84
-rw-r--r--drivers/target/target_core_rd.c17
-rw-r--r--drivers/target/target_core_sbc.c581
-rw-r--r--drivers/target/target_core_spc.c (renamed from drivers/target/target_core_cdb.c)434
-rw-r--r--drivers/target/target_core_tmr.c57
-rw-r--r--drivers/target/target_core_tpg.c14
-rw-r--r--drivers/target/target_core_transport.c2002
-rw-r--r--drivers/target/tcm_fc/tfc_cmd.c12
-rw-r--r--drivers/target/tcm_fc/tfc_io.c13
-rw-r--r--drivers/target/tcm_fc/tfc_sess.c3
-rw-r--r--drivers/tty/hvc/hvc_opal.c2
-rw-r--r--drivers/usb/class/cdc-wdm.c2
-rw-r--r--drivers/usb/core/hub.c18
-rw-r--r--drivers/usb/gadget/tcm_usb_gadget.c54
-rw-r--r--drivers/usb/host/ehci-omap.c18
-rw-r--r--drivers/usb/host/xhci-hub.c44
-rw-r--r--drivers/usb/host/xhci-ring.c11
-rw-r--r--drivers/usb/host/xhci.h6
-rw-r--r--drivers/usb/serial/metro-usb.c8
-rw-r--r--drivers/usb/serial/option.c26
-rw-r--r--drivers/video/omap2/dss/core.c43
-rw-r--r--drivers/video/omap2/dss/dispc.c2
-rw-r--r--drivers/video/omap2/dss/dsi.c2
-rw-r--r--drivers/video/omap2/dss/dss.c2
-rw-r--r--drivers/video/omap2/dss/hdmi.c2
-rw-r--r--drivers/video/omap2/dss/rfbi.c2
-rw-r--r--drivers/video/omap2/dss/venc.c2
-rw-r--r--drivers/virtio/virtio_balloon.c24
372 files changed, 11255 insertions, 7442 deletions
diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
index 6512b20aeccd..ff9f6bd48301 100644
--- a/drivers/acpi/ac.c
+++ b/drivers/acpi/ac.c
@@ -61,7 +61,6 @@ static int acpi_ac_open_fs(struct inode *inode, struct file *file);
61 61
62static int acpi_ac_add(struct acpi_device *device); 62static int acpi_ac_add(struct acpi_device *device);
63static int acpi_ac_remove(struct acpi_device *device, int type); 63static int acpi_ac_remove(struct acpi_device *device, int type);
64static int acpi_ac_resume(struct acpi_device *device);
65static void acpi_ac_notify(struct acpi_device *device, u32 event); 64static void acpi_ac_notify(struct acpi_device *device, u32 event);
66 65
67static const struct acpi_device_id ac_device_ids[] = { 66static const struct acpi_device_id ac_device_ids[] = {
@@ -70,6 +69,9 @@ static const struct acpi_device_id ac_device_ids[] = {
70}; 69};
71MODULE_DEVICE_TABLE(acpi, ac_device_ids); 70MODULE_DEVICE_TABLE(acpi, ac_device_ids);
72 71
72static int acpi_ac_resume(struct device *dev);
73static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
74
73static struct acpi_driver acpi_ac_driver = { 75static struct acpi_driver acpi_ac_driver = {
74 .name = "ac", 76 .name = "ac",
75 .class = ACPI_AC_CLASS, 77 .class = ACPI_AC_CLASS,
@@ -78,9 +80,9 @@ static struct acpi_driver acpi_ac_driver = {
78 .ops = { 80 .ops = {
79 .add = acpi_ac_add, 81 .add = acpi_ac_add,
80 .remove = acpi_ac_remove, 82 .remove = acpi_ac_remove,
81 .resume = acpi_ac_resume,
82 .notify = acpi_ac_notify, 83 .notify = acpi_ac_notify,
83 }, 84 },
85 .drv.pm = &acpi_ac_pm,
84}; 86};
85 87
86struct acpi_ac { 88struct acpi_ac {
@@ -309,13 +311,18 @@ static int acpi_ac_add(struct acpi_device *device)
309 return result; 311 return result;
310} 312}
311 313
312static int acpi_ac_resume(struct acpi_device *device) 314static int acpi_ac_resume(struct device *dev)
313{ 315{
314 struct acpi_ac *ac; 316 struct acpi_ac *ac;
315 unsigned old_state; 317 unsigned old_state;
316 if (!device || !acpi_driver_data(device)) 318
319 if (!dev)
317 return -EINVAL; 320 return -EINVAL;
318 ac = acpi_driver_data(device); 321
322 ac = acpi_driver_data(to_acpi_device(dev));
323 if (!ac)
324 return -EINVAL;
325
319 old_state = ac->state; 326 old_state = ac->state;
320 if (acpi_ac_get_state(ac)) 327 if (acpi_ac_get_state(ac))
321 return 0; 328 return 0;
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
index 0ed85cac3231..615996a36bed 100644
--- a/drivers/acpi/acpica/hwsleep.c
+++ b/drivers/acpi/acpica/hwsleep.c
@@ -95,18 +95,6 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags)
95 return_ACPI_STATUS(status); 95 return_ACPI_STATUS(status);
96 } 96 }
97 97
98 if (sleep_state != ACPI_STATE_S5) {
99 /*
100 * Disable BM arbitration. This feature is contained within an
101 * optional register (PM2 Control), so ignore a BAD_ADDRESS
102 * exception.
103 */
104 status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1);
105 if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
106 return_ACPI_STATUS(status);
107 }
108 }
109
110 /* 98 /*
111 * 1) Disable/Clear all GPEs 99 * 1) Disable/Clear all GPEs
112 * 2) Enable all wakeup GPEs 100 * 2) Enable all wakeup GPEs
@@ -364,16 +352,6 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags)
364 [ACPI_EVENT_POWER_BUTTON]. 352 [ACPI_EVENT_POWER_BUTTON].
365 status_register_id, ACPI_CLEAR_STATUS); 353 status_register_id, ACPI_CLEAR_STATUS);
366 354
367 /*
368 * Enable BM arbitration. This feature is contained within an
369 * optional register (PM2 Control), so ignore a BAD_ADDRESS
370 * exception.
371 */
372 status = acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0);
373 if (ACPI_FAILURE(status) && (status != AE_BAD_ADDRESS)) {
374 return_ACPI_STATUS(status);
375 }
376
377 acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST, ACPI_SST_WORKING); 355 acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST, ACPI_SST_WORKING);
378 return_ACPI_STATUS(status); 356 return_ACPI_STATUS(status);
379} 357}
diff --git a/drivers/acpi/acpica/nspredef.c b/drivers/acpi/acpica/nspredef.c
index 23ce09686418..fe6626035495 100644
--- a/drivers/acpi/acpica/nspredef.c
+++ b/drivers/acpi/acpica/nspredef.c
@@ -638,7 +638,7 @@ acpi_ns_check_package(struct acpi_predefined_data *data,
638 /* Create the new outer package and populate it */ 638 /* Create the new outer package and populate it */
639 639
640 status = 640 status =
641 acpi_ns_wrap_with_package(data, *elements, 641 acpi_ns_wrap_with_package(data, return_object,
642 return_object_ptr); 642 return_object_ptr);
643 if (ACPI_FAILURE(status)) { 643 if (ACPI_FAILURE(status)) {
644 return (status); 644 return (status);
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 7dd3f9fb9f3f..023f9c8534d0 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -1044,17 +1044,24 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
1044} 1044}
1045 1045
1046/* this is needed to learn about changes made in suspended state */ 1046/* this is needed to learn about changes made in suspended state */
1047static int acpi_battery_resume(struct acpi_device *device) 1047static int acpi_battery_resume(struct device *dev)
1048{ 1048{
1049 struct acpi_battery *battery; 1049 struct acpi_battery *battery;
1050 if (!device) 1050
1051 if (!dev)
1051 return -EINVAL; 1052 return -EINVAL;
1052 battery = acpi_driver_data(device); 1053
1054 battery = acpi_driver_data(to_acpi_device(dev));
1055 if (!battery)
1056 return -EINVAL;
1057
1053 battery->update_time = 0; 1058 battery->update_time = 0;
1054 acpi_battery_update(battery); 1059 acpi_battery_update(battery);
1055 return 0; 1060 return 0;
1056} 1061}
1057 1062
1063static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
1064
1058static struct acpi_driver acpi_battery_driver = { 1065static struct acpi_driver acpi_battery_driver = {
1059 .name = "battery", 1066 .name = "battery",
1060 .class = ACPI_BATTERY_CLASS, 1067 .class = ACPI_BATTERY_CLASS,
@@ -1062,10 +1069,10 @@ static struct acpi_driver acpi_battery_driver = {
1062 .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, 1069 .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
1063 .ops = { 1070 .ops = {
1064 .add = acpi_battery_add, 1071 .add = acpi_battery_add,
1065 .resume = acpi_battery_resume,
1066 .remove = acpi_battery_remove, 1072 .remove = acpi_battery_remove,
1067 .notify = acpi_battery_notify, 1073 .notify = acpi_battery_notify,
1068 }, 1074 },
1075 .drv.pm = &acpi_battery_pm,
1069}; 1076};
1070 1077
1071static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie) 1078static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index d27d072472f9..79d4c22f7a6d 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -76,19 +76,21 @@ MODULE_DEVICE_TABLE(acpi, button_device_ids);
76 76
77static int acpi_button_add(struct acpi_device *device); 77static int acpi_button_add(struct acpi_device *device);
78static int acpi_button_remove(struct acpi_device *device, int type); 78static int acpi_button_remove(struct acpi_device *device, int type);
79static int acpi_button_resume(struct acpi_device *device);
80static void acpi_button_notify(struct acpi_device *device, u32 event); 79static void acpi_button_notify(struct acpi_device *device, u32 event);
81 80
81static int acpi_button_resume(struct device *dev);
82static SIMPLE_DEV_PM_OPS(acpi_button_pm, NULL, acpi_button_resume);
83
82static struct acpi_driver acpi_button_driver = { 84static struct acpi_driver acpi_button_driver = {
83 .name = "button", 85 .name = "button",
84 .class = ACPI_BUTTON_CLASS, 86 .class = ACPI_BUTTON_CLASS,
85 .ids = button_device_ids, 87 .ids = button_device_ids,
86 .ops = { 88 .ops = {
87 .add = acpi_button_add, 89 .add = acpi_button_add,
88 .resume = acpi_button_resume,
89 .remove = acpi_button_remove, 90 .remove = acpi_button_remove,
90 .notify = acpi_button_notify, 91 .notify = acpi_button_notify,
91 }, 92 },
93 .drv.pm = &acpi_button_pm,
92}; 94};
93 95
94struct acpi_button { 96struct acpi_button {
@@ -308,8 +310,9 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
308 } 310 }
309} 311}
310 312
311static int acpi_button_resume(struct acpi_device *device) 313static int acpi_button_resume(struct device *dev)
312{ 314{
315 struct acpi_device *device = to_acpi_device(dev);
313 struct acpi_button *button = acpi_driver_data(device); 316 struct acpi_button *button = acpi_driver_data(device);
314 317
315 if (button->type == ACPI_BUTTON_TYPE_LID) 318 if (button->type == ACPI_BUTTON_TYPE_LID)
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c
index 0f0356ca1a9e..669d9ee80d16 100644
--- a/drivers/acpi/fan.c
+++ b/drivers/acpi/fan.c
@@ -46,8 +46,6 @@ MODULE_LICENSE("GPL");
46 46
47static int acpi_fan_add(struct acpi_device *device); 47static int acpi_fan_add(struct acpi_device *device);
48static int acpi_fan_remove(struct acpi_device *device, int type); 48static int acpi_fan_remove(struct acpi_device *device, int type);
49static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state);
50static int acpi_fan_resume(struct acpi_device *device);
51 49
52static const struct acpi_device_id fan_device_ids[] = { 50static const struct acpi_device_id fan_device_ids[] = {
53 {"PNP0C0B", 0}, 51 {"PNP0C0B", 0},
@@ -55,6 +53,10 @@ static const struct acpi_device_id fan_device_ids[] = {
55}; 53};
56MODULE_DEVICE_TABLE(acpi, fan_device_ids); 54MODULE_DEVICE_TABLE(acpi, fan_device_ids);
57 55
56static int acpi_fan_suspend(struct device *dev);
57static int acpi_fan_resume(struct device *dev);
58static SIMPLE_DEV_PM_OPS(acpi_fan_pm, acpi_fan_suspend, acpi_fan_resume);
59
58static struct acpi_driver acpi_fan_driver = { 60static struct acpi_driver acpi_fan_driver = {
59 .name = "fan", 61 .name = "fan",
60 .class = ACPI_FAN_CLASS, 62 .class = ACPI_FAN_CLASS,
@@ -62,9 +64,8 @@ static struct acpi_driver acpi_fan_driver = {
62 .ops = { 64 .ops = {
63 .add = acpi_fan_add, 65 .add = acpi_fan_add,
64 .remove = acpi_fan_remove, 66 .remove = acpi_fan_remove,
65 .suspend = acpi_fan_suspend,
66 .resume = acpi_fan_resume,
67 }, 67 },
68 .drv.pm = &acpi_fan_pm,
68}; 69};
69 70
70/* thermal cooling device callbacks */ 71/* thermal cooling device callbacks */
@@ -183,24 +184,24 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
183 return 0; 184 return 0;
184} 185}
185 186
186static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state) 187static int acpi_fan_suspend(struct device *dev)
187{ 188{
188 if (!device) 189 if (!dev)
189 return -EINVAL; 190 return -EINVAL;
190 191
191 acpi_bus_set_power(device->handle, ACPI_STATE_D0); 192 acpi_bus_set_power(to_acpi_device(dev)->handle, ACPI_STATE_D0);
192 193
193 return AE_OK; 194 return AE_OK;
194} 195}
195 196
196static int acpi_fan_resume(struct acpi_device *device) 197static int acpi_fan_resume(struct device *dev)
197{ 198{
198 int result; 199 int result;
199 200
200 if (!device) 201 if (!dev)
201 return -EINVAL; 202 return -EINVAL;
202 203
203 result = acpi_bus_update_power(device->handle, NULL); 204 result = acpi_bus_update_power(to_acpi_device(dev)->handle, NULL);
204 if (result) 205 if (result)
205 printk(KERN_ERR PREFIX "Error updating fan power state\n"); 206 printk(KERN_ERR PREFIX "Error updating fan power state\n");
206 207
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
index dd6d6a3c6780..894d45c6bc67 100644
--- a/drivers/acpi/power.c
+++ b/drivers/acpi/power.c
@@ -60,7 +60,6 @@ ACPI_MODULE_NAME("power");
60 60
61static int acpi_power_add(struct acpi_device *device); 61static int acpi_power_add(struct acpi_device *device);
62static int acpi_power_remove(struct acpi_device *device, int type); 62static int acpi_power_remove(struct acpi_device *device, int type);
63static int acpi_power_resume(struct acpi_device *device);
64 63
65static const struct acpi_device_id power_device_ids[] = { 64static const struct acpi_device_id power_device_ids[] = {
66 {ACPI_POWER_HID, 0}, 65 {ACPI_POWER_HID, 0},
@@ -68,6 +67,9 @@ static const struct acpi_device_id power_device_ids[] = {
68}; 67};
69MODULE_DEVICE_TABLE(acpi, power_device_ids); 68MODULE_DEVICE_TABLE(acpi, power_device_ids);
70 69
70static int acpi_power_resume(struct device *dev);
71static SIMPLE_DEV_PM_OPS(acpi_power_pm, NULL, acpi_power_resume);
72
71static struct acpi_driver acpi_power_driver = { 73static struct acpi_driver acpi_power_driver = {
72 .name = "power", 74 .name = "power",
73 .class = ACPI_POWER_CLASS, 75 .class = ACPI_POWER_CLASS,
@@ -75,8 +77,8 @@ static struct acpi_driver acpi_power_driver = {
75 .ops = { 77 .ops = {
76 .add = acpi_power_add, 78 .add = acpi_power_add,
77 .remove = acpi_power_remove, 79 .remove = acpi_power_remove,
78 .resume = acpi_power_resume,
79 }, 80 },
81 .drv.pm = &acpi_power_pm,
80}; 82};
81 83
82/* 84/*
@@ -771,14 +773,16 @@ static int acpi_power_remove(struct acpi_device *device, int type)
771 return 0; 773 return 0;
772} 774}
773 775
774static int acpi_power_resume(struct acpi_device *device) 776static int acpi_power_resume(struct device *dev)
775{ 777{
776 int result = 0, state; 778 int result = 0, state;
779 struct acpi_device *device;
777 struct acpi_power_resource *resource; 780 struct acpi_power_resource *resource;
778 781
779 if (!device) 782 if (!dev)
780 return -EINVAL; 783 return -EINVAL;
781 784
785 device = to_acpi_device(dev);
782 resource = acpi_driver_data(device); 786 resource = acpi_driver_data(device);
783 if (!resource) 787 if (!resource)
784 return -EINVAL; 788 return -EINVAL;
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index c850de4c9a14..eff722278ff5 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -189,10 +189,12 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)
189 * Processor (CPU3, 0x03, 0x00000410, 0x06) {} 189 * Processor (CPU3, 0x03, 0x00000410, 0x06) {}
190 * } 190 * }
191 * 191 *
192 * Ignores apic_id and always return 0 for CPU0's handle. 192 * Ignores apic_id and always returns 0 for the processor
193 * handle with acpi id 0 if nr_cpu_ids is 1.
194 * This should be the case if SMP tables are not found.
193 * Return -1 for other CPU's handle. 195 * Return -1 for other CPU's handle.
194 */ 196 */
195 if (acpi_id == 0) 197 if (nr_cpu_ids <= 1 && acpi_id == 0)
196 return acpi_id; 198 return acpi_id;
197 else 199 else
198 return apic_id; 200 return apic_id;
diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c
index 0734086537b8..7048b97853e0 100644
--- a/drivers/acpi/processor_driver.c
+++ b/drivers/acpi/processor_driver.c
@@ -93,6 +93,9 @@ static const struct acpi_device_id processor_device_ids[] = {
93}; 93};
94MODULE_DEVICE_TABLE(acpi, processor_device_ids); 94MODULE_DEVICE_TABLE(acpi, processor_device_ids);
95 95
96static SIMPLE_DEV_PM_OPS(acpi_processor_pm,
97 acpi_processor_suspend, acpi_processor_resume);
98
96static struct acpi_driver acpi_processor_driver = { 99static struct acpi_driver acpi_processor_driver = {
97 .name = "processor", 100 .name = "processor",
98 .class = ACPI_PROCESSOR_CLASS, 101 .class = ACPI_PROCESSOR_CLASS,
@@ -100,10 +103,9 @@ static struct acpi_driver acpi_processor_driver = {
100 .ops = { 103 .ops = {
101 .add = acpi_processor_add, 104 .add = acpi_processor_add,
102 .remove = acpi_processor_remove, 105 .remove = acpi_processor_remove,
103 .suspend = acpi_processor_suspend,
104 .resume = acpi_processor_resume,
105 .notify = acpi_processor_notify, 106 .notify = acpi_processor_notify,
106 }, 107 },
108 .drv.pm = &acpi_processor_pm,
107}; 109};
108 110
109#define INSTALL_NOTIFY_HANDLER 1 111#define INSTALL_NOTIFY_HANDLER 1
@@ -427,18 +429,11 @@ static int acpi_cpu_soft_notify(struct notifier_block *nfb,
427 * Initialize missing things 429 * Initialize missing things
428 */ 430 */
429 if (pr->flags.need_hotplug_init) { 431 if (pr->flags.need_hotplug_init) {
430 struct cpuidle_driver *idle_driver =
431 cpuidle_get_driver();
432
433 printk(KERN_INFO "Will online and init hotplugged " 432 printk(KERN_INFO "Will online and init hotplugged "
434 "CPU: %d\n", pr->id); 433 "CPU: %d\n", pr->id);
435 WARN(acpi_processor_start(pr), "Failed to start CPU:" 434 WARN(acpi_processor_start(pr), "Failed to start CPU:"
436 " %d\n", pr->id); 435 " %d\n", pr->id);
437 pr->flags.need_hotplug_init = 0; 436 pr->flags.need_hotplug_init = 0;
438 if (idle_driver && !strcmp(idle_driver->name,
439 "intel_idle")) {
440 intel_idle_cpu_init(pr->id);
441 }
442 /* Normal CPU soft online event */ 437 /* Normal CPU soft online event */
443 } else { 438 } else {
444 acpi_processor_ppc_has_changed(pr, 0); 439 acpi_processor_ppc_has_changed(pr, 0);
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 47a8caa89dbe..e589c1985248 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -221,10 +221,6 @@ static void lapic_timer_state_broadcast(struct acpi_processor *pr,
221 221
222#endif 222#endif
223 223
224/*
225 * Suspend / resume control
226 */
227static int acpi_idle_suspend;
228static u32 saved_bm_rld; 224static u32 saved_bm_rld;
229 225
230static void acpi_idle_bm_rld_save(void) 226static void acpi_idle_bm_rld_save(void)
@@ -241,23 +237,15 @@ static void acpi_idle_bm_rld_restore(void)
241 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld); 237 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld);
242} 238}
243 239
244int acpi_processor_suspend(struct acpi_device * device, pm_message_t state) 240int acpi_processor_suspend(struct device *dev)
245{ 241{
246 if (acpi_idle_suspend == 1)
247 return 0;
248
249 acpi_idle_bm_rld_save(); 242 acpi_idle_bm_rld_save();
250 acpi_idle_suspend = 1;
251 return 0; 243 return 0;
252} 244}
253 245
254int acpi_processor_resume(struct acpi_device * device) 246int acpi_processor_resume(struct device *dev)
255{ 247{
256 if (acpi_idle_suspend == 0)
257 return 0;
258
259 acpi_idle_bm_rld_restore(); 248 acpi_idle_bm_rld_restore();
260 acpi_idle_suspend = 0;
261 return 0; 249 return 0;
262} 250}
263 251
@@ -595,7 +583,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
595 */ 583 */
596 cx->valid = 1; 584 cx->valid = 1;
597 585
598 cx->latency_ticks = cx->latency;
599 /* 586 /*
600 * On older chipsets, BM_RLD needs to be set 587 * On older chipsets, BM_RLD needs to be set
601 * in order for Bus Master activity to wake the 588 * in order for Bus Master activity to wake the
@@ -628,7 +615,6 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
628 if (!cx->address) 615 if (!cx->address)
629 break; 616 break;
630 cx->valid = 1; 617 cx->valid = 1;
631 cx->latency_ticks = cx->latency; /* Normalize latency */
632 break; 618 break;
633 619
634 case ACPI_STATE_C3: 620 case ACPI_STATE_C3:
@@ -763,11 +749,6 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
763 749
764 local_irq_disable(); 750 local_irq_disable();
765 751
766 if (acpi_idle_suspend) {
767 local_irq_enable();
768 cpu_relax();
769 return -EBUSY;
770 }
771 752
772 lapic_timer_state_broadcast(pr, cx, 1); 753 lapic_timer_state_broadcast(pr, cx, 1);
773 kt1 = ktime_get_real(); 754 kt1 = ktime_get_real();
@@ -779,7 +760,6 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
779 dev->last_residency = (int)idle_time; 760 dev->last_residency = (int)idle_time;
780 761
781 local_irq_enable(); 762 local_irq_enable();
782 cx->usage++;
783 lapic_timer_state_broadcast(pr, cx, 0); 763 lapic_timer_state_broadcast(pr, cx, 0);
784 764
785 return index; 765 return index;
@@ -838,11 +818,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
838 818
839 local_irq_disable(); 819 local_irq_disable();
840 820
841 if (acpi_idle_suspend) {
842 local_irq_enable();
843 cpu_relax();
844 return -EBUSY;
845 }
846 821
847 if (cx->entry_method != ACPI_CSTATE_FFH) { 822 if (cx->entry_method != ACPI_CSTATE_FFH) {
848 current_thread_info()->status &= ~TS_POLLING; 823 current_thread_info()->status &= ~TS_POLLING;
@@ -887,10 +862,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
887 if (cx->entry_method != ACPI_CSTATE_FFH) 862 if (cx->entry_method != ACPI_CSTATE_FFH)
888 current_thread_info()->status |= TS_POLLING; 863 current_thread_info()->status |= TS_POLLING;
889 864
890 cx->usage++;
891
892 lapic_timer_state_broadcast(pr, cx, 0); 865 lapic_timer_state_broadcast(pr, cx, 0);
893 cx->time += idle_time;
894 return index; 866 return index;
895} 867}
896 868
@@ -928,8 +900,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
928 drv, drv->safe_state_index); 900 drv, drv->safe_state_index);
929 } else { 901 } else {
930 local_irq_disable(); 902 local_irq_disable();
931 if (!acpi_idle_suspend) 903 acpi_safe_halt();
932 acpi_safe_halt();
933 local_irq_enable(); 904 local_irq_enable();
934 return -EBUSY; 905 return -EBUSY;
935 } 906 }
@@ -937,11 +908,6 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
937 908
938 local_irq_disable(); 909 local_irq_disable();
939 910
940 if (acpi_idle_suspend) {
941 local_irq_enable();
942 cpu_relax();
943 return -EBUSY;
944 }
945 911
946 if (cx->entry_method != ACPI_CSTATE_FFH) { 912 if (cx->entry_method != ACPI_CSTATE_FFH) {
947 current_thread_info()->status &= ~TS_POLLING; 913 current_thread_info()->status &= ~TS_POLLING;
@@ -1014,10 +980,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
1014 if (cx->entry_method != ACPI_CSTATE_FFH) 980 if (cx->entry_method != ACPI_CSTATE_FFH)
1015 current_thread_info()->status |= TS_POLLING; 981 current_thread_info()->status |= TS_POLLING;
1016 982
1017 cx->usage++;
1018
1019 lapic_timer_state_broadcast(pr, cx, 0); 983 lapic_timer_state_broadcast(pr, cx, 0);
1020 cx->time += idle_time;
1021 return index; 984 return index;
1022} 985}
1023 986
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
index 6e36d0c0057c..c0b9aa5faf4c 100644
--- a/drivers/acpi/sbs.c
+++ b/drivers/acpi/sbs.c
@@ -988,16 +988,18 @@ static void acpi_sbs_rmdirs(void)
988#endif 988#endif
989} 989}
990 990
991static int acpi_sbs_resume(struct acpi_device *device) 991static int acpi_sbs_resume(struct device *dev)
992{ 992{
993 struct acpi_sbs *sbs; 993 struct acpi_sbs *sbs;
994 if (!device) 994 if (!dev)
995 return -EINVAL; 995 return -EINVAL;
996 sbs = device->driver_data; 996 sbs = to_acpi_device(dev)->driver_data;
997 acpi_sbs_callback(sbs); 997 acpi_sbs_callback(sbs);
998 return 0; 998 return 0;
999} 999}
1000 1000
1001static SIMPLE_DEV_PM_OPS(acpi_sbs_pm, NULL, acpi_sbs_resume);
1002
1001static struct acpi_driver acpi_sbs_driver = { 1003static struct acpi_driver acpi_sbs_driver = {
1002 .name = "sbs", 1004 .name = "sbs",
1003 .class = ACPI_SBS_CLASS, 1005 .class = ACPI_SBS_CLASS,
@@ -1005,8 +1007,8 @@ static struct acpi_driver acpi_sbs_driver = {
1005 .ops = { 1007 .ops = {
1006 .add = acpi_sbs_add, 1008 .add = acpi_sbs_add,
1007 .remove = acpi_sbs_remove, 1009 .remove = acpi_sbs_remove,
1008 .resume = acpi_sbs_resume,
1009 }, 1010 },
1011 .drv.pm = &acpi_sbs_pm,
1010}; 1012};
1011 1013
1012static int __init acpi_sbs_init(void) 1014static int __init acpi_sbs_init(void)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index c8a1f3b68110..fdda49336560 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -290,26 +290,6 @@ static void acpi_device_release(struct device *dev)
290 kfree(acpi_dev); 290 kfree(acpi_dev);
291} 291}
292 292
293static int acpi_device_suspend(struct device *dev, pm_message_t state)
294{
295 struct acpi_device *acpi_dev = to_acpi_device(dev);
296 struct acpi_driver *acpi_drv = acpi_dev->driver;
297
298 if (acpi_drv && acpi_drv->ops.suspend)
299 return acpi_drv->ops.suspend(acpi_dev, state);
300 return 0;
301}
302
303static int acpi_device_resume(struct device *dev)
304{
305 struct acpi_device *acpi_dev = to_acpi_device(dev);
306 struct acpi_driver *acpi_drv = acpi_dev->driver;
307
308 if (acpi_drv && acpi_drv->ops.resume)
309 return acpi_drv->ops.resume(acpi_dev);
310 return 0;
311}
312
313static int acpi_bus_match(struct device *dev, struct device_driver *drv) 293static int acpi_bus_match(struct device *dev, struct device_driver *drv)
314{ 294{
315 struct acpi_device *acpi_dev = to_acpi_device(dev); 295 struct acpi_device *acpi_dev = to_acpi_device(dev);
@@ -441,8 +421,6 @@ static int acpi_device_remove(struct device * dev)
441 421
442struct bus_type acpi_bus_type = { 422struct bus_type acpi_bus_type = {
443 .name = "acpi", 423 .name = "acpi",
444 .suspend = acpi_device_suspend,
445 .resume = acpi_device_resume,
446 .match = acpi_bus_match, 424 .match = acpi_bus_match,
447 .probe = acpi_device_probe, 425 .probe = acpi_device_probe,
448 .remove = acpi_device_remove, 426 .remove = acpi_device_remove,
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 7dbebea1ec31..21dd4c268aef 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -98,7 +98,6 @@ MODULE_PARM_DESC(psv, "Disable or override all passive trip points.");
98 98
99static int acpi_thermal_add(struct acpi_device *device); 99static int acpi_thermal_add(struct acpi_device *device);
100static int acpi_thermal_remove(struct acpi_device *device, int type); 100static int acpi_thermal_remove(struct acpi_device *device, int type);
101static int acpi_thermal_resume(struct acpi_device *device);
102static void acpi_thermal_notify(struct acpi_device *device, u32 event); 101static void acpi_thermal_notify(struct acpi_device *device, u32 event);
103 102
104static const struct acpi_device_id thermal_device_ids[] = { 103static const struct acpi_device_id thermal_device_ids[] = {
@@ -107,6 +106,9 @@ static const struct acpi_device_id thermal_device_ids[] = {
107}; 106};
108MODULE_DEVICE_TABLE(acpi, thermal_device_ids); 107MODULE_DEVICE_TABLE(acpi, thermal_device_ids);
109 108
109static int acpi_thermal_resume(struct device *dev);
110static SIMPLE_DEV_PM_OPS(acpi_thermal_pm, NULL, acpi_thermal_resume);
111
110static struct acpi_driver acpi_thermal_driver = { 112static struct acpi_driver acpi_thermal_driver = {
111 .name = "thermal", 113 .name = "thermal",
112 .class = ACPI_THERMAL_CLASS, 114 .class = ACPI_THERMAL_CLASS,
@@ -114,9 +116,9 @@ static struct acpi_driver acpi_thermal_driver = {
114 .ops = { 116 .ops = {
115 .add = acpi_thermal_add, 117 .add = acpi_thermal_add,
116 .remove = acpi_thermal_remove, 118 .remove = acpi_thermal_remove,
117 .resume = acpi_thermal_resume,
118 .notify = acpi_thermal_notify, 119 .notify = acpi_thermal_notify,
119 }, 120 },
121 .drv.pm = &acpi_thermal_pm,
120}; 122};
121 123
122struct acpi_thermal_state { 124struct acpi_thermal_state {
@@ -1041,16 +1043,17 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
1041 return 0; 1043 return 0;
1042} 1044}
1043 1045
1044static int acpi_thermal_resume(struct acpi_device *device) 1046static int acpi_thermal_resume(struct device *dev)
1045{ 1047{
1046 struct acpi_thermal *tz = NULL; 1048 struct acpi_thermal *tz;
1047 int i, j, power_state, result; 1049 int i, j, power_state, result;
1048 1050
1049 1051 if (!dev)
1050 if (!device || !acpi_driver_data(device))
1051 return -EINVAL; 1052 return -EINVAL;
1052 1053
1053 tz = acpi_driver_data(device); 1054 tz = acpi_driver_data(to_acpi_device(dev));
1055 if (!tz)
1056 return -EINVAL;
1054 1057
1055 for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) { 1058 for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
1056 if (!(&tz->trips.active[i])) 1059 if (!(&tz->trips.active[i]))
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index dcb8a6e48692..4b01ab3d2c24 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -24,6 +24,7 @@
24#include <linux/wait.h> 24#include <linux/wait.h>
25#include <linux/async.h> 25#include <linux/async.h>
26#include <linux/pm_runtime.h> 26#include <linux/pm_runtime.h>
27#include <scsi/scsi_scan.h>
27 28
28#include "base.h" 29#include "base.h"
29#include "power/power.h" 30#include "power/power.h"
@@ -332,6 +333,7 @@ void wait_for_device_probe(void)
332 /* wait for the known devices to complete their probing */ 333 /* wait for the known devices to complete their probing */
333 wait_event(probe_waitqueue, atomic_read(&probe_count) == 0); 334 wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
334 async_synchronize_full(); 335 async_synchronize_full();
336 scsi_complete_async_scans();
335} 337}
336EXPORT_SYMBOL_GPL(wait_for_device_probe); 338EXPORT_SYMBOL_GPL(wait_for_device_probe);
337 339
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
index 765c3a28077a..d91a3a0b2325 100644
--- a/drivers/base/devtmpfs.c
+++ b/drivers/base/devtmpfs.c
@@ -227,33 +227,24 @@ static int handle_create(const char *nodename, umode_t mode, struct device *dev)
227 227
228static int dev_rmdir(const char *name) 228static int dev_rmdir(const char *name)
229{ 229{
230 struct nameidata nd; 230 struct path parent;
231 struct dentry *dentry; 231 struct dentry *dentry;
232 int err; 232 int err;
233 233
234 err = kern_path_parent(name, &nd); 234 dentry = kern_path_locked(name, &parent);
235 if (err) 235 if (IS_ERR(dentry))
236 return err; 236 return PTR_ERR(dentry);
237 237 if (dentry->d_inode) {
238 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); 238 if (dentry->d_inode->i_private == &thread)
239 dentry = lookup_one_len(nd.last.name, nd.path.dentry, nd.last.len); 239 err = vfs_rmdir(parent.dentry->d_inode, dentry);
240 if (!IS_ERR(dentry)) { 240 else
241 if (dentry->d_inode) { 241 err = -EPERM;
242 if (dentry->d_inode->i_private == &thread)
243 err = vfs_rmdir(nd.path.dentry->d_inode,
244 dentry);
245 else
246 err = -EPERM;
247 } else {
248 err = -ENOENT;
249 }
250 dput(dentry);
251 } else { 242 } else {
252 err = PTR_ERR(dentry); 243 err = -ENOENT;
253 } 244 }
254 245 dput(dentry);
255 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 246 mutex_unlock(&parent.dentry->d_inode->i_mutex);
256 path_put(&nd.path); 247 path_put(&parent);
257 return err; 248 return err;
258} 249}
259 250
@@ -305,50 +296,43 @@ static int dev_mynode(struct device *dev, struct inode *inode, struct kstat *sta
305 296
306static int handle_remove(const char *nodename, struct device *dev) 297static int handle_remove(const char *nodename, struct device *dev)
307{ 298{
308 struct nameidata nd; 299 struct path parent;
309 struct dentry *dentry; 300 struct dentry *dentry;
310 struct kstat stat;
311 int deleted = 1; 301 int deleted = 1;
312 int err; 302 int err;
313 303
314 err = kern_path_parent(nodename, &nd); 304 dentry = kern_path_locked(nodename, &parent);
315 if (err) 305 if (IS_ERR(dentry))
316 return err; 306 return PTR_ERR(dentry);
317 307
318 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); 308 if (dentry->d_inode) {
319 dentry = lookup_one_len(nd.last.name, nd.path.dentry, nd.last.len); 309 struct kstat stat;
320 if (!IS_ERR(dentry)) { 310 err = vfs_getattr(parent.mnt, dentry, &stat);
321 if (dentry->d_inode) { 311 if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
322 err = vfs_getattr(nd.path.mnt, dentry, &stat); 312 struct iattr newattrs;
323 if (!err && dev_mynode(dev, dentry->d_inode, &stat)) { 313 /*
324 struct iattr newattrs; 314 * before unlinking this node, reset permissions
325 /* 315 * of possible references like hardlinks
326 * before unlinking this node, reset permissions 316 */
327 * of possible references like hardlinks 317 newattrs.ia_uid = 0;
328 */ 318 newattrs.ia_gid = 0;
329 newattrs.ia_uid = 0; 319 newattrs.ia_mode = stat.mode & ~0777;
330 newattrs.ia_gid = 0; 320 newattrs.ia_valid =
331 newattrs.ia_mode = stat.mode & ~0777; 321 ATTR_UID|ATTR_GID|ATTR_MODE;
332 newattrs.ia_valid = 322 mutex_lock(&dentry->d_inode->i_mutex);
333 ATTR_UID|ATTR_GID|ATTR_MODE; 323 notify_change(dentry, &newattrs);
334 mutex_lock(&dentry->d_inode->i_mutex); 324 mutex_unlock(&dentry->d_inode->i_mutex);
335 notify_change(dentry, &newattrs); 325 err = vfs_unlink(parent.dentry->d_inode, dentry);
336 mutex_unlock(&dentry->d_inode->i_mutex); 326 if (!err || err == -ENOENT)
337 err = vfs_unlink(nd.path.dentry->d_inode, 327 deleted = 1;
338 dentry);
339 if (!err || err == -ENOENT)
340 deleted = 1;
341 }
342 } else {
343 err = -ENOENT;
344 } 328 }
345 dput(dentry);
346 } else { 329 } else {
347 err = PTR_ERR(dentry); 330 err = -ENOENT;
348 } 331 }
349 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 332 dput(dentry);
333 mutex_unlock(&parent.dentry->d_inode->i_mutex);
350 334
351 path_put(&nd.path); 335 path_put(&parent);
352 if (deleted && strchr(nodename, '/')) 336 if (deleted && strchr(nodename, '/'))
353 delete_path(nodename); 337 delete_path(nodename);
354 return err; 338 return err;
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index 83aa694a8efe..ba3487c9835b 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -75,19 +75,6 @@ static int genpd_start_dev(struct generic_pm_domain *genpd, struct device *dev)
75 start_latency_ns, "start"); 75 start_latency_ns, "start");
76} 76}
77 77
78static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev)
79{
80 return GENPD_DEV_TIMED_CALLBACK(genpd, int, save_state, dev,
81 save_state_latency_ns, "state save");
82}
83
84static int genpd_restore_dev(struct generic_pm_domain *genpd, struct device *dev)
85{
86 return GENPD_DEV_TIMED_CALLBACK(genpd, int, restore_state, dev,
87 restore_state_latency_ns,
88 "state restore");
89}
90
91static bool genpd_sd_counter_dec(struct generic_pm_domain *genpd) 78static bool genpd_sd_counter_dec(struct generic_pm_domain *genpd)
92{ 79{
93 bool ret = false; 80 bool ret = false;
@@ -139,6 +126,19 @@ static void genpd_set_active(struct generic_pm_domain *genpd)
139 genpd->status = GPD_STATE_ACTIVE; 126 genpd->status = GPD_STATE_ACTIVE;
140} 127}
141 128
129static void genpd_recalc_cpu_exit_latency(struct generic_pm_domain *genpd)
130{
131 s64 usecs64;
132
133 if (!genpd->cpu_data)
134 return;
135
136 usecs64 = genpd->power_on_latency_ns;
137 do_div(usecs64, NSEC_PER_USEC);
138 usecs64 += genpd->cpu_data->saved_exit_latency;
139 genpd->cpu_data->idle_state->exit_latency = usecs64;
140}
141
142/** 142/**
143 * __pm_genpd_poweron - Restore power to a given PM domain and its masters. 143 * __pm_genpd_poweron - Restore power to a given PM domain and its masters.
144 * @genpd: PM domain to power up. 144 * @genpd: PM domain to power up.
@@ -146,7 +146,7 @@ static void genpd_set_active(struct generic_pm_domain *genpd)
146 * Restore power to @genpd and all of its masters so that it is possible to 146 * Restore power to @genpd and all of its masters so that it is possible to
147 * resume a device belonging to it. 147 * resume a device belonging to it.
148 */ 148 */
149int __pm_genpd_poweron(struct generic_pm_domain *genpd) 149static int __pm_genpd_poweron(struct generic_pm_domain *genpd)
150 __releases(&genpd->lock) __acquires(&genpd->lock) 150 __releases(&genpd->lock) __acquires(&genpd->lock)
151{ 151{
152 struct gpd_link *link; 152 struct gpd_link *link;
@@ -176,6 +176,13 @@ int __pm_genpd_poweron(struct generic_pm_domain *genpd)
176 return 0; 176 return 0;
177 } 177 }
178 178
179 if (genpd->cpu_data) {
180 cpuidle_pause_and_lock();
181 genpd->cpu_data->idle_state->disabled = true;
182 cpuidle_resume_and_unlock();
183 goto out;
184 }
185
179 /* 186 /*
180 * The list is guaranteed not to change while the loop below is being 187 * The list is guaranteed not to change while the loop below is being
181 * executed, unless one of the masters' .power_on() callbacks fiddles 188 * executed, unless one of the masters' .power_on() callbacks fiddles
@@ -215,6 +222,7 @@ int __pm_genpd_poweron(struct generic_pm_domain *genpd)
215 if (elapsed_ns > genpd->power_on_latency_ns) { 222 if (elapsed_ns > genpd->power_on_latency_ns) {
216 genpd->power_on_latency_ns = elapsed_ns; 223 genpd->power_on_latency_ns = elapsed_ns;
217 genpd->max_off_time_changed = true; 224 genpd->max_off_time_changed = true;
225 genpd_recalc_cpu_exit_latency(genpd);
218 if (genpd->name) 226 if (genpd->name)
219 pr_warning("%s: Power-on latency exceeded, " 227 pr_warning("%s: Power-on latency exceeded, "
220 "new value %lld ns\n", genpd->name, 228 "new value %lld ns\n", genpd->name,
@@ -222,6 +230,7 @@ int __pm_genpd_poweron(struct generic_pm_domain *genpd)
222 } 230 }
223 } 231 }
224 232
233 out:
225 genpd_set_active(genpd); 234 genpd_set_active(genpd);
226 235
227 return 0; 236 return 0;
@@ -251,6 +260,19 @@ int pm_genpd_poweron(struct generic_pm_domain *genpd)
251 260
252#ifdef CONFIG_PM_RUNTIME 261#ifdef CONFIG_PM_RUNTIME
253 262
263static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev)
264{
265 return GENPD_DEV_TIMED_CALLBACK(genpd, int, save_state, dev,
266 save_state_latency_ns, "state save");
267}
268
269static int genpd_restore_dev(struct generic_pm_domain *genpd, struct device *dev)
270{
271 return GENPD_DEV_TIMED_CALLBACK(genpd, int, restore_state, dev,
272 restore_state_latency_ns,
273 "state restore");
274}
275
254static int genpd_dev_pm_qos_notifier(struct notifier_block *nb, 276static int genpd_dev_pm_qos_notifier(struct notifier_block *nb,
255 unsigned long val, void *ptr) 277 unsigned long val, void *ptr)
256{ 278{
@@ -275,7 +297,7 @@ static int genpd_dev_pm_qos_notifier(struct notifier_block *nb,
275 297
276 pdd = dev->power.subsys_data ? 298 pdd = dev->power.subsys_data ?
277 dev->power.subsys_data->domain_data : NULL; 299 dev->power.subsys_data->domain_data : NULL;
278 if (pdd) { 300 if (pdd && pdd->dev) {
279 to_gpd_data(pdd)->td.constraint_changed = true; 301 to_gpd_data(pdd)->td.constraint_changed = true;
280 genpd = dev_to_genpd(dev); 302 genpd = dev_to_genpd(dev);
281 } else { 303 } else {
@@ -339,19 +361,16 @@ static void __pm_genpd_restore_device(struct pm_domain_data *pdd,
339{ 361{
340 struct generic_pm_domain_data *gpd_data = to_gpd_data(pdd); 362 struct generic_pm_domain_data *gpd_data = to_gpd_data(pdd);
341 struct device *dev = pdd->dev; 363 struct device *dev = pdd->dev;
364 bool need_restore = gpd_data->need_restore;
342 365
343 if (!gpd_data->need_restore) 366 gpd_data->need_restore = false;
344 return;
345
346 mutex_unlock(&genpd->lock); 367 mutex_unlock(&genpd->lock);
347 368
348 genpd_start_dev(genpd, dev); 369 genpd_start_dev(genpd, dev);
349 genpd_restore_dev(genpd, dev); 370 if (need_restore)
350 genpd_stop_dev(genpd, dev); 371 genpd_restore_dev(genpd, dev);
351 372
352 mutex_lock(&genpd->lock); 373 mutex_lock(&genpd->lock);
353
354 gpd_data->need_restore = false;
355} 374}
356 375
357/** 376/**
@@ -458,6 +477,21 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd)
458 } 477 }
459 } 478 }
460 479
480 if (genpd->cpu_data) {
481 /*
482 * If cpu_data is set, cpuidle should turn the domain off when
483 * the CPU in it is idle. In that case we don't decrement the
484 * subdomain counts of the master domains, so that power is not
485 * removed from the current domain prematurely as a result of
486 * cutting off the masters' power.
487 */
488 genpd->status = GPD_STATE_POWER_OFF;
489 cpuidle_pause_and_lock();
490 genpd->cpu_data->idle_state->disabled = false;
491 cpuidle_resume_and_unlock();
492 goto out;
493 }
494
461 if (genpd->power_off) { 495 if (genpd->power_off) {
462 ktime_t time_start; 496 ktime_t time_start;
463 s64 elapsed_ns; 497 s64 elapsed_ns;
@@ -595,7 +629,7 @@ static int pm_genpd_runtime_resume(struct device *dev)
595 629
596 /* If power.irq_safe, the PM domain is never powered off. */ 630 /* If power.irq_safe, the PM domain is never powered off. */
597 if (dev->power.irq_safe) 631 if (dev->power.irq_safe)
598 goto out; 632 return genpd_start_dev(genpd, dev);
599 633
600 mutex_lock(&genpd->lock); 634 mutex_lock(&genpd->lock);
601 ret = __pm_genpd_poweron(genpd); 635 ret = __pm_genpd_poweron(genpd);
@@ -628,9 +662,6 @@ static int pm_genpd_runtime_resume(struct device *dev)
628 wake_up_all(&genpd->status_wait_queue); 662 wake_up_all(&genpd->status_wait_queue);
629 mutex_unlock(&genpd->lock); 663 mutex_unlock(&genpd->lock);
630 664
631 out:
632 genpd_start_dev(genpd, dev);
633
634 return 0; 665 return 0;
635} 666}
636 667
@@ -1235,6 +1266,27 @@ static void pm_genpd_complete(struct device *dev)
1235 1266
1236#endif /* CONFIG_PM_SLEEP */ 1267#endif /* CONFIG_PM_SLEEP */
1237 1268
1269static struct generic_pm_domain_data *__pm_genpd_alloc_dev_data(struct device *dev)
1270{
1271 struct generic_pm_domain_data *gpd_data;
1272
1273 gpd_data = kzalloc(sizeof(*gpd_data), GFP_KERNEL);
1274 if (!gpd_data)
1275 return NULL;
1276
1277 mutex_init(&gpd_data->lock);
1278 gpd_data->nb.notifier_call = genpd_dev_pm_qos_notifier;
1279 dev_pm_qos_add_notifier(dev, &gpd_data->nb);
1280 return gpd_data;
1281}
1282
1283static void __pm_genpd_free_dev_data(struct device *dev,
1284 struct generic_pm_domain_data *gpd_data)
1285{
1286 dev_pm_qos_remove_notifier(dev, &gpd_data->nb);
1287 kfree(gpd_data);
1288}
1289
1238/** 1290/**
1239 * __pm_genpd_add_device - Add a device to an I/O PM domain. 1291 * __pm_genpd_add_device - Add a device to an I/O PM domain.
1240 * @genpd: PM domain to add the device to. 1292 * @genpd: PM domain to add the device to.
@@ -1244,7 +1296,7 @@ static void pm_genpd_complete(struct device *dev)
1244int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev, 1296int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,
1245 struct gpd_timing_data *td) 1297 struct gpd_timing_data *td)
1246{ 1298{
1247 struct generic_pm_domain_data *gpd_data; 1299 struct generic_pm_domain_data *gpd_data_new, *gpd_data = NULL;
1248 struct pm_domain_data *pdd; 1300 struct pm_domain_data *pdd;
1249 int ret = 0; 1301 int ret = 0;
1250 1302
@@ -1253,14 +1305,10 @@ int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,
1253 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev)) 1305 if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(dev))
1254 return -EINVAL; 1306 return -EINVAL;
1255 1307
1256 gpd_data = kzalloc(sizeof(*gpd_data), GFP_KERNEL); 1308 gpd_data_new = __pm_genpd_alloc_dev_data(dev);
1257 if (!gpd_data) 1309 if (!gpd_data_new)
1258 return -ENOMEM; 1310 return -ENOMEM;
1259 1311
1260 mutex_init(&gpd_data->lock);
1261 gpd_data->nb.notifier_call = genpd_dev_pm_qos_notifier;
1262 dev_pm_qos_add_notifier(dev, &gpd_data->nb);
1263
1264 genpd_acquire_lock(genpd); 1312 genpd_acquire_lock(genpd);
1265 1313
1266 if (genpd->prepared_count > 0) { 1314 if (genpd->prepared_count > 0) {
@@ -1274,35 +1322,42 @@ int __pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev,
1274 goto out; 1322 goto out;
1275 } 1323 }
1276 1324
1325 ret = dev_pm_get_subsys_data(dev);
1326 if (ret)
1327 goto out;
1328
1277 genpd->device_count++; 1329 genpd->device_count++;
1278 genpd->max_off_time_changed = true; 1330 genpd->max_off_time_changed = true;
1279 1331
1280 dev_pm_get_subsys_data(dev);
1281
1282 mutex_lock(&gpd_data->lock);
1283 spin_lock_irq(&dev->power.lock); 1332 spin_lock_irq(&dev->power.lock);
1333
1284 dev->pm_domain = &genpd->domain; 1334 dev->pm_domain = &genpd->domain;
1285 dev->power.subsys_data->domain_data = &gpd_data->base; 1335 if (dev->power.subsys_data->domain_data) {
1286 gpd_data->base.dev = dev; 1336 gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
1287 list_add_tail(&gpd_data->base.list_node, &genpd->dev_list); 1337 } else {
1288 gpd_data->need_restore = genpd->status == GPD_STATE_POWER_OFF; 1338 gpd_data = gpd_data_new;
1339 dev->power.subsys_data->domain_data = &gpd_data->base;
1340 }
1341 gpd_data->refcount++;
1289 if (td) 1342 if (td)
1290 gpd_data->td = *td; 1343 gpd_data->td = *td;
1291 1344
1345 spin_unlock_irq(&dev->power.lock);
1346
1347 mutex_lock(&gpd_data->lock);
1348 gpd_data->base.dev = dev;
1349 list_add_tail(&gpd_data->base.list_node, &genpd->dev_list);
1350 gpd_data->need_restore = genpd->status == GPD_STATE_POWER_OFF;
1292 gpd_data->td.constraint_changed = true; 1351 gpd_data->td.constraint_changed = true;
1293 gpd_data->td.effective_constraint_ns = -1; 1352 gpd_data->td.effective_constraint_ns = -1;
1294 spin_unlock_irq(&dev->power.lock);
1295 mutex_unlock(&gpd_data->lock); 1353 mutex_unlock(&gpd_data->lock);
1296 1354
1297 genpd_release_lock(genpd);
1298
1299 return 0;
1300
1301 out: 1355 out:
1302 genpd_release_lock(genpd); 1356 genpd_release_lock(genpd);
1303 1357
1304 dev_pm_qos_remove_notifier(dev, &gpd_data->nb); 1358 if (gpd_data != gpd_data_new)
1305 kfree(gpd_data); 1359 __pm_genpd_free_dev_data(dev, gpd_data_new);
1360
1306 return ret; 1361 return ret;
1307} 1362}
1308 1363
@@ -1348,6 +1403,7 @@ int pm_genpd_remove_device(struct generic_pm_domain *genpd,
1348{ 1403{
1349 struct generic_pm_domain_data *gpd_data; 1404 struct generic_pm_domain_data *gpd_data;
1350 struct pm_domain_data *pdd; 1405 struct pm_domain_data *pdd;
1406 bool remove = false;
1351 int ret = 0; 1407 int ret = 0;
1352 1408
1353 dev_dbg(dev, "%s()\n", __func__); 1409 dev_dbg(dev, "%s()\n", __func__);
@@ -1368,22 +1424,28 @@ int pm_genpd_remove_device(struct generic_pm_domain *genpd,
1368 genpd->max_off_time_changed = true; 1424 genpd->max_off_time_changed = true;
1369 1425
1370 spin_lock_irq(&dev->power.lock); 1426 spin_lock_irq(&dev->power.lock);
1427
1371 dev->pm_domain = NULL; 1428 dev->pm_domain = NULL;
1372 pdd = dev->power.subsys_data->domain_data; 1429 pdd = dev->power.subsys_data->domain_data;
1373 list_del_init(&pdd->list_node); 1430 list_del_init(&pdd->list_node);
1374 dev->power.subsys_data->domain_data = NULL; 1431 gpd_data = to_gpd_data(pdd);
1432 if (--gpd_data->refcount == 0) {
1433 dev->power.subsys_data->domain_data = NULL;
1434 remove = true;
1435 }
1436
1375 spin_unlock_irq(&dev->power.lock); 1437 spin_unlock_irq(&dev->power.lock);
1376 1438
1377 gpd_data = to_gpd_data(pdd);
1378 mutex_lock(&gpd_data->lock); 1439 mutex_lock(&gpd_data->lock);
1379 pdd->dev = NULL; 1440 pdd->dev = NULL;
1380 mutex_unlock(&gpd_data->lock); 1441 mutex_unlock(&gpd_data->lock);
1381 1442
1382 genpd_release_lock(genpd); 1443 genpd_release_lock(genpd);
1383 1444
1384 dev_pm_qos_remove_notifier(dev, &gpd_data->nb);
1385 kfree(gpd_data);
1386 dev_pm_put_subsys_data(dev); 1445 dev_pm_put_subsys_data(dev);
1446 if (remove)
1447 __pm_genpd_free_dev_data(dev, gpd_data);
1448
1387 return 0; 1449 return 0;
1388 1450
1389 out: 1451 out:
@@ -1541,33 +1603,52 @@ int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
1541 * @dev: Device to add the callbacks to. 1603 * @dev: Device to add the callbacks to.
1542 * @ops: Set of callbacks to add. 1604 * @ops: Set of callbacks to add.
1543 * @td: Timing data to add to the device along with the callbacks (optional). 1605 * @td: Timing data to add to the device along with the callbacks (optional).
1606 *
1607 * Every call to this routine should be balanced with a call to
1608 * __pm_genpd_remove_callbacks() and they must not be nested.
1544 */ 1609 */
1545int pm_genpd_add_callbacks(struct device *dev, struct gpd_dev_ops *ops, 1610int pm_genpd_add_callbacks(struct device *dev, struct gpd_dev_ops *ops,
1546 struct gpd_timing_data *td) 1611 struct gpd_timing_data *td)
1547{ 1612{
1548 struct pm_domain_data *pdd; 1613 struct generic_pm_domain_data *gpd_data_new, *gpd_data = NULL;
1549 int ret = 0; 1614 int ret = 0;
1550 1615
1551 if (!(dev && dev->power.subsys_data && ops)) 1616 if (!(dev && ops))
1552 return -EINVAL; 1617 return -EINVAL;
1553 1618
1619 gpd_data_new = __pm_genpd_alloc_dev_data(dev);
1620 if (!gpd_data_new)
1621 return -ENOMEM;
1622
1554 pm_runtime_disable(dev); 1623 pm_runtime_disable(dev);
1555 device_pm_lock(); 1624 device_pm_lock();
1556 1625
1557 pdd = dev->power.subsys_data->domain_data; 1626 ret = dev_pm_get_subsys_data(dev);
1558 if (pdd) { 1627 if (ret)
1559 struct generic_pm_domain_data *gpd_data = to_gpd_data(pdd); 1628 goto out;
1560 1629
1561 gpd_data->ops = *ops; 1630 spin_lock_irq(&dev->power.lock);
1562 if (td) 1631
1563 gpd_data->td = *td; 1632 if (dev->power.subsys_data->domain_data) {
1633 gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
1564 } else { 1634 } else {
1565 ret = -EINVAL; 1635 gpd_data = gpd_data_new;
1636 dev->power.subsys_data->domain_data = &gpd_data->base;
1566 } 1637 }
1638 gpd_data->refcount++;
1639 gpd_data->ops = *ops;
1640 if (td)
1641 gpd_data->td = *td;
1642
1643 spin_unlock_irq(&dev->power.lock);
1567 1644
1645 out:
1568 device_pm_unlock(); 1646 device_pm_unlock();
1569 pm_runtime_enable(dev); 1647 pm_runtime_enable(dev);
1570 1648
1649 if (gpd_data != gpd_data_new)
1650 __pm_genpd_free_dev_data(dev, gpd_data_new);
1651
1571 return ret; 1652 return ret;
1572} 1653}
1573EXPORT_SYMBOL_GPL(pm_genpd_add_callbacks); 1654EXPORT_SYMBOL_GPL(pm_genpd_add_callbacks);
@@ -1576,10 +1657,13 @@ EXPORT_SYMBOL_GPL(pm_genpd_add_callbacks);
1576 * __pm_genpd_remove_callbacks - Remove PM domain callbacks from a given device. 1657 * __pm_genpd_remove_callbacks - Remove PM domain callbacks from a given device.
1577 * @dev: Device to remove the callbacks from. 1658 * @dev: Device to remove the callbacks from.
1578 * @clear_td: If set, clear the device's timing data too. 1659 * @clear_td: If set, clear the device's timing data too.
1660 *
1661 * This routine can only be called after pm_genpd_add_callbacks().
1579 */ 1662 */
1580int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td) 1663int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td)
1581{ 1664{
1582 struct pm_domain_data *pdd; 1665 struct generic_pm_domain_data *gpd_data = NULL;
1666 bool remove = false;
1583 int ret = 0; 1667 int ret = 0;
1584 1668
1585 if (!(dev && dev->power.subsys_data)) 1669 if (!(dev && dev->power.subsys_data))
@@ -1588,24 +1672,118 @@ int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td)
1588 pm_runtime_disable(dev); 1672 pm_runtime_disable(dev);
1589 device_pm_lock(); 1673 device_pm_lock();
1590 1674
1591 pdd = dev->power.subsys_data->domain_data; 1675 spin_lock_irq(&dev->power.lock);
1592 if (pdd) {
1593 struct generic_pm_domain_data *gpd_data = to_gpd_data(pdd);
1594 1676
1595 gpd_data->ops = (struct gpd_dev_ops){ 0 }; 1677 if (dev->power.subsys_data->domain_data) {
1678 gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
1679 gpd_data->ops = (struct gpd_dev_ops){ NULL };
1596 if (clear_td) 1680 if (clear_td)
1597 gpd_data->td = (struct gpd_timing_data){ 0 }; 1681 gpd_data->td = (struct gpd_timing_data){ 0 };
1682
1683 if (--gpd_data->refcount == 0) {
1684 dev->power.subsys_data->domain_data = NULL;
1685 remove = true;
1686 }
1598 } else { 1687 } else {
1599 ret = -EINVAL; 1688 ret = -EINVAL;
1600 } 1689 }
1601 1690
1691 spin_unlock_irq(&dev->power.lock);
1692
1602 device_pm_unlock(); 1693 device_pm_unlock();
1603 pm_runtime_enable(dev); 1694 pm_runtime_enable(dev);
1604 1695
1605 return ret; 1696 if (ret)
1697 return ret;
1698
1699 dev_pm_put_subsys_data(dev);
1700 if (remove)
1701 __pm_genpd_free_dev_data(dev, gpd_data);
1702
1703 return 0;
1606} 1704}
1607EXPORT_SYMBOL_GPL(__pm_genpd_remove_callbacks); 1705EXPORT_SYMBOL_GPL(__pm_genpd_remove_callbacks);
1608 1706
1707int genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
1708{
1709 struct cpuidle_driver *cpuidle_drv;
1710 struct gpd_cpu_data *cpu_data;
1711 struct cpuidle_state *idle_state;
1712 int ret = 0;
1713
1714 if (IS_ERR_OR_NULL(genpd) || state < 0)
1715 return -EINVAL;
1716
1717 genpd_acquire_lock(genpd);
1718
1719 if (genpd->cpu_data) {
1720 ret = -EEXIST;
1721 goto out;
1722 }
1723 cpu_data = kzalloc(sizeof(*cpu_data), GFP_KERNEL);
1724 if (!cpu_data) {
1725 ret = -ENOMEM;
1726 goto out;
1727 }
1728 cpuidle_drv = cpuidle_driver_ref();
1729 if (!cpuidle_drv) {
1730 ret = -ENODEV;
1731 goto out;
1732 }
1733 if (cpuidle_drv->state_count <= state) {
1734 ret = -EINVAL;
1735 goto err;
1736 }
1737 idle_state = &cpuidle_drv->states[state];
1738 if (!idle_state->disabled) {
1739 ret = -EAGAIN;
1740 goto err;
1741 }
1742 cpu_data->idle_state = idle_state;
1743 cpu_data->saved_exit_latency = idle_state->exit_latency;
1744 genpd->cpu_data = cpu_data;
1745 genpd_recalc_cpu_exit_latency(genpd);
1746
1747 out:
1748 genpd_release_lock(genpd);
1749 return ret;
1750
1751 err:
1752 cpuidle_driver_unref();
1753 goto out;
1754}
1755
1756int genpd_detach_cpuidle(struct generic_pm_domain *genpd)
1757{
1758 struct gpd_cpu_data *cpu_data;
1759 struct cpuidle_state *idle_state;
1760 int ret = 0;
1761
1762 if (IS_ERR_OR_NULL(genpd))
1763 return -EINVAL;
1764
1765 genpd_acquire_lock(genpd);
1766
1767 cpu_data = genpd->cpu_data;
1768 if (!cpu_data) {
1769 ret = -ENODEV;
1770 goto out;
1771 }
1772 idle_state = cpu_data->idle_state;
1773 if (!idle_state->disabled) {
1774 ret = -EAGAIN;
1775 goto out;
1776 }
1777 idle_state->exit_latency = cpu_data->saved_exit_latency;
1778 cpuidle_driver_unref();
1779 genpd->cpu_data = NULL;
1780 kfree(cpu_data);
1781
1782 out:
1783 genpd_release_lock(genpd);
1784 return ret;
1785}
1786
1609/* Default device callbacks for generic PM domains. */ 1787/* Default device callbacks for generic PM domains. */
1610 1788
1611/** 1789/**
@@ -1615,16 +1793,24 @@ EXPORT_SYMBOL_GPL(__pm_genpd_remove_callbacks);
1615static int pm_genpd_default_save_state(struct device *dev) 1793static int pm_genpd_default_save_state(struct device *dev)
1616{ 1794{
1617 int (*cb)(struct device *__dev); 1795 int (*cb)(struct device *__dev);
1618 struct device_driver *drv = dev->driver;
1619 1796
1620 cb = dev_gpd_data(dev)->ops.save_state; 1797 cb = dev_gpd_data(dev)->ops.save_state;
1621 if (cb) 1798 if (cb)
1622 return cb(dev); 1799 return cb(dev);
1623 1800
1624 if (drv && drv->pm && drv->pm->runtime_suspend) 1801 if (dev->type && dev->type->pm)
1625 return drv->pm->runtime_suspend(dev); 1802 cb = dev->type->pm->runtime_suspend;
1803 else if (dev->class && dev->class->pm)
1804 cb = dev->class->pm->runtime_suspend;
1805 else if (dev->bus && dev->bus->pm)
1806 cb = dev->bus->pm->runtime_suspend;
1807 else
1808 cb = NULL;
1626 1809
1627 return 0; 1810 if (!cb && dev->driver && dev->driver->pm)
1811 cb = dev->driver->pm->runtime_suspend;
1812
1813 return cb ? cb(dev) : 0;
1628} 1814}
1629 1815
1630/** 1816/**
@@ -1634,16 +1820,24 @@ static int pm_genpd_default_save_state(struct device *dev)
1634static int pm_genpd_default_restore_state(struct device *dev) 1820static int pm_genpd_default_restore_state(struct device *dev)
1635{ 1821{
1636 int (*cb)(struct device *__dev); 1822 int (*cb)(struct device *__dev);
1637 struct device_driver *drv = dev->driver;
1638 1823
1639 cb = dev_gpd_data(dev)->ops.restore_state; 1824 cb = dev_gpd_data(dev)->ops.restore_state;
1640 if (cb) 1825 if (cb)
1641 return cb(dev); 1826 return cb(dev);
1642 1827
1643 if (drv && drv->pm && drv->pm->runtime_resume) 1828 if (dev->type && dev->type->pm)
1644 return drv->pm->runtime_resume(dev); 1829 cb = dev->type->pm->runtime_resume;
1830 else if (dev->class && dev->class->pm)
1831 cb = dev->class->pm->runtime_resume;
1832 else if (dev->bus && dev->bus->pm)
1833 cb = dev->bus->pm->runtime_resume;
1834 else
1835 cb = NULL;
1645 1836
1646 return 0; 1837 if (!cb && dev->driver && dev->driver->pm)
1838 cb = dev->driver->pm->runtime_resume;
1839
1840 return cb ? cb(dev) : 0;
1647} 1841}
1648 1842
1649#ifdef CONFIG_PM_SLEEP 1843#ifdef CONFIG_PM_SLEEP
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 9cb845e49334..0113adc310dc 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -28,7 +28,7 @@
28#include <linux/sched.h> 28#include <linux/sched.h>
29#include <linux/async.h> 29#include <linux/async.h>
30#include <linux/suspend.h> 30#include <linux/suspend.h>
31 31#include <linux/cpuidle.h>
32#include "../base.h" 32#include "../base.h"
33#include "power.h" 33#include "power.h"
34 34
@@ -45,10 +45,10 @@ typedef int (*pm_callback_t)(struct device *);
45 */ 45 */
46 46
47LIST_HEAD(dpm_list); 47LIST_HEAD(dpm_list);
48LIST_HEAD(dpm_prepared_list); 48static LIST_HEAD(dpm_prepared_list);
49LIST_HEAD(dpm_suspended_list); 49static LIST_HEAD(dpm_suspended_list);
50LIST_HEAD(dpm_late_early_list); 50static LIST_HEAD(dpm_late_early_list);
51LIST_HEAD(dpm_noirq_list); 51static LIST_HEAD(dpm_noirq_list);
52 52
53struct suspend_stats suspend_stats; 53struct suspend_stats suspend_stats;
54static DEFINE_MUTEX(dpm_list_mtx); 54static DEFINE_MUTEX(dpm_list_mtx);
@@ -166,7 +166,7 @@ static ktime_t initcall_debug_start(struct device *dev)
166{ 166{
167 ktime_t calltime = ktime_set(0, 0); 167 ktime_t calltime = ktime_set(0, 0);
168 168
169 if (initcall_debug) { 169 if (pm_print_times_enabled) {
170 pr_info("calling %s+ @ %i, parent: %s\n", 170 pr_info("calling %s+ @ %i, parent: %s\n",
171 dev_name(dev), task_pid_nr(current), 171 dev_name(dev), task_pid_nr(current),
172 dev->parent ? dev_name(dev->parent) : "none"); 172 dev->parent ? dev_name(dev->parent) : "none");
@@ -181,7 +181,7 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime,
181{ 181{
182 ktime_t delta, rettime; 182 ktime_t delta, rettime;
183 183
184 if (initcall_debug) { 184 if (pm_print_times_enabled) {
185 rettime = ktime_get(); 185 rettime = ktime_get();
186 delta = ktime_sub(rettime, calltime); 186 delta = ktime_sub(rettime, calltime);
187 pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev), 187 pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev),
@@ -467,6 +467,7 @@ static void dpm_resume_noirq(pm_message_t state)
467 mutex_unlock(&dpm_list_mtx); 467 mutex_unlock(&dpm_list_mtx);
468 dpm_show_time(starttime, state, "noirq"); 468 dpm_show_time(starttime, state, "noirq");
469 resume_device_irqs(); 469 resume_device_irqs();
470 cpuidle_resume();
470} 471}
471 472
472/** 473/**
@@ -867,6 +868,7 @@ static int dpm_suspend_noirq(pm_message_t state)
867 ktime_t starttime = ktime_get(); 868 ktime_t starttime = ktime_get();
868 int error = 0; 869 int error = 0;
869 870
871 cpuidle_pause();
870 suspend_device_irqs(); 872 suspend_device_irqs();
871 mutex_lock(&dpm_list_mtx); 873 mutex_lock(&dpm_list_mtx);
872 while (!list_empty(&dpm_late_early_list)) { 874 while (!list_empty(&dpm_late_early_list)) {
@@ -989,8 +991,16 @@ static int dpm_suspend_late(pm_message_t state)
989int dpm_suspend_end(pm_message_t state) 991int dpm_suspend_end(pm_message_t state)
990{ 992{
991 int error = dpm_suspend_late(state); 993 int error = dpm_suspend_late(state);
994 if (error)
995 return error;
996
997 error = dpm_suspend_noirq(state);
998 if (error) {
999 dpm_resume_early(state);
1000 return error;
1001 }
992 1002
993 return error ? : dpm_suspend_noirq(state); 1003 return 0;
994} 1004}
995EXPORT_SYMBOL_GPL(dpm_suspend_end); 1005EXPORT_SYMBOL_GPL(dpm_suspend_end);
996 1006
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index fd849a2c4fa8..74a67e0019a2 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -462,7 +462,7 @@ EXPORT_SYMBOL_GPL(dev_pm_qos_add_ancestor_request);
462static void __dev_pm_qos_drop_user_request(struct device *dev) 462static void __dev_pm_qos_drop_user_request(struct device *dev)
463{ 463{
464 dev_pm_qos_remove_request(dev->power.pq_req); 464 dev_pm_qos_remove_request(dev->power.pq_req);
465 dev->power.pq_req = 0; 465 dev->power.pq_req = NULL;
466} 466}
467 467
468/** 468/**
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
index 48be2ad4dd2c..b91dc6f1e914 100644
--- a/drivers/base/power/sysfs.c
+++ b/drivers/base/power/sysfs.c
@@ -474,6 +474,8 @@ static DEVICE_ATTR(runtime_enabled, 0444, rtpm_enabled_show, NULL);
474 474
475#endif 475#endif
476 476
477#ifdef CONFIG_PM_SLEEP
478
477static ssize_t async_show(struct device *dev, struct device_attribute *attr, 479static ssize_t async_show(struct device *dev, struct device_attribute *attr,
478 char *buf) 480 char *buf)
479{ 481{
@@ -500,6 +502,8 @@ static ssize_t async_store(struct device *dev, struct device_attribute *attr,
500} 502}
501 503
502static DEVICE_ATTR(async, 0644, async_show, async_store); 504static DEVICE_ATTR(async, 0644, async_show, async_store);
505
506#endif
503#endif /* CONFIG_PM_ADVANCED_DEBUG */ 507#endif /* CONFIG_PM_ADVANCED_DEBUG */
504 508
505static struct attribute *power_attrs[] = { 509static struct attribute *power_attrs[] = {
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index b986b8660b0c..80f9ab9c3aa4 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -95,6 +95,9 @@ struct regmap {
95 95
96 /* if set, converts bulk rw to single rw */ 96 /* if set, converts bulk rw to single rw */
97 bool use_single_rw; 97 bool use_single_rw;
98
99 struct rb_root range_tree;
100 void *selector_work_buf; /* Scratch buffer used for selector */
98}; 101};
99 102
100struct regcache_ops { 103struct regcache_ops {
@@ -115,6 +118,20 @@ bool regmap_precious(struct regmap *map, unsigned int reg);
115int _regmap_write(struct regmap *map, unsigned int reg, 118int _regmap_write(struct regmap *map, unsigned int reg,
116 unsigned int val); 119 unsigned int val);
117 120
121struct regmap_range_node {
122 struct rb_node node;
123
124 unsigned int range_min;
125 unsigned int range_max;
126
127 unsigned int selector_reg;
128 unsigned int selector_mask;
129 int selector_shift;
130
131 unsigned int window_start;
132 unsigned int window_len;
133};
134
118#ifdef CONFIG_DEBUG_FS 135#ifdef CONFIG_DEBUG_FS
119extern void regmap_debugfs_initcall(void); 136extern void regmap_debugfs_initcall(void);
120extern void regmap_debugfs_init(struct regmap *map, const char *name); 137extern void regmap_debugfs_init(struct regmap *map, const char *name);
diff --git a/drivers/base/regmap/regmap-irq.c b/drivers/base/regmap/regmap-irq.c
index 4fac4b9be88f..a89734621e51 100644
--- a/drivers/base/regmap/regmap-irq.c
+++ b/drivers/base/regmap/regmap-irq.c
@@ -24,14 +24,18 @@ struct regmap_irq_chip_data {
24 struct mutex lock; 24 struct mutex lock;
25 25
26 struct regmap *map; 26 struct regmap *map;
27 struct regmap_irq_chip *chip; 27 const struct regmap_irq_chip *chip;
28 28
29 int irq_base; 29 int irq_base;
30 struct irq_domain *domain; 30 struct irq_domain *domain;
31 31
32 int irq;
33 int wake_count;
34
32 unsigned int *status_buf; 35 unsigned int *status_buf;
33 unsigned int *mask_buf; 36 unsigned int *mask_buf;
34 unsigned int *mask_buf_def; 37 unsigned int *mask_buf_def;
38 unsigned int *wake_buf;
35 39
36 unsigned int irq_reg_stride; 40 unsigned int irq_reg_stride;
37}; 41};
@@ -71,6 +75,16 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
71 d->chip->mask_base + (i * map->reg_stride)); 75 d->chip->mask_base + (i * map->reg_stride));
72 } 76 }
73 77
78 /* If we've changed our wakeup count propagate it to the parent */
79 if (d->wake_count < 0)
80 for (i = d->wake_count; i < 0; i++)
81 irq_set_irq_wake(d->irq, 0);
82 else if (d->wake_count > 0)
83 for (i = 0; i < d->wake_count; i++)
84 irq_set_irq_wake(d->irq, 1);
85
86 d->wake_count = 0;
87
74 mutex_unlock(&d->lock); 88 mutex_unlock(&d->lock);
75} 89}
76 90
@@ -92,18 +106,41 @@ static void regmap_irq_disable(struct irq_data *data)
92 d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask; 106 d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask;
93} 107}
94 108
109static int regmap_irq_set_wake(struct irq_data *data, unsigned int on)
110{
111 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
112 struct regmap *map = d->map;
113 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
114
115 if (!d->chip->wake_base)
116 return -EINVAL;
117
118 if (on) {
119 d->wake_buf[irq_data->reg_offset / map->reg_stride]
120 &= ~irq_data->mask;
121 d->wake_count++;
122 } else {
123 d->wake_buf[irq_data->reg_offset / map->reg_stride]
124 |= irq_data->mask;
125 d->wake_count--;
126 }
127
128 return 0;
129}
130
95static struct irq_chip regmap_irq_chip = { 131static struct irq_chip regmap_irq_chip = {
96 .name = "regmap", 132 .name = "regmap",
97 .irq_bus_lock = regmap_irq_lock, 133 .irq_bus_lock = regmap_irq_lock,
98 .irq_bus_sync_unlock = regmap_irq_sync_unlock, 134 .irq_bus_sync_unlock = regmap_irq_sync_unlock,
99 .irq_disable = regmap_irq_disable, 135 .irq_disable = regmap_irq_disable,
100 .irq_enable = regmap_irq_enable, 136 .irq_enable = regmap_irq_enable,
137 .irq_set_wake = regmap_irq_set_wake,
101}; 138};
102 139
103static irqreturn_t regmap_irq_thread(int irq, void *d) 140static irqreturn_t regmap_irq_thread(int irq, void *d)
104{ 141{
105 struct regmap_irq_chip_data *data = d; 142 struct regmap_irq_chip_data *data = d;
106 struct regmap_irq_chip *chip = data->chip; 143 const struct regmap_irq_chip *chip = data->chip;
107 struct regmap *map = data->map; 144 struct regmap *map = data->map;
108 int ret, i; 145 int ret, i;
109 bool handled = false; 146 bool handled = false;
@@ -195,7 +232,7 @@ static struct irq_domain_ops regmap_domain_ops = {
195 * register values used by the IRQ controller over suspend and resume. 232 * register values used by the IRQ controller over suspend and resume.
196 */ 233 */
197int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, 234int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
198 int irq_base, struct regmap_irq_chip *chip, 235 int irq_base, const struct regmap_irq_chip *chip,
199 struct regmap_irq_chip_data **data) 236 struct regmap_irq_chip_data **data)
200{ 237{
201 struct regmap_irq_chip_data *d; 238 struct regmap_irq_chip_data *d;
@@ -240,6 +277,14 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
240 if (!d->mask_buf_def) 277 if (!d->mask_buf_def)
241 goto err_alloc; 278 goto err_alloc;
242 279
280 if (chip->wake_base) {
281 d->wake_buf = kzalloc(sizeof(unsigned int) * chip->num_regs,
282 GFP_KERNEL);
283 if (!d->wake_buf)
284 goto err_alloc;
285 }
286
287 d->irq = irq;
243 d->map = map; 288 d->map = map;
244 d->chip = chip; 289 d->chip = chip;
245 d->irq_base = irq_base; 290 d->irq_base = irq_base;
@@ -294,6 +339,7 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
294err_domain: 339err_domain:
295 /* Should really dispose of the domain but... */ 340 /* Should really dispose of the domain but... */
296err_alloc: 341err_alloc:
342 kfree(d->wake_buf);
297 kfree(d->mask_buf_def); 343 kfree(d->mask_buf_def);
298 kfree(d->mask_buf); 344 kfree(d->mask_buf);
299 kfree(d->status_buf); 345 kfree(d->status_buf);
@@ -315,6 +361,7 @@ void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d)
315 361
316 free_irq(irq, d); 362 free_irq(irq, d);
317 /* We should unmap the domain but... */ 363 /* We should unmap the domain but... */
364 kfree(d->wake_buf);
318 kfree(d->mask_buf_def); 365 kfree(d->mask_buf_def);
319 kfree(d->mask_buf); 366 kfree(d->mask_buf);
320 kfree(d->status_buf); 367 kfree(d->status_buf);
@@ -346,6 +393,10 @@ EXPORT_SYMBOL_GPL(regmap_irq_chip_get_base);
346 */ 393 */
347int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq) 394int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq)
348{ 395{
396 /* Handle holes in the IRQ list */
397 if (!data->chip->irqs[irq].mask)
398 return -EINVAL;
399
349 return irq_create_mapping(data->domain, irq); 400 return irq_create_mapping(data->domain, irq);
350} 401}
351EXPORT_SYMBOL_GPL(regmap_irq_get_virq); 402EXPORT_SYMBOL_GPL(regmap_irq_get_virq);
diff --git a/drivers/base/regmap/regmap-mmio.c b/drivers/base/regmap/regmap-mmio.c
index febd6de6c8ac..f05fc74dd84a 100644
--- a/drivers/base/regmap/regmap-mmio.c
+++ b/drivers/base/regmap/regmap-mmio.c
@@ -37,7 +37,7 @@ static int regmap_mmio_gather_write(void *context,
37 37
38 BUG_ON(reg_size != 4); 38 BUG_ON(reg_size != 4);
39 39
40 offset = be32_to_cpup(reg); 40 offset = *(u32 *)reg;
41 41
42 while (val_size) { 42 while (val_size) {
43 switch (ctx->val_bytes) { 43 switch (ctx->val_bytes) {
@@ -45,14 +45,14 @@ static int regmap_mmio_gather_write(void *context,
45 writeb(*(u8 *)val, ctx->regs + offset); 45 writeb(*(u8 *)val, ctx->regs + offset);
46 break; 46 break;
47 case 2: 47 case 2:
48 writew(be16_to_cpup(val), ctx->regs + offset); 48 writew(*(u16 *)val, ctx->regs + offset);
49 break; 49 break;
50 case 4: 50 case 4:
51 writel(be32_to_cpup(val), ctx->regs + offset); 51 writel(*(u32 *)val, ctx->regs + offset);
52 break; 52 break;
53#ifdef CONFIG_64BIT 53#ifdef CONFIG_64BIT
54 case 8: 54 case 8:
55 writeq(be64_to_cpup(val), ctx->regs + offset); 55 writeq(*(u64 *)val, ctx->regs + offset);
56 break; 56 break;
57#endif 57#endif
58 default: 58 default:
@@ -83,7 +83,7 @@ static int regmap_mmio_read(void *context,
83 83
84 BUG_ON(reg_size != 4); 84 BUG_ON(reg_size != 4);
85 85
86 offset = be32_to_cpup(reg); 86 offset = *(u32 *)reg;
87 87
88 while (val_size) { 88 while (val_size) {
89 switch (ctx->val_bytes) { 89 switch (ctx->val_bytes) {
@@ -91,14 +91,14 @@ static int regmap_mmio_read(void *context,
91 *(u8 *)val = readb(ctx->regs + offset); 91 *(u8 *)val = readb(ctx->regs + offset);
92 break; 92 break;
93 case 2: 93 case 2:
94 *(u16 *)val = cpu_to_be16(readw(ctx->regs + offset)); 94 *(u16 *)val = readw(ctx->regs + offset);
95 break; 95 break;
96 case 4: 96 case 4:
97 *(u32 *)val = cpu_to_be32(readl(ctx->regs + offset)); 97 *(u32 *)val = readl(ctx->regs + offset);
98 break; 98 break;
99#ifdef CONFIG_64BIT 99#ifdef CONFIG_64BIT
100 case 8: 100 case 8:
101 *(u64 *)val = cpu_to_be32(readq(ctx->regs + offset)); 101 *(u64 *)val = readq(ctx->regs + offset);
102 break; 102 break;
103#endif 103#endif
104 default: 104 default:
@@ -124,9 +124,11 @@ static struct regmap_bus regmap_mmio = {
124 .gather_write = regmap_mmio_gather_write, 124 .gather_write = regmap_mmio_gather_write,
125 .read = regmap_mmio_read, 125 .read = regmap_mmio_read,
126 .free_context = regmap_mmio_free_context, 126 .free_context = regmap_mmio_free_context,
127 .reg_format_endian_default = REGMAP_ENDIAN_NATIVE,
128 .val_format_endian_default = REGMAP_ENDIAN_NATIVE,
127}; 129};
128 130
129struct regmap_mmio_context *regmap_mmio_gen_context(void __iomem *regs, 131static struct regmap_mmio_context *regmap_mmio_gen_context(void __iomem *regs,
130 const struct regmap_config *config) 132 const struct regmap_config *config)
131{ 133{
132 struct regmap_mmio_context *ctx; 134 struct regmap_mmio_context *ctx;
@@ -162,7 +164,15 @@ struct regmap_mmio_context *regmap_mmio_gen_context(void __iomem *regs,
162 if (config->reg_stride < min_stride) 164 if (config->reg_stride < min_stride)
163 return ERR_PTR(-EINVAL); 165 return ERR_PTR(-EINVAL);
164 166
165 ctx = kzalloc(GFP_KERNEL, sizeof(*ctx)); 167 switch (config->reg_format_endian) {
168 case REGMAP_ENDIAN_DEFAULT:
169 case REGMAP_ENDIAN_NATIVE:
170 break;
171 default:
172 return ERR_PTR(-EINVAL);
173 }
174
175 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
166 if (!ctx) 176 if (!ctx)
167 return ERR_PTR(-ENOMEM); 177 return ERR_PTR(-ENOMEM);
168 178
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index c89aa01fb1de..c241ae2f2f10 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -15,12 +15,25 @@
15#include <linux/export.h> 15#include <linux/export.h>
16#include <linux/mutex.h> 16#include <linux/mutex.h>
17#include <linux/err.h> 17#include <linux/err.h>
18#include <linux/rbtree.h>
18 19
19#define CREATE_TRACE_POINTS 20#define CREATE_TRACE_POINTS
20#include <trace/events/regmap.h> 21#include <trace/events/regmap.h>
21 22
22#include "internal.h" 23#include "internal.h"
23 24
25/*
26 * Sometimes for failures during very early init the trace
27 * infrastructure isn't available early enough to be used. For this
28 * sort of problem defining LOG_DEVICE will add printks for basic
29 * register I/O on a specific device.
30 */
31#undef LOG_DEVICE
32
33static int _regmap_update_bits(struct regmap *map, unsigned int reg,
34 unsigned int mask, unsigned int val,
35 bool *change);
36
24bool regmap_writeable(struct regmap *map, unsigned int reg) 37bool regmap_writeable(struct regmap *map, unsigned int reg)
25{ 38{
26 if (map->max_register && reg > map->max_register) 39 if (map->max_register && reg > map->max_register)
@@ -119,13 +132,19 @@ static void regmap_format_8(void *buf, unsigned int val, unsigned int shift)
119 b[0] = val << shift; 132 b[0] = val << shift;
120} 133}
121 134
122static void regmap_format_16(void *buf, unsigned int val, unsigned int shift) 135static void regmap_format_16_be(void *buf, unsigned int val, unsigned int shift)
123{ 136{
124 __be16 *b = buf; 137 __be16 *b = buf;
125 138
126 b[0] = cpu_to_be16(val << shift); 139 b[0] = cpu_to_be16(val << shift);
127} 140}
128 141
142static void regmap_format_16_native(void *buf, unsigned int val,
143 unsigned int shift)
144{
145 *(u16 *)buf = val << shift;
146}
147
129static void regmap_format_24(void *buf, unsigned int val, unsigned int shift) 148static void regmap_format_24(void *buf, unsigned int val, unsigned int shift)
130{ 149{
131 u8 *b = buf; 150 u8 *b = buf;
@@ -137,13 +156,19 @@ static void regmap_format_24(void *buf, unsigned int val, unsigned int shift)
137 b[2] = val; 156 b[2] = val;
138} 157}
139 158
140static void regmap_format_32(void *buf, unsigned int val, unsigned int shift) 159static void regmap_format_32_be(void *buf, unsigned int val, unsigned int shift)
141{ 160{
142 __be32 *b = buf; 161 __be32 *b = buf;
143 162
144 b[0] = cpu_to_be32(val << shift); 163 b[0] = cpu_to_be32(val << shift);
145} 164}
146 165
166static void regmap_format_32_native(void *buf, unsigned int val,
167 unsigned int shift)
168{
169 *(u32 *)buf = val << shift;
170}
171
147static unsigned int regmap_parse_8(void *buf) 172static unsigned int regmap_parse_8(void *buf)
148{ 173{
149 u8 *b = buf; 174 u8 *b = buf;
@@ -151,7 +176,7 @@ static unsigned int regmap_parse_8(void *buf)
151 return b[0]; 176 return b[0];
152} 177}
153 178
154static unsigned int regmap_parse_16(void *buf) 179static unsigned int regmap_parse_16_be(void *buf)
155{ 180{
156 __be16 *b = buf; 181 __be16 *b = buf;
157 182
@@ -160,6 +185,11 @@ static unsigned int regmap_parse_16(void *buf)
160 return b[0]; 185 return b[0];
161} 186}
162 187
188static unsigned int regmap_parse_16_native(void *buf)
189{
190 return *(u16 *)buf;
191}
192
163static unsigned int regmap_parse_24(void *buf) 193static unsigned int regmap_parse_24(void *buf)
164{ 194{
165 u8 *b = buf; 195 u8 *b = buf;
@@ -170,7 +200,7 @@ static unsigned int regmap_parse_24(void *buf)
170 return ret; 200 return ret;
171} 201}
172 202
173static unsigned int regmap_parse_32(void *buf) 203static unsigned int regmap_parse_32_be(void *buf)
174{ 204{
175 __be32 *b = buf; 205 __be32 *b = buf;
176 206
@@ -179,6 +209,11 @@ static unsigned int regmap_parse_32(void *buf)
179 return b[0]; 209 return b[0];
180} 210}
181 211
212static unsigned int regmap_parse_32_native(void *buf)
213{
214 return *(u32 *)buf;
215}
216
182static void regmap_lock_mutex(struct regmap *map) 217static void regmap_lock_mutex(struct regmap *map)
183{ 218{
184 mutex_lock(&map->mutex); 219 mutex_lock(&map->mutex);
@@ -208,6 +243,67 @@ static void dev_get_regmap_release(struct device *dev, void *res)
208 */ 243 */
209} 244}
210 245
246static bool _regmap_range_add(struct regmap *map,
247 struct regmap_range_node *data)
248{
249 struct rb_root *root = &map->range_tree;
250 struct rb_node **new = &(root->rb_node), *parent = NULL;
251
252 while (*new) {
253 struct regmap_range_node *this =
254 container_of(*new, struct regmap_range_node, node);
255
256 parent = *new;
257 if (data->range_max < this->range_min)
258 new = &((*new)->rb_left);
259 else if (data->range_min > this->range_max)
260 new = &((*new)->rb_right);
261 else
262 return false;
263 }
264
265 rb_link_node(&data->node, parent, new);
266 rb_insert_color(&data->node, root);
267
268 return true;
269}
270
271static struct regmap_range_node *_regmap_range_lookup(struct regmap *map,
272 unsigned int reg)
273{
274 struct rb_node *node = map->range_tree.rb_node;
275
276 while (node) {
277 struct regmap_range_node *this =
278 container_of(node, struct regmap_range_node, node);
279
280 if (reg < this->range_min)
281 node = node->rb_left;
282 else if (reg > this->range_max)
283 node = node->rb_right;
284 else
285 return this;
286 }
287
288 return NULL;
289}
290
291static void regmap_range_exit(struct regmap *map)
292{
293 struct rb_node *next;
294 struct regmap_range_node *range_node;
295
296 next = rb_first(&map->range_tree);
297 while (next) {
298 range_node = rb_entry(next, struct regmap_range_node, node);
299 next = rb_next(&range_node->node);
300 rb_erase(&range_node->node, &map->range_tree);
301 kfree(range_node);
302 }
303
304 kfree(map->selector_work_buf);
305}
306
211/** 307/**
212 * regmap_init(): Initialise register map 308 * regmap_init(): Initialise register map
213 * 309 *
@@ -227,6 +323,8 @@ struct regmap *regmap_init(struct device *dev,
227{ 323{
228 struct regmap *map, **m; 324 struct regmap *map, **m;
229 int ret = -EINVAL; 325 int ret = -EINVAL;
326 enum regmap_endian reg_endian, val_endian;
327 int i, j;
230 328
231 if (!bus || !config) 329 if (!bus || !config)
232 goto err; 330 goto err;
@@ -275,6 +373,18 @@ struct regmap *regmap_init(struct device *dev,
275 map->read_flag_mask = bus->read_flag_mask; 373 map->read_flag_mask = bus->read_flag_mask;
276 } 374 }
277 375
376 reg_endian = config->reg_format_endian;
377 if (reg_endian == REGMAP_ENDIAN_DEFAULT)
378 reg_endian = bus->reg_format_endian_default;
379 if (reg_endian == REGMAP_ENDIAN_DEFAULT)
380 reg_endian = REGMAP_ENDIAN_BIG;
381
382 val_endian = config->val_format_endian;
383 if (val_endian == REGMAP_ENDIAN_DEFAULT)
384 val_endian = bus->val_format_endian_default;
385 if (val_endian == REGMAP_ENDIAN_DEFAULT)
386 val_endian = REGMAP_ENDIAN_BIG;
387
278 switch (config->reg_bits + map->reg_shift) { 388 switch (config->reg_bits + map->reg_shift) {
279 case 2: 389 case 2:
280 switch (config->val_bits) { 390 switch (config->val_bits) {
@@ -321,11 +431,29 @@ struct regmap *regmap_init(struct device *dev,
321 break; 431 break;
322 432
323 case 16: 433 case 16:
324 map->format.format_reg = regmap_format_16; 434 switch (reg_endian) {
435 case REGMAP_ENDIAN_BIG:
436 map->format.format_reg = regmap_format_16_be;
437 break;
438 case REGMAP_ENDIAN_NATIVE:
439 map->format.format_reg = regmap_format_16_native;
440 break;
441 default:
442 goto err_map;
443 }
325 break; 444 break;
326 445
327 case 32: 446 case 32:
328 map->format.format_reg = regmap_format_32; 447 switch (reg_endian) {
448 case REGMAP_ENDIAN_BIG:
449 map->format.format_reg = regmap_format_32_be;
450 break;
451 case REGMAP_ENDIAN_NATIVE:
452 map->format.format_reg = regmap_format_32_native;
453 break;
454 default:
455 goto err_map;
456 }
329 break; 457 break;
330 458
331 default: 459 default:
@@ -338,21 +466,47 @@ struct regmap *regmap_init(struct device *dev,
338 map->format.parse_val = regmap_parse_8; 466 map->format.parse_val = regmap_parse_8;
339 break; 467 break;
340 case 16: 468 case 16:
341 map->format.format_val = regmap_format_16; 469 switch (val_endian) {
342 map->format.parse_val = regmap_parse_16; 470 case REGMAP_ENDIAN_BIG:
471 map->format.format_val = regmap_format_16_be;
472 map->format.parse_val = regmap_parse_16_be;
473 break;
474 case REGMAP_ENDIAN_NATIVE:
475 map->format.format_val = regmap_format_16_native;
476 map->format.parse_val = regmap_parse_16_native;
477 break;
478 default:
479 goto err_map;
480 }
343 break; 481 break;
344 case 24: 482 case 24:
483 if (val_endian != REGMAP_ENDIAN_BIG)
484 goto err_map;
345 map->format.format_val = regmap_format_24; 485 map->format.format_val = regmap_format_24;
346 map->format.parse_val = regmap_parse_24; 486 map->format.parse_val = regmap_parse_24;
347 break; 487 break;
348 case 32: 488 case 32:
349 map->format.format_val = regmap_format_32; 489 switch (val_endian) {
350 map->format.parse_val = regmap_parse_32; 490 case REGMAP_ENDIAN_BIG:
491 map->format.format_val = regmap_format_32_be;
492 map->format.parse_val = regmap_parse_32_be;
493 break;
494 case REGMAP_ENDIAN_NATIVE:
495 map->format.format_val = regmap_format_32_native;
496 map->format.parse_val = regmap_parse_32_native;
497 break;
498 default:
499 goto err_map;
500 }
351 break; 501 break;
352 } 502 }
353 503
354 if (map->format.format_write) 504 if (map->format.format_write) {
505 if ((reg_endian != REGMAP_ENDIAN_BIG) ||
506 (val_endian != REGMAP_ENDIAN_BIG))
507 goto err_map;
355 map->use_single_rw = true; 508 map->use_single_rw = true;
509 }
356 510
357 if (!map->format.format_write && 511 if (!map->format.format_write &&
358 !(map->format.format_reg && map->format.format_val)) 512 !(map->format.format_reg && map->format.format_val))
@@ -364,27 +518,88 @@ struct regmap *regmap_init(struct device *dev,
364 goto err_map; 518 goto err_map;
365 } 519 }
366 520
367 regmap_debugfs_init(map, config->name); 521 map->range_tree = RB_ROOT;
522 for (i = 0; i < config->n_ranges; i++) {
523 const struct regmap_range_cfg *range_cfg = &config->ranges[i];
524 struct regmap_range_node *new;
525
526 /* Sanity check */
527 if (range_cfg->range_max < range_cfg->range_min ||
528 range_cfg->range_max > map->max_register ||
529 range_cfg->selector_reg > map->max_register ||
530 range_cfg->window_len == 0)
531 goto err_range;
532
533 /* Make sure, that this register range has no selector
534 or data window within its boundary */
535 for (j = 0; j < config->n_ranges; j++) {
536 unsigned sel_reg = config->ranges[j].selector_reg;
537 unsigned win_min = config->ranges[j].window_start;
538 unsigned win_max = win_min +
539 config->ranges[j].window_len - 1;
540
541 if (range_cfg->range_min <= sel_reg &&
542 sel_reg <= range_cfg->range_max) {
543 goto err_range;
544 }
545
546 if (!(win_max < range_cfg->range_min ||
547 win_min > range_cfg->range_max)) {
548 goto err_range;
549 }
550 }
551
552 new = kzalloc(sizeof(*new), GFP_KERNEL);
553 if (new == NULL) {
554 ret = -ENOMEM;
555 goto err_range;
556 }
557
558 new->range_min = range_cfg->range_min;
559 new->range_max = range_cfg->range_max;
560 new->selector_reg = range_cfg->selector_reg;
561 new->selector_mask = range_cfg->selector_mask;
562 new->selector_shift = range_cfg->selector_shift;
563 new->window_start = range_cfg->window_start;
564 new->window_len = range_cfg->window_len;
565
566 if (_regmap_range_add(map, new) == false) {
567 kfree(new);
568 goto err_range;
569 }
570
571 if (map->selector_work_buf == NULL) {
572 map->selector_work_buf =
573 kzalloc(map->format.buf_size, GFP_KERNEL);
574 if (map->selector_work_buf == NULL) {
575 ret = -ENOMEM;
576 goto err_range;
577 }
578 }
579 }
368 580
369 ret = regcache_init(map, config); 581 ret = regcache_init(map, config);
370 if (ret < 0) 582 if (ret < 0)
371 goto err_debugfs; 583 goto err_range;
584
585 regmap_debugfs_init(map, config->name);
372 586
373 /* Add a devres resource for dev_get_regmap() */ 587 /* Add a devres resource for dev_get_regmap() */
374 m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); 588 m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL);
375 if (!m) { 589 if (!m) {
376 ret = -ENOMEM; 590 ret = -ENOMEM;
377 goto err_cache; 591 goto err_debugfs;
378 } 592 }
379 *m = map; 593 *m = map;
380 devres_add(dev, m); 594 devres_add(dev, m);
381 595
382 return map; 596 return map;
383 597
384err_cache:
385 regcache_exit(map);
386err_debugfs: 598err_debugfs:
387 regmap_debugfs_exit(map); 599 regmap_debugfs_exit(map);
600 regcache_exit(map);
601err_range:
602 regmap_range_exit(map);
388 kfree(map->work_buf); 603 kfree(map->work_buf);
389err_map: 604err_map:
390 kfree(map); 605 kfree(map);
@@ -481,6 +696,7 @@ void regmap_exit(struct regmap *map)
481{ 696{
482 regcache_exit(map); 697 regcache_exit(map);
483 regmap_debugfs_exit(map); 698 regmap_debugfs_exit(map);
699 regmap_range_exit(map);
484 if (map->bus->free_context) 700 if (map->bus->free_context)
485 map->bus->free_context(map->bus_context); 701 map->bus->free_context(map->bus_context);
486 kfree(map->work_buf); 702 kfree(map->work_buf);
@@ -526,6 +742,57 @@ struct regmap *dev_get_regmap(struct device *dev, const char *name)
526} 742}
527EXPORT_SYMBOL_GPL(dev_get_regmap); 743EXPORT_SYMBOL_GPL(dev_get_regmap);
528 744
745static int _regmap_select_page(struct regmap *map, unsigned int *reg,
746 unsigned int val_num)
747{
748 struct regmap_range_node *range;
749 void *orig_work_buf;
750 unsigned int win_offset;
751 unsigned int win_page;
752 bool page_chg;
753 int ret;
754
755 range = _regmap_range_lookup(map, *reg);
756 if (range) {
757 win_offset = (*reg - range->range_min) % range->window_len;
758 win_page = (*reg - range->range_min) / range->window_len;
759
760 if (val_num > 1) {
761 /* Bulk write shouldn't cross range boundary */
762 if (*reg + val_num - 1 > range->range_max)
763 return -EINVAL;
764
765 /* ... or single page boundary */
766 if (val_num > range->window_len - win_offset)
767 return -EINVAL;
768 }
769
770 /* It is possible to have selector register inside data window.
771 In that case, selector register is located on every page and
772 it needs no page switching, when accessed alone. */
773 if (val_num > 1 ||
774 range->window_start + win_offset != range->selector_reg) {
775 /* Use separate work_buf during page switching */
776 orig_work_buf = map->work_buf;
777 map->work_buf = map->selector_work_buf;
778
779 ret = _regmap_update_bits(map, range->selector_reg,
780 range->selector_mask,
781 win_page << range->selector_shift,
782 &page_chg);
783
784 map->work_buf = orig_work_buf;
785
786 if (ret < 0)
787 return ret;
788 }
789
790 *reg = range->window_start + win_offset;
791 }
792
793 return 0;
794}
795
529static int _regmap_raw_write(struct regmap *map, unsigned int reg, 796static int _regmap_raw_write(struct regmap *map, unsigned int reg,
530 const void *val, size_t val_len) 797 const void *val, size_t val_len)
531{ 798{
@@ -563,6 +830,10 @@ static int _regmap_raw_write(struct regmap *map, unsigned int reg,
563 } 830 }
564 } 831 }
565 832
833 ret = _regmap_select_page(map, &reg, val_len / map->format.val_bytes);
834 if (ret < 0)
835 return ret;
836
566 map->format.format_reg(map->work_buf, reg, map->reg_shift); 837 map->format.format_reg(map->work_buf, reg, map->reg_shift);
567 838
568 u8[0] |= map->write_flag_mask; 839 u8[0] |= map->write_flag_mask;
@@ -623,9 +894,18 @@ int _regmap_write(struct regmap *map, unsigned int reg,
623 } 894 }
624 } 895 }
625 896
897#ifdef LOG_DEVICE
898 if (strcmp(dev_name(map->dev), LOG_DEVICE) == 0)
899 dev_info(map->dev, "%x <= %x\n", reg, val);
900#endif
901
626 trace_regmap_reg_write(map->dev, reg, val); 902 trace_regmap_reg_write(map->dev, reg, val);
627 903
628 if (map->format.format_write) { 904 if (map->format.format_write) {
905 ret = _regmap_select_page(map, &reg, 1);
906 if (ret < 0)
907 return ret;
908
629 map->format.format_write(map, reg, val); 909 map->format.format_write(map, reg, val);
630 910
631 trace_regmap_hw_write_start(map->dev, reg, 1); 911 trace_regmap_hw_write_start(map->dev, reg, 1);
@@ -783,6 +1063,10 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
783 u8 *u8 = map->work_buf; 1063 u8 *u8 = map->work_buf;
784 int ret; 1064 int ret;
785 1065
1066 ret = _regmap_select_page(map, &reg, val_len / map->format.val_bytes);
1067 if (ret < 0)
1068 return ret;
1069
786 map->format.format_reg(map->work_buf, reg, map->reg_shift); 1070 map->format.format_reg(map->work_buf, reg, map->reg_shift);
787 1071
788 /* 1072 /*
@@ -826,6 +1110,12 @@ static int _regmap_read(struct regmap *map, unsigned int reg,
826 ret = _regmap_raw_read(map, reg, map->work_buf, map->format.val_bytes); 1110 ret = _regmap_raw_read(map, reg, map->work_buf, map->format.val_bytes);
827 if (ret == 0) { 1111 if (ret == 0) {
828 *val = map->format.parse_val(map->work_buf); 1112 *val = map->format.parse_val(map->work_buf);
1113
1114#ifdef LOG_DEVICE
1115 if (strcmp(dev_name(map->dev), LOG_DEVICE) == 0)
1116 dev_info(map->dev, "%x => %x\n", reg, *val);
1117#endif
1118
829 trace_regmap_reg_read(map->dev, reg, *val); 1119 trace_regmap_reg_read(map->dev, reg, *val);
830 } 1120 }
831 1121
@@ -982,11 +1272,9 @@ static int _regmap_update_bits(struct regmap *map, unsigned int reg,
982 int ret; 1272 int ret;
983 unsigned int tmp, orig; 1273 unsigned int tmp, orig;
984 1274
985 map->lock(map);
986
987 ret = _regmap_read(map, reg, &orig); 1275 ret = _regmap_read(map, reg, &orig);
988 if (ret != 0) 1276 if (ret != 0)
989 goto out; 1277 return ret;
990 1278
991 tmp = orig & ~mask; 1279 tmp = orig & ~mask;
992 tmp |= val & mask; 1280 tmp |= val & mask;
@@ -998,9 +1286,6 @@ static int _regmap_update_bits(struct regmap *map, unsigned int reg,
998 *change = false; 1286 *change = false;
999 } 1287 }
1000 1288
1001out:
1002 map->unlock(map);
1003
1004 return ret; 1289 return ret;
1005} 1290}
1006 1291
@@ -1018,7 +1303,13 @@ int regmap_update_bits(struct regmap *map, unsigned int reg,
1018 unsigned int mask, unsigned int val) 1303 unsigned int mask, unsigned int val)
1019{ 1304{
1020 bool change; 1305 bool change;
1021 return _regmap_update_bits(map, reg, mask, val, &change); 1306 int ret;
1307
1308 map->lock(map);
1309 ret = _regmap_update_bits(map, reg, mask, val, &change);
1310 map->unlock(map);
1311
1312 return ret;
1022} 1313}
1023EXPORT_SYMBOL_GPL(regmap_update_bits); 1314EXPORT_SYMBOL_GPL(regmap_update_bits);
1024 1315
@@ -1038,7 +1329,12 @@ int regmap_update_bits_check(struct regmap *map, unsigned int reg,
1038 unsigned int mask, unsigned int val, 1329 unsigned int mask, unsigned int val,
1039 bool *change) 1330 bool *change)
1040{ 1331{
1041 return _regmap_update_bits(map, reg, mask, val, change); 1332 int ret;
1333
1334 map->lock(map);
1335 ret = _regmap_update_bits(map, reg, mask, val, change);
1336 map->unlock(map);
1337 return ret;
1042} 1338}
1043EXPORT_SYMBOL_GPL(regmap_update_bits_check); 1339EXPORT_SYMBOL_GPL(regmap_update_bits_check);
1044 1340
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
index b5c5ff53cb57..fcb956bb4b4c 100644
--- a/drivers/block/drbd/drbd_bitmap.c
+++ b/drivers/block/drbd/drbd_bitmap.c
@@ -1475,10 +1475,17 @@ void _drbd_bm_set_bits(struct drbd_conf *mdev, const unsigned long s, const unsi
1475 first_word = 0; 1475 first_word = 0;
1476 spin_lock_irq(&b->bm_lock); 1476 spin_lock_irq(&b->bm_lock);
1477 } 1477 }
1478
1479 /* last page (respectively only page, for first page == last page) */ 1478 /* last page (respectively only page, for first page == last page) */
1480 last_word = MLPP(el >> LN2_BPL); 1479 last_word = MLPP(el >> LN2_BPL);
1481 bm_set_full_words_within_one_page(mdev->bitmap, last_page, first_word, last_word); 1480
1481 /* consider bitmap->bm_bits = 32768, bitmap->bm_number_of_pages = 1. (or multiples).
1482 * ==> e = 32767, el = 32768, last_page = 2,
1483 * and now last_word = 0.
1484 * We do not want to touch last_page in this case,
1485 * as we did not allocate it, it is not present in bitmap->bm_pages.
1486 */
1487 if (last_word)
1488 bm_set_full_words_within_one_page(mdev->bitmap, last_page, first_word, last_word);
1482 1489
1483 /* possibly trailing bits. 1490 /* possibly trailing bits.
1484 * example: (e & 63) == 63, el will be e+1. 1491 * example: (e & 63) == 63, el will be e+1.
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 9c5c84946b05..8e93a6ac9bb6 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -472,12 +472,17 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
472 req->rq_state |= RQ_LOCAL_COMPLETED; 472 req->rq_state |= RQ_LOCAL_COMPLETED;
473 req->rq_state &= ~RQ_LOCAL_PENDING; 473 req->rq_state &= ~RQ_LOCAL_PENDING;
474 474
475 D_ASSERT(!(req->rq_state & RQ_NET_MASK)); 475 if (req->rq_state & RQ_LOCAL_ABORTED) {
476 _req_may_be_done(req, m);
477 break;
478 }
476 479
477 __drbd_chk_io_error(mdev, false); 480 __drbd_chk_io_error(mdev, false);
478 481
479 goto_queue_for_net_read: 482 goto_queue_for_net_read:
480 483
484 D_ASSERT(!(req->rq_state & RQ_NET_MASK));
485
481 /* no point in retrying if there is no good remote data, 486 /* no point in retrying if there is no good remote data,
482 * or we have no connection. */ 487 * or we have no connection. */
483 if (mdev->state.pdsk != D_UP_TO_DATE) { 488 if (mdev->state.pdsk != D_UP_TO_DATE) {
@@ -765,6 +770,40 @@ static int drbd_may_do_local_read(struct drbd_conf *mdev, sector_t sector, int s
765 return 0 == drbd_bm_count_bits(mdev, sbnr, ebnr); 770 return 0 == drbd_bm_count_bits(mdev, sbnr, ebnr);
766} 771}
767 772
773static void maybe_pull_ahead(struct drbd_conf *mdev)
774{
775 int congested = 0;
776
777 /* If I don't even have good local storage, we can not reasonably try
778 * to pull ahead of the peer. We also need the local reference to make
779 * sure mdev->act_log is there.
780 * Note: caller has to make sure that net_conf is there.
781 */
782 if (!get_ldev_if_state(mdev, D_UP_TO_DATE))
783 return;
784
785 if (mdev->net_conf->cong_fill &&
786 atomic_read(&mdev->ap_in_flight) >= mdev->net_conf->cong_fill) {
787 dev_info(DEV, "Congestion-fill threshold reached\n");
788 congested = 1;
789 }
790
791 if (mdev->act_log->used >= mdev->net_conf->cong_extents) {
792 dev_info(DEV, "Congestion-extents threshold reached\n");
793 congested = 1;
794 }
795
796 if (congested) {
797 queue_barrier(mdev); /* last barrier, after mirrored writes */
798
799 if (mdev->net_conf->on_congestion == OC_PULL_AHEAD)
800 _drbd_set_state(_NS(mdev, conn, C_AHEAD), 0, NULL);
801 else /*mdev->net_conf->on_congestion == OC_DISCONNECT */
802 _drbd_set_state(_NS(mdev, conn, C_DISCONNECTING), 0, NULL);
803 }
804 put_ldev(mdev);
805}
806
768static int drbd_make_request_common(struct drbd_conf *mdev, struct bio *bio, unsigned long start_time) 807static int drbd_make_request_common(struct drbd_conf *mdev, struct bio *bio, unsigned long start_time)
769{ 808{
770 const int rw = bio_rw(bio); 809 const int rw = bio_rw(bio);
@@ -972,29 +1011,8 @@ allocate_barrier:
972 _req_mod(req, queue_for_send_oos); 1011 _req_mod(req, queue_for_send_oos);
973 1012
974 if (remote && 1013 if (remote &&
975 mdev->net_conf->on_congestion != OC_BLOCK && mdev->agreed_pro_version >= 96) { 1014 mdev->net_conf->on_congestion != OC_BLOCK && mdev->agreed_pro_version >= 96)
976 int congested = 0; 1015 maybe_pull_ahead(mdev);
977
978 if (mdev->net_conf->cong_fill &&
979 atomic_read(&mdev->ap_in_flight) >= mdev->net_conf->cong_fill) {
980 dev_info(DEV, "Congestion-fill threshold reached\n");
981 congested = 1;
982 }
983
984 if (mdev->act_log->used >= mdev->net_conf->cong_extents) {
985 dev_info(DEV, "Congestion-extents threshold reached\n");
986 congested = 1;
987 }
988
989 if (congested) {
990 queue_barrier(mdev); /* last barrier, after mirrored writes */
991
992 if (mdev->net_conf->on_congestion == OC_PULL_AHEAD)
993 _drbd_set_state(_NS(mdev, conn, C_AHEAD), 0, NULL);
994 else /*mdev->net_conf->on_congestion == OC_DISCONNECT */
995 _drbd_set_state(_NS(mdev, conn, C_DISCONNECTING), 0, NULL);
996 }
997 }
998 1016
999 spin_unlock_irq(&mdev->req_lock); 1017 spin_unlock_irq(&mdev->req_lock);
1000 kfree(b); /* if someone else has beaten us to it... */ 1018 kfree(b); /* if someone else has beaten us to it... */
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index cce7df367b79..553f43a90953 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -671,6 +671,7 @@ static void __reschedule_timeout(int drive, const char *message)
671 671
672 if (drive == current_reqD) 672 if (drive == current_reqD)
673 drive = current_drive; 673 drive = current_drive;
674 __cancel_delayed_work(&fd_timeout);
674 675
675 if (drive < 0 || drive >= N_DRIVE) { 676 if (drive < 0 || drive >= N_DRIVE) {
676 delay = 20UL * HZ; 677 delay = 20UL * HZ;
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index bbca966f8f66..3bba65510d23 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1597,14 +1597,12 @@ static int loop_add(struct loop_device **l, int i)
1597 struct gendisk *disk; 1597 struct gendisk *disk;
1598 int err; 1598 int err;
1599 1599
1600 err = -ENOMEM;
1600 lo = kzalloc(sizeof(*lo), GFP_KERNEL); 1601 lo = kzalloc(sizeof(*lo), GFP_KERNEL);
1601 if (!lo) { 1602 if (!lo)
1602 err = -ENOMEM;
1603 goto out; 1603 goto out;
1604 }
1605 1604
1606 err = idr_pre_get(&loop_index_idr, GFP_KERNEL); 1605 if (!idr_pre_get(&loop_index_idr, GFP_KERNEL))
1607 if (err < 0)
1608 goto out_free_dev; 1606 goto out_free_dev;
1609 1607
1610 if (i >= 0) { 1608 if (i >= 0) {
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
index 76fa3deaee84..1788f491e0fb 100644
--- a/drivers/block/mg_disk.c
+++ b/drivers/block/mg_disk.c
@@ -780,9 +780,9 @@ static const struct block_device_operations mg_disk_ops = {
780 .getgeo = mg_getgeo 780 .getgeo = mg_getgeo
781}; 781};
782 782
783static int mg_suspend(struct platform_device *plat_dev, pm_message_t state) 783static int mg_suspend(struct device *dev)
784{ 784{
785 struct mg_drv_data *prv_data = plat_dev->dev.platform_data; 785 struct mg_drv_data *prv_data = dev->platform_data;
786 struct mg_host *host = prv_data->host; 786 struct mg_host *host = prv_data->host;
787 787
788 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD)) 788 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
@@ -804,9 +804,9 @@ static int mg_suspend(struct platform_device *plat_dev, pm_message_t state)
804 return 0; 804 return 0;
805} 805}
806 806
807static int mg_resume(struct platform_device *plat_dev) 807static int mg_resume(struct device *dev)
808{ 808{
809 struct mg_drv_data *prv_data = plat_dev->dev.platform_data; 809 struct mg_drv_data *prv_data = dev->platform_data;
810 struct mg_host *host = prv_data->host; 810 struct mg_host *host = prv_data->host;
811 811
812 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD)) 812 if (mg_wait(host, MG_STAT_READY, MG_TMAX_CONF_TO_CMD))
@@ -825,6 +825,8 @@ static int mg_resume(struct platform_device *plat_dev)
825 return 0; 825 return 0;
826} 826}
827 827
828static SIMPLE_DEV_PM_OPS(mg_pm, mg_suspend, mg_resume);
829
828static int mg_probe(struct platform_device *plat_dev) 830static int mg_probe(struct platform_device *plat_dev)
829{ 831{
830 struct mg_host *host; 832 struct mg_host *host;
@@ -1074,11 +1076,10 @@ static int mg_remove(struct platform_device *plat_dev)
1074static struct platform_driver mg_disk_driver = { 1076static struct platform_driver mg_disk_driver = {
1075 .probe = mg_probe, 1077 .probe = mg_probe,
1076 .remove = mg_remove, 1078 .remove = mg_remove,
1077 .suspend = mg_suspend,
1078 .resume = mg_resume,
1079 .driver = { 1079 .driver = {
1080 .name = MG_DEV_NAME, 1080 .name = MG_DEV_NAME,
1081 .owner = THIS_MODULE, 1081 .owner = THIS_MODULE,
1082 .pm = &mg_pm,
1082 } 1083 }
1083}; 1084};
1084 1085
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 264bc77dcb91..a8fddeb3d638 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -37,6 +37,7 @@
37#include <linux/kthread.h> 37#include <linux/kthread.h>
38#include <../drivers/ata/ahci.h> 38#include <../drivers/ata/ahci.h>
39#include <linux/export.h> 39#include <linux/export.h>
40#include <linux/debugfs.h>
40#include "mtip32xx.h" 41#include "mtip32xx.h"
41 42
42#define HW_CMD_SLOT_SZ (MTIP_MAX_COMMAND_SLOTS * 32) 43#define HW_CMD_SLOT_SZ (MTIP_MAX_COMMAND_SLOTS * 32)
@@ -85,6 +86,7 @@ static int instance;
85 * allocated in mtip_init(). 86 * allocated in mtip_init().
86 */ 87 */
87static int mtip_major; 88static int mtip_major;
89static struct dentry *dfs_parent;
88 90
89static DEFINE_SPINLOCK(rssd_index_lock); 91static DEFINE_SPINLOCK(rssd_index_lock);
90static DEFINE_IDA(rssd_index_ida); 92static DEFINE_IDA(rssd_index_ida);
@@ -2546,7 +2548,7 @@ static struct scatterlist *mtip_hw_get_scatterlist(struct driver_data *dd,
2546} 2548}
2547 2549
2548/* 2550/*
2549 * Sysfs register/status dump. 2551 * Sysfs status dump.
2550 * 2552 *
2551 * @dev Pointer to the device structure, passed by the kernrel. 2553 * @dev Pointer to the device structure, passed by the kernrel.
2552 * @attr Pointer to the device_attribute structure passed by the kernel. 2554 * @attr Pointer to the device_attribute structure passed by the kernel.
@@ -2555,45 +2557,68 @@ static struct scatterlist *mtip_hw_get_scatterlist(struct driver_data *dd,
2555 * return value 2557 * return value
2556 * The size, in bytes, of the data copied into buf. 2558 * The size, in bytes, of the data copied into buf.
2557 */ 2559 */
2558static ssize_t mtip_hw_show_registers(struct device *dev, 2560static ssize_t mtip_hw_show_status(struct device *dev,
2559 struct device_attribute *attr, 2561 struct device_attribute *attr,
2560 char *buf) 2562 char *buf)
2561{ 2563{
2562 u32 group_allocated;
2563 struct driver_data *dd = dev_to_disk(dev)->private_data; 2564 struct driver_data *dd = dev_to_disk(dev)->private_data;
2564 int size = 0; 2565 int size = 0;
2566
2567 if (test_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag))
2568 size += sprintf(buf, "%s", "thermal_shutdown\n");
2569 else if (test_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag))
2570 size += sprintf(buf, "%s", "write_protect\n");
2571 else
2572 size += sprintf(buf, "%s", "online\n");
2573
2574 return size;
2575}
2576
2577static DEVICE_ATTR(status, S_IRUGO, mtip_hw_show_status, NULL);
2578
2579static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf,
2580 size_t len, loff_t *offset)
2581{
2582 struct driver_data *dd = (struct driver_data *)f->private_data;
2583 char buf[MTIP_DFS_MAX_BUF_SIZE];
2584 u32 group_allocated;
2585 int size = *offset;
2565 int n; 2586 int n;
2566 2587
2567 size += sprintf(&buf[size], "Hardware\n--------\n"); 2588 if (!len || size)
2568 size += sprintf(&buf[size], "S ACTive : [ 0x"); 2589 return 0;
2590
2591 if (size < 0)
2592 return -EINVAL;
2593
2594 size += sprintf(&buf[size], "H/ S ACTive : [ 0x");
2569 2595
2570 for (n = dd->slot_groups-1; n >= 0; n--) 2596 for (n = dd->slot_groups-1; n >= 0; n--)
2571 size += sprintf(&buf[size], "%08X ", 2597 size += sprintf(&buf[size], "%08X ",
2572 readl(dd->port->s_active[n])); 2598 readl(dd->port->s_active[n]));
2573 2599
2574 size += sprintf(&buf[size], "]\n"); 2600 size += sprintf(&buf[size], "]\n");
2575 size += sprintf(&buf[size], "Command Issue : [ 0x"); 2601 size += sprintf(&buf[size], "H/ Command Issue : [ 0x");
2576 2602
2577 for (n = dd->slot_groups-1; n >= 0; n--) 2603 for (n = dd->slot_groups-1; n >= 0; n--)
2578 size += sprintf(&buf[size], "%08X ", 2604 size += sprintf(&buf[size], "%08X ",
2579 readl(dd->port->cmd_issue[n])); 2605 readl(dd->port->cmd_issue[n]));
2580 2606
2581 size += sprintf(&buf[size], "]\n"); 2607 size += sprintf(&buf[size], "]\n");
2582 size += sprintf(&buf[size], "Completed : [ 0x"); 2608 size += sprintf(&buf[size], "H/ Completed : [ 0x");
2583 2609
2584 for (n = dd->slot_groups-1; n >= 0; n--) 2610 for (n = dd->slot_groups-1; n >= 0; n--)
2585 size += sprintf(&buf[size], "%08X ", 2611 size += sprintf(&buf[size], "%08X ",
2586 readl(dd->port->completed[n])); 2612 readl(dd->port->completed[n]));
2587 2613
2588 size += sprintf(&buf[size], "]\n"); 2614 size += sprintf(&buf[size], "]\n");
2589 size += sprintf(&buf[size], "PORT IRQ STAT : [ 0x%08X ]\n", 2615 size += sprintf(&buf[size], "H/ PORT IRQ STAT : [ 0x%08X ]\n",
2590 readl(dd->port->mmio + PORT_IRQ_STAT)); 2616 readl(dd->port->mmio + PORT_IRQ_STAT));
2591 size += sprintf(&buf[size], "HOST IRQ STAT : [ 0x%08X ]\n", 2617 size += sprintf(&buf[size], "H/ HOST IRQ STAT : [ 0x%08X ]\n",
2592 readl(dd->mmio + HOST_IRQ_STAT)); 2618 readl(dd->mmio + HOST_IRQ_STAT));
2593 size += sprintf(&buf[size], "\n"); 2619 size += sprintf(&buf[size], "\n");
2594 2620
2595 size += sprintf(&buf[size], "Local\n-----\n"); 2621 size += sprintf(&buf[size], "L/ Allocated : [ 0x");
2596 size += sprintf(&buf[size], "Allocated : [ 0x");
2597 2622
2598 for (n = dd->slot_groups-1; n >= 0; n--) { 2623 for (n = dd->slot_groups-1; n >= 0; n--) {
2599 if (sizeof(long) > sizeof(u32)) 2624 if (sizeof(long) > sizeof(u32))
@@ -2605,7 +2630,7 @@ static ssize_t mtip_hw_show_registers(struct device *dev,
2605 } 2630 }
2606 size += sprintf(&buf[size], "]\n"); 2631 size += sprintf(&buf[size], "]\n");
2607 2632
2608 size += sprintf(&buf[size], "Commands in Q: [ 0x"); 2633 size += sprintf(&buf[size], "L/ Commands in Q : [ 0x");
2609 2634
2610 for (n = dd->slot_groups-1; n >= 0; n--) { 2635 for (n = dd->slot_groups-1; n >= 0; n--) {
2611 if (sizeof(long) > sizeof(u32)) 2636 if (sizeof(long) > sizeof(u32))
@@ -2617,44 +2642,53 @@ static ssize_t mtip_hw_show_registers(struct device *dev,
2617 } 2642 }
2618 size += sprintf(&buf[size], "]\n"); 2643 size += sprintf(&buf[size], "]\n");
2619 2644
2620 return size; 2645 *offset = size <= len ? size : len;
2646 size = copy_to_user(ubuf, buf, *offset);
2647 if (size)
2648 return -EFAULT;
2649
2650 return *offset;
2621} 2651}
2622 2652
2623static ssize_t mtip_hw_show_status(struct device *dev, 2653static ssize_t mtip_hw_read_flags(struct file *f, char __user *ubuf,
2624 struct device_attribute *attr, 2654 size_t len, loff_t *offset)
2625 char *buf)
2626{ 2655{
2627 struct driver_data *dd = dev_to_disk(dev)->private_data; 2656 struct driver_data *dd = (struct driver_data *)f->private_data;
2628 int size = 0; 2657 char buf[MTIP_DFS_MAX_BUF_SIZE];
2658 int size = *offset;
2629 2659
2630 if (test_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag)) 2660 if (!len || size)
2631 size += sprintf(buf, "%s", "thermal_shutdown\n"); 2661 return 0;
2632 else if (test_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag))
2633 size += sprintf(buf, "%s", "write_protect\n");
2634 else
2635 size += sprintf(buf, "%s", "online\n");
2636
2637 return size;
2638}
2639 2662
2640static ssize_t mtip_hw_show_flags(struct device *dev, 2663 if (size < 0)
2641 struct device_attribute *attr, 2664 return -EINVAL;
2642 char *buf)
2643{
2644 struct driver_data *dd = dev_to_disk(dev)->private_data;
2645 int size = 0;
2646 2665
2647 size += sprintf(&buf[size], "Flag in port struct : [ %08lX ]\n", 2666 size += sprintf(&buf[size], "Flag-port : [ %08lX ]\n",
2648 dd->port->flags); 2667 dd->port->flags);
2649 size += sprintf(&buf[size], "Flag in dd struct : [ %08lX ]\n", 2668 size += sprintf(&buf[size], "Flag-dd : [ %08lX ]\n",
2650 dd->dd_flag); 2669 dd->dd_flag);
2651 2670
2652 return size; 2671 *offset = size <= len ? size : len;
2672 size = copy_to_user(ubuf, buf, *offset);
2673 if (size)
2674 return -EFAULT;
2675
2676 return *offset;
2653} 2677}
2654 2678
2655static DEVICE_ATTR(registers, S_IRUGO, mtip_hw_show_registers, NULL); 2679static const struct file_operations mtip_regs_fops = {
2656static DEVICE_ATTR(status, S_IRUGO, mtip_hw_show_status, NULL); 2680 .owner = THIS_MODULE,
2657static DEVICE_ATTR(flags, S_IRUGO, mtip_hw_show_flags, NULL); 2681 .open = simple_open,
2682 .read = mtip_hw_read_registers,
2683 .llseek = no_llseek,
2684};
2685
2686static const struct file_operations mtip_flags_fops = {
2687 .owner = THIS_MODULE,
2688 .open = simple_open,
2689 .read = mtip_hw_read_flags,
2690 .llseek = no_llseek,
2691};
2658 2692
2659/* 2693/*
2660 * Create the sysfs related attributes. 2694 * Create the sysfs related attributes.
@@ -2671,15 +2705,9 @@ static int mtip_hw_sysfs_init(struct driver_data *dd, struct kobject *kobj)
2671 if (!kobj || !dd) 2705 if (!kobj || !dd)
2672 return -EINVAL; 2706 return -EINVAL;
2673 2707
2674 if (sysfs_create_file(kobj, &dev_attr_registers.attr))
2675 dev_warn(&dd->pdev->dev,
2676 "Error creating 'registers' sysfs entry\n");
2677 if (sysfs_create_file(kobj, &dev_attr_status.attr)) 2708 if (sysfs_create_file(kobj, &dev_attr_status.attr))
2678 dev_warn(&dd->pdev->dev, 2709 dev_warn(&dd->pdev->dev,
2679 "Error creating 'status' sysfs entry\n"); 2710 "Error creating 'status' sysfs entry\n");
2680 if (sysfs_create_file(kobj, &dev_attr_flags.attr))
2681 dev_warn(&dd->pdev->dev,
2682 "Error creating 'flags' sysfs entry\n");
2683 return 0; 2711 return 0;
2684} 2712}
2685 2713
@@ -2698,13 +2726,39 @@ static int mtip_hw_sysfs_exit(struct driver_data *dd, struct kobject *kobj)
2698 if (!kobj || !dd) 2726 if (!kobj || !dd)
2699 return -EINVAL; 2727 return -EINVAL;
2700 2728
2701 sysfs_remove_file(kobj, &dev_attr_registers.attr);
2702 sysfs_remove_file(kobj, &dev_attr_status.attr); 2729 sysfs_remove_file(kobj, &dev_attr_status.attr);
2703 sysfs_remove_file(kobj, &dev_attr_flags.attr);
2704 2730
2705 return 0; 2731 return 0;
2706} 2732}
2707 2733
2734static int mtip_hw_debugfs_init(struct driver_data *dd)
2735{
2736 if (!dfs_parent)
2737 return -1;
2738
2739 dd->dfs_node = debugfs_create_dir(dd->disk->disk_name, dfs_parent);
2740 if (IS_ERR_OR_NULL(dd->dfs_node)) {
2741 dev_warn(&dd->pdev->dev,
2742 "Error creating node %s under debugfs\n",
2743 dd->disk->disk_name);
2744 dd->dfs_node = NULL;
2745 return -1;
2746 }
2747
2748 debugfs_create_file("flags", S_IRUGO, dd->dfs_node, dd,
2749 &mtip_flags_fops);
2750 debugfs_create_file("registers", S_IRUGO, dd->dfs_node, dd,
2751 &mtip_regs_fops);
2752
2753 return 0;
2754}
2755
2756static void mtip_hw_debugfs_exit(struct driver_data *dd)
2757{
2758 debugfs_remove_recursive(dd->dfs_node);
2759}
2760
2761
2708/* 2762/*
2709 * Perform any init/resume time hardware setup 2763 * Perform any init/resume time hardware setup
2710 * 2764 *
@@ -3730,6 +3784,7 @@ skip_create_disk:
3730 mtip_hw_sysfs_init(dd, kobj); 3784 mtip_hw_sysfs_init(dd, kobj);
3731 kobject_put(kobj); 3785 kobject_put(kobj);
3732 } 3786 }
3787 mtip_hw_debugfs_init(dd);
3733 3788
3734 if (dd->mtip_svc_handler) { 3789 if (dd->mtip_svc_handler) {
3735 set_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag); 3790 set_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag);
@@ -3755,6 +3810,8 @@ start_service_thread:
3755 return rv; 3810 return rv;
3756 3811
3757kthread_run_error: 3812kthread_run_error:
3813 mtip_hw_debugfs_exit(dd);
3814
3758 /* Delete our gendisk. This also removes the device from /dev */ 3815 /* Delete our gendisk. This also removes the device from /dev */
3759 del_gendisk(dd->disk); 3816 del_gendisk(dd->disk);
3760 3817
@@ -3805,6 +3862,7 @@ static int mtip_block_remove(struct driver_data *dd)
3805 kobject_put(kobj); 3862 kobject_put(kobj);
3806 } 3863 }
3807 } 3864 }
3865 mtip_hw_debugfs_exit(dd);
3808 3866
3809 /* 3867 /*
3810 * Delete our gendisk structure. This also removes the device 3868 * Delete our gendisk structure. This also removes the device
@@ -4152,10 +4210,20 @@ static int __init mtip_init(void)
4152 } 4210 }
4153 mtip_major = error; 4211 mtip_major = error;
4154 4212
4213 if (!dfs_parent) {
4214 dfs_parent = debugfs_create_dir("rssd", NULL);
4215 if (IS_ERR_OR_NULL(dfs_parent)) {
4216 printk(KERN_WARNING "Error creating debugfs parent\n");
4217 dfs_parent = NULL;
4218 }
4219 }
4220
4155 /* Register our PCI operations. */ 4221 /* Register our PCI operations. */
4156 error = pci_register_driver(&mtip_pci_driver); 4222 error = pci_register_driver(&mtip_pci_driver);
4157 if (error) 4223 if (error) {
4224 debugfs_remove(dfs_parent);
4158 unregister_blkdev(mtip_major, MTIP_DRV_NAME); 4225 unregister_blkdev(mtip_major, MTIP_DRV_NAME);
4226 }
4159 4227
4160 return error; 4228 return error;
4161} 4229}
@@ -4172,6 +4240,8 @@ static int __init mtip_init(void)
4172 */ 4240 */
4173static void __exit mtip_exit(void) 4241static void __exit mtip_exit(void)
4174{ 4242{
4243 debugfs_remove_recursive(dfs_parent);
4244
4175 /* Release the allocated major block device number. */ 4245 /* Release the allocated major block device number. */
4176 unregister_blkdev(mtip_major, MTIP_DRV_NAME); 4246 unregister_blkdev(mtip_major, MTIP_DRV_NAME);
4177 4247
diff --git a/drivers/block/mtip32xx/mtip32xx.h b/drivers/block/mtip32xx/mtip32xx.h
index b2c88da26b2a..f51fc23d17bb 100644
--- a/drivers/block/mtip32xx/mtip32xx.h
+++ b/drivers/block/mtip32xx/mtip32xx.h
@@ -26,7 +26,6 @@
26#include <linux/ata.h> 26#include <linux/ata.h>
27#include <linux/interrupt.h> 27#include <linux/interrupt.h>
28#include <linux/genhd.h> 28#include <linux/genhd.h>
29#include <linux/version.h>
30 29
31/* Offset of Subsystem Device ID in pci confoguration space */ 30/* Offset of Subsystem Device ID in pci confoguration space */
32#define PCI_SUBSYSTEM_DEVICEID 0x2E 31#define PCI_SUBSYSTEM_DEVICEID 0x2E
@@ -111,6 +110,8 @@
111 #define dbg_printk(format, arg...) 110 #define dbg_printk(format, arg...)
112#endif 111#endif
113 112
113#define MTIP_DFS_MAX_BUF_SIZE 1024
114
114#define __force_bit2int (unsigned int __force) 115#define __force_bit2int (unsigned int __force)
115 116
116enum { 117enum {
@@ -447,6 +448,8 @@ struct driver_data {
447 unsigned long dd_flag; /* NOTE: use atomic bit operations on this */ 448 unsigned long dd_flag; /* NOTE: use atomic bit operations on this */
448 449
449 struct task_struct *mtip_svc_handler; /* task_struct of svc thd */ 450 struct task_struct *mtip_svc_handler; /* task_struct of svc thd */
451
452 struct dentry *dfs_node;
450}; 453};
451 454
452#endif 455#endif
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 65665c9c42c6..8f428a8ab003 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -499,7 +499,7 @@ static int rbd_header_from_disk(struct rbd_image_header *header,
499 / sizeof (*ondisk)) 499 / sizeof (*ondisk))
500 return -EINVAL; 500 return -EINVAL;
501 header->snapc = kmalloc(sizeof(struct ceph_snap_context) + 501 header->snapc = kmalloc(sizeof(struct ceph_snap_context) +
502 snap_count * sizeof (*ondisk), 502 snap_count * sizeof(u64),
503 gfp_flags); 503 gfp_flags);
504 if (!header->snapc) 504 if (!header->snapc)
505 return -ENOMEM; 505 return -ENOMEM;
@@ -977,7 +977,7 @@ static void rbd_req_cb(struct ceph_osd_request *req, struct ceph_msg *msg)
977 op = (void *)(replyhead + 1); 977 op = (void *)(replyhead + 1);
978 rc = le32_to_cpu(replyhead->result); 978 rc = le32_to_cpu(replyhead->result);
979 bytes = le64_to_cpu(op->extent.length); 979 bytes = le64_to_cpu(op->extent.length);
980 read_op = (le32_to_cpu(op->op) == CEPH_OSD_OP_READ); 980 read_op = (le16_to_cpu(op->op) == CEPH_OSD_OP_READ);
981 981
982 dout("rbd_req_cb bytes=%lld readop=%d rc=%d\n", bytes, read_op, rc); 982 dout("rbd_req_cb bytes=%lld readop=%d rc=%d\n", bytes, read_op, rc);
983 983
diff --git a/drivers/block/umem.c b/drivers/block/umem.c
index aa2712060bfb..9a72277a31df 100644
--- a/drivers/block/umem.c
+++ b/drivers/block/umem.c
@@ -513,6 +513,44 @@ static void process_page(unsigned long data)
513 } 513 }
514} 514}
515 515
516struct mm_plug_cb {
517 struct blk_plug_cb cb;
518 struct cardinfo *card;
519};
520
521static void mm_unplug(struct blk_plug_cb *cb)
522{
523 struct mm_plug_cb *mmcb = container_of(cb, struct mm_plug_cb, cb);
524
525 spin_lock_irq(&mmcb->card->lock);
526 activate(mmcb->card);
527 spin_unlock_irq(&mmcb->card->lock);
528 kfree(mmcb);
529}
530
531static int mm_check_plugged(struct cardinfo *card)
532{
533 struct blk_plug *plug = current->plug;
534 struct mm_plug_cb *mmcb;
535
536 if (!plug)
537 return 0;
538
539 list_for_each_entry(mmcb, &plug->cb_list, cb.list) {
540 if (mmcb->cb.callback == mm_unplug && mmcb->card == card)
541 return 1;
542 }
543 /* Not currently on the callback list */
544 mmcb = kmalloc(sizeof(*mmcb), GFP_ATOMIC);
545 if (!mmcb)
546 return 0;
547
548 mmcb->card = card;
549 mmcb->cb.callback = mm_unplug;
550 list_add(&mmcb->cb.list, &plug->cb_list);
551 return 1;
552}
553
516static void mm_make_request(struct request_queue *q, struct bio *bio) 554static void mm_make_request(struct request_queue *q, struct bio *bio)
517{ 555{
518 struct cardinfo *card = q->queuedata; 556 struct cardinfo *card = q->queuedata;
@@ -523,6 +561,8 @@ static void mm_make_request(struct request_queue *q, struct bio *bio)
523 *card->biotail = bio; 561 *card->biotail = bio;
524 bio->bi_next = NULL; 562 bio->bi_next = NULL;
525 card->biotail = &bio->bi_next; 563 card->biotail = &bio->bi_next;
564 if (bio->bi_rw & REQ_SYNC || !mm_check_plugged(card))
565 activate(card);
526 spin_unlock_irq(&card->lock); 566 spin_unlock_irq(&card->lock);
527 567
528 return; 568 return;
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index 773cf27dc23f..9ad3b5ec1dc1 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -257,6 +257,7 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,
257 break; 257 break;
258 case BLKIF_OP_DISCARD: 258 case BLKIF_OP_DISCARD:
259 dst->u.discard.flag = src->u.discard.flag; 259 dst->u.discard.flag = src->u.discard.flag;
260 dst->u.discard.id = src->u.discard.id;
260 dst->u.discard.sector_number = src->u.discard.sector_number; 261 dst->u.discard.sector_number = src->u.discard.sector_number;
261 dst->u.discard.nr_sectors = src->u.discard.nr_sectors; 262 dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
262 break; 263 break;
@@ -287,6 +288,7 @@ static inline void blkif_get_x86_64_req(struct blkif_request *dst,
287 break; 288 break;
288 case BLKIF_OP_DISCARD: 289 case BLKIF_OP_DISCARD:
289 dst->u.discard.flag = src->u.discard.flag; 290 dst->u.discard.flag = src->u.discard.flag;
291 dst->u.discard.id = src->u.discard.id;
290 dst->u.discard.sector_number = src->u.discard.sector_number; 292 dst->u.discard.sector_number = src->u.discard.sector_number;
291 dst->u.discard.nr_sectors = src->u.discard.nr_sectors; 293 dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
292 break; 294 break;
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 60eed4bdd2e4..e4fb3374dcd2 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -141,14 +141,36 @@ static int get_id_from_freelist(struct blkfront_info *info)
141 return free; 141 return free;
142} 142}
143 143
144static void add_id_to_freelist(struct blkfront_info *info, 144static int add_id_to_freelist(struct blkfront_info *info,
145 unsigned long id) 145 unsigned long id)
146{ 146{
147 if (info->shadow[id].req.u.rw.id != id)
148 return -EINVAL;
149 if (info->shadow[id].request == NULL)
150 return -EINVAL;
147 info->shadow[id].req.u.rw.id = info->shadow_free; 151 info->shadow[id].req.u.rw.id = info->shadow_free;
148 info->shadow[id].request = NULL; 152 info->shadow[id].request = NULL;
149 info->shadow_free = id; 153 info->shadow_free = id;
154 return 0;
150} 155}
151 156
157static const char *op_name(int op)
158{
159 static const char *const names[] = {
160 [BLKIF_OP_READ] = "read",
161 [BLKIF_OP_WRITE] = "write",
162 [BLKIF_OP_WRITE_BARRIER] = "barrier",
163 [BLKIF_OP_FLUSH_DISKCACHE] = "flush",
164 [BLKIF_OP_DISCARD] = "discard" };
165
166 if (op < 0 || op >= ARRAY_SIZE(names))
167 return "unknown";
168
169 if (!names[op])
170 return "reserved";
171
172 return names[op];
173}
152static int xlbd_reserve_minors(unsigned int minor, unsigned int nr) 174static int xlbd_reserve_minors(unsigned int minor, unsigned int nr)
153{ 175{
154 unsigned int end = minor + nr; 176 unsigned int end = minor + nr;
@@ -746,20 +768,36 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
746 768
747 bret = RING_GET_RESPONSE(&info->ring, i); 769 bret = RING_GET_RESPONSE(&info->ring, i);
748 id = bret->id; 770 id = bret->id;
771 /*
772 * The backend has messed up and given us an id that we would
773 * never have given to it (we stamp it up to BLK_RING_SIZE -
774 * look in get_id_from_freelist.
775 */
776 if (id >= BLK_RING_SIZE) {
777 WARN(1, "%s: response to %s has incorrect id (%ld)\n",
778 info->gd->disk_name, op_name(bret->operation), id);
779 /* We can't safely get the 'struct request' as
780 * the id is busted. */
781 continue;
782 }
749 req = info->shadow[id].request; 783 req = info->shadow[id].request;
750 784
751 if (bret->operation != BLKIF_OP_DISCARD) 785 if (bret->operation != BLKIF_OP_DISCARD)
752 blkif_completion(&info->shadow[id]); 786 blkif_completion(&info->shadow[id]);
753 787
754 add_id_to_freelist(info, id); 788 if (add_id_to_freelist(info, id)) {
789 WARN(1, "%s: response to %s (id %ld) couldn't be recycled!\n",
790 info->gd->disk_name, op_name(bret->operation), id);
791 continue;
792 }
755 793
756 error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO; 794 error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO;
757 switch (bret->operation) { 795 switch (bret->operation) {
758 case BLKIF_OP_DISCARD: 796 case BLKIF_OP_DISCARD:
759 if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { 797 if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
760 struct request_queue *rq = info->rq; 798 struct request_queue *rq = info->rq;
761 printk(KERN_WARNING "blkfront: %s: discard op failed\n", 799 printk(KERN_WARNING "blkfront: %s: %s op failed\n",
762 info->gd->disk_name); 800 info->gd->disk_name, op_name(bret->operation));
763 error = -EOPNOTSUPP; 801 error = -EOPNOTSUPP;
764 info->feature_discard = 0; 802 info->feature_discard = 0;
765 info->feature_secdiscard = 0; 803 info->feature_secdiscard = 0;
@@ -771,18 +809,14 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)
771 case BLKIF_OP_FLUSH_DISKCACHE: 809 case BLKIF_OP_FLUSH_DISKCACHE:
772 case BLKIF_OP_WRITE_BARRIER: 810 case BLKIF_OP_WRITE_BARRIER:
773 if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { 811 if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) {
774 printk(KERN_WARNING "blkfront: %s: write %s op failed\n", 812 printk(KERN_WARNING "blkfront: %s: %s op failed\n",
775 info->flush_op == BLKIF_OP_WRITE_BARRIER ? 813 info->gd->disk_name, op_name(bret->operation));
776 "barrier" : "flush disk cache",
777 info->gd->disk_name);
778 error = -EOPNOTSUPP; 814 error = -EOPNOTSUPP;
779 } 815 }
780 if (unlikely(bret->status == BLKIF_RSP_ERROR && 816 if (unlikely(bret->status == BLKIF_RSP_ERROR &&
781 info->shadow[id].req.u.rw.nr_segments == 0)) { 817 info->shadow[id].req.u.rw.nr_segments == 0)) {
782 printk(KERN_WARNING "blkfront: %s: empty write %s op failed\n", 818 printk(KERN_WARNING "blkfront: %s: empty %s op failed\n",
783 info->flush_op == BLKIF_OP_WRITE_BARRIER ? 819 info->gd->disk_name, op_name(bret->operation));
784 "barrier" : "flush disk cache",
785 info->gd->disk_name);
786 error = -EOPNOTSUPP; 820 error = -EOPNOTSUPP;
787 } 821 }
788 if (unlikely(error)) { 822 if (unlikely(error)) {
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c
index 1412565c01af..d706bd0e9e80 100644
--- a/drivers/char/hw_random/omap-rng.c
+++ b/drivers/char/hw_random/omap-rng.c
@@ -162,22 +162,24 @@ static int __exit omap_rng_remove(struct platform_device *pdev)
162 162
163#ifdef CONFIG_PM 163#ifdef CONFIG_PM
164 164
165static int omap_rng_suspend(struct platform_device *pdev, pm_message_t message) 165static int omap_rng_suspend(struct device *dev)
166{ 166{
167 omap_rng_write_reg(RNG_MASK_REG, 0x0); 167 omap_rng_write_reg(RNG_MASK_REG, 0x0);
168 return 0; 168 return 0;
169} 169}
170 170
171static int omap_rng_resume(struct platform_device *pdev) 171static int omap_rng_resume(struct device *dev)
172{ 172{
173 omap_rng_write_reg(RNG_MASK_REG, 0x1); 173 omap_rng_write_reg(RNG_MASK_REG, 0x1);
174 return 0; 174 return 0;
175} 175}
176 176
177static SIMPLE_DEV_PM_OPS(omap_rng_pm, omap_rng_suspend, omap_rng_resume);
178#define OMAP_RNG_PM (&omap_rng_pm)
179
177#else 180#else
178 181
179#define omap_rng_suspend NULL 182#define OMAP_RNG_PM NULL
180#define omap_rng_resume NULL
181 183
182#endif 184#endif
183 185
@@ -188,11 +190,10 @@ static struct platform_driver omap_rng_driver = {
188 .driver = { 190 .driver = {
189 .name = "omap_rng", 191 .name = "omap_rng",
190 .owner = THIS_MODULE, 192 .owner = THIS_MODULE,
193 .pm = OMAP_RNG_PM,
191 }, 194 },
192 .probe = omap_rng_probe, 195 .probe = omap_rng_probe,
193 .remove = __exit_p(omap_rng_remove), 196 .remove = __exit_p(omap_rng_remove),
194 .suspend = omap_rng_suspend,
195 .resume = omap_rng_resume
196}; 197};
197 198
198static int __init omap_rng_init(void) 199static int __init omap_rng_init(void)
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index 1e638fff40ea..83f85cf7fb1b 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -2503,18 +2503,6 @@ static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
2503 cleanup_one_si(info); 2503 cleanup_one_si(info);
2504} 2504}
2505 2505
2506#ifdef CONFIG_PM
2507static int ipmi_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2508{
2509 return 0;
2510}
2511
2512static int ipmi_pci_resume(struct pci_dev *pdev)
2513{
2514 return 0;
2515}
2516#endif
2517
2518static struct pci_device_id ipmi_pci_devices[] = { 2506static struct pci_device_id ipmi_pci_devices[] = {
2519 { PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) }, 2507 { PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) },
2520 { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) }, 2508 { PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) },
@@ -2527,10 +2515,6 @@ static struct pci_driver ipmi_pci_driver = {
2527 .id_table = ipmi_pci_devices, 2515 .id_table = ipmi_pci_devices,
2528 .probe = ipmi_pci_probe, 2516 .probe = ipmi_pci_probe,
2529 .remove = __devexit_p(ipmi_pci_remove), 2517 .remove = __devexit_p(ipmi_pci_remove),
2530#ifdef CONFIG_PM
2531 .suspend = ipmi_pci_suspend,
2532 .resume = ipmi_pci_resume,
2533#endif
2534}; 2518};
2535#endif /* CONFIG_PCI */ 2519#endif /* CONFIG_PCI */
2536 2520
diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index 45713f0e7d61..f87780502b41 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -1459,7 +1459,7 @@ static int __devexit sonypi_remove(struct platform_device *dev)
1459#ifdef CONFIG_PM 1459#ifdef CONFIG_PM
1460static int old_camera_power; 1460static int old_camera_power;
1461 1461
1462static int sonypi_suspend(struct platform_device *dev, pm_message_t state) 1462static int sonypi_suspend(struct device *dev)
1463{ 1463{
1464 old_camera_power = sonypi_device.camera_power; 1464 old_camera_power = sonypi_device.camera_power;
1465 sonypi_disable(); 1465 sonypi_disable();
@@ -1467,14 +1467,16 @@ static int sonypi_suspend(struct platform_device *dev, pm_message_t state)
1467 return 0; 1467 return 0;
1468} 1468}
1469 1469
1470static int sonypi_resume(struct platform_device *dev) 1470static int sonypi_resume(struct device *dev)
1471{ 1471{
1472 sonypi_enable(old_camera_power); 1472 sonypi_enable(old_camera_power);
1473 return 0; 1473 return 0;
1474} 1474}
1475
1476static SIMPLE_DEV_PM_OPS(sonypi_pm, sonypi_suspend, sonypi_resume);
1477#define SONYPI_PM (&sonypi_pm)
1475#else 1478#else
1476#define sonypi_suspend NULL 1479#define SONYPI_PM NULL
1477#define sonypi_resume NULL
1478#endif 1480#endif
1479 1481
1480static void sonypi_shutdown(struct platform_device *dev) 1482static void sonypi_shutdown(struct platform_device *dev)
@@ -1486,12 +1488,11 @@ static struct platform_driver sonypi_driver = {
1486 .driver = { 1488 .driver = {
1487 .name = "sonypi", 1489 .name = "sonypi",
1488 .owner = THIS_MODULE, 1490 .owner = THIS_MODULE,
1491 .pm = SONYPI_PM,
1489 }, 1492 },
1490 .probe = sonypi_probe, 1493 .probe = sonypi_probe,
1491 .remove = __devexit_p(sonypi_remove), 1494 .remove = __devexit_p(sonypi_remove),
1492 .shutdown = sonypi_shutdown, 1495 .shutdown = sonypi_shutdown,
1493 .suspend = sonypi_suspend,
1494 .resume = sonypi_resume,
1495}; 1496};
1496 1497
1497static struct platform_device *sonypi_platform_device; 1498static struct platform_device *sonypi_platform_device;
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
index ad7c7320dd1b..ae43ac55fc1e 100644
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -1274,7 +1274,7 @@ static struct tpm_input_header savestate_header = {
1274 * We are about to suspend. Save the TPM state 1274 * We are about to suspend. Save the TPM state
1275 * so that it can be restored. 1275 * so that it can be restored.
1276 */ 1276 */
1277int tpm_pm_suspend(struct device *dev, pm_message_t pm_state) 1277int tpm_pm_suspend(struct device *dev)
1278{ 1278{
1279 struct tpm_chip *chip = dev_get_drvdata(dev); 1279 struct tpm_chip *chip = dev_get_drvdata(dev);
1280 struct tpm_cmd_t cmd; 1280 struct tpm_cmd_t cmd;
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index b1c5280ac159..917f727e6740 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -299,7 +299,7 @@ extern ssize_t tpm_write(struct file *, const char __user *, size_t,
299 loff_t *); 299 loff_t *);
300extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *); 300extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *);
301extern void tpm_remove_hardware(struct device *); 301extern void tpm_remove_hardware(struct device *);
302extern int tpm_pm_suspend(struct device *, pm_message_t); 302extern int tpm_pm_suspend(struct device *);
303extern int tpm_pm_resume(struct device *); 303extern int tpm_pm_resume(struct device *);
304extern int wait_for_tpm_stat(struct tpm_chip *, u8, unsigned long, 304extern int wait_for_tpm_stat(struct tpm_chip *, u8, unsigned long,
305 wait_queue_head_t *); 305 wait_queue_head_t *);
diff --git a/drivers/char/tpm/tpm_atmel.c b/drivers/char/tpm/tpm_atmel.c
index c64a1bc65349..678d57019dc4 100644
--- a/drivers/char/tpm/tpm_atmel.c
+++ b/drivers/char/tpm/tpm_atmel.c
@@ -168,22 +168,14 @@ static void atml_plat_remove(void)
168 } 168 }
169} 169}
170 170
171static int tpm_atml_suspend(struct platform_device *dev, pm_message_t msg) 171static SIMPLE_DEV_PM_OPS(tpm_atml_pm, tpm_pm_suspend, tpm_pm_resume);
172{
173 return tpm_pm_suspend(&dev->dev, msg);
174}
175 172
176static int tpm_atml_resume(struct platform_device *dev)
177{
178 return tpm_pm_resume(&dev->dev);
179}
180static struct platform_driver atml_drv = { 173static struct platform_driver atml_drv = {
181 .driver = { 174 .driver = {
182 .name = "tpm_atmel", 175 .name = "tpm_atmel",
183 .owner = THIS_MODULE, 176 .owner = THIS_MODULE,
177 .pm = &tpm_atml_pm,
184 }, 178 },
185 .suspend = tpm_atml_suspend,
186 .resume = tpm_atml_resume,
187}; 179};
188 180
189static int __init init_atmel(void) 181static int __init init_atmel(void)
diff --git a/drivers/char/tpm/tpm_nsc.c b/drivers/char/tpm/tpm_nsc.c
index 4d2464871ada..640c9a427b59 100644
--- a/drivers/char/tpm/tpm_nsc.c
+++ b/drivers/char/tpm/tpm_nsc.c
@@ -274,22 +274,13 @@ static void tpm_nsc_remove(struct device *dev)
274 } 274 }
275} 275}
276 276
277static int tpm_nsc_suspend(struct platform_device *dev, pm_message_t msg) 277static SIMPLE_DEV_PM_OPS(tpm_nsc_pm, tpm_pm_suspend, tpm_pm_resume);
278{
279 return tpm_pm_suspend(&dev->dev, msg);
280}
281
282static int tpm_nsc_resume(struct platform_device *dev)
283{
284 return tpm_pm_resume(&dev->dev);
285}
286 278
287static struct platform_driver nsc_drv = { 279static struct platform_driver nsc_drv = {
288 .suspend = tpm_nsc_suspend,
289 .resume = tpm_nsc_resume,
290 .driver = { 280 .driver = {
291 .name = "tpm_nsc", 281 .name = "tpm_nsc",
292 .owner = THIS_MODULE, 282 .owner = THIS_MODULE,
283 .pm = &tpm_nsc_pm,
293 }, 284 },
294}; 285};
295 286
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index d2a70cae76df..89682fa8801e 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -750,7 +750,7 @@ static int __devinit tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
750 750
751static int tpm_tis_pnp_suspend(struct pnp_dev *dev, pm_message_t msg) 751static int tpm_tis_pnp_suspend(struct pnp_dev *dev, pm_message_t msg)
752{ 752{
753 return tpm_pm_suspend(&dev->dev, msg); 753 return tpm_pm_suspend(&dev->dev);
754} 754}
755 755
756static int tpm_tis_pnp_resume(struct pnp_dev *dev) 756static int tpm_tis_pnp_resume(struct pnp_dev *dev)
@@ -806,27 +806,25 @@ module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
806 sizeof(tpm_pnp_tbl[TIS_HID_USR_IDX].id), 0444); 806 sizeof(tpm_pnp_tbl[TIS_HID_USR_IDX].id), 0444);
807MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe"); 807MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
808#endif 808#endif
809static int tpm_tis_suspend(struct platform_device *dev, pm_message_t msg)
810{
811 return tpm_pm_suspend(&dev->dev, msg);
812}
813 809
814static int tpm_tis_resume(struct platform_device *dev) 810static int tpm_tis_resume(struct device *dev)
815{ 811{
816 struct tpm_chip *chip = dev_get_drvdata(&dev->dev); 812 struct tpm_chip *chip = dev_get_drvdata(dev);
817 813
818 if (chip->vendor.irq) 814 if (chip->vendor.irq)
819 tpm_tis_reenable_interrupts(chip); 815 tpm_tis_reenable_interrupts(chip);
820 816
821 return tpm_pm_resume(&dev->dev); 817 return tpm_pm_resume(dev);
822} 818}
819
820static SIMPLE_DEV_PM_OPS(tpm_tis_pm, tpm_pm_suspend, tpm_tis_resume);
821
823static struct platform_driver tis_drv = { 822static struct platform_driver tis_drv = {
824 .driver = { 823 .driver = {
825 .name = "tpm_tis", 824 .name = "tpm_tis",
826 .owner = THIS_MODULE, 825 .owner = THIS_MODULE,
826 .pm = &tpm_tis_pm,
827 }, 827 },
828 .suspend = tpm_tis_suspend,
829 .resume = tpm_tis_resume,
830}; 828};
831 829
832static struct platform_device *pdev; 830static struct platform_device *pdev;
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index dcbe05616090..9a1eb0cfa95f 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -1067,26 +1067,24 @@ static int __clk_set_parent(struct clk *clk, struct clk *parent)
1067 1067
1068 old_parent = clk->parent; 1068 old_parent = clk->parent;
1069 1069
1070 /* find index of new parent clock using cached parent ptrs */ 1070 if (!clk->parents)
1071 if (clk->parents)
1072 for (i = 0; i < clk->num_parents; i++)
1073 if (clk->parents[i] == parent)
1074 break;
1075 else
1076 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents), 1071 clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents),
1077 GFP_KERNEL); 1072 GFP_KERNEL);
1078 1073
1079 /* 1074 /*
1080 * find index of new parent clock using string name comparison 1075 * find index of new parent clock using cached parent ptrs,
1081 * also try to cache the parent to avoid future calls to __clk_lookup 1076 * or if not yet cached, use string name comparison and cache
1077 * them now to avoid future calls to __clk_lookup.
1082 */ 1078 */
1083 if (i == clk->num_parents) 1079 for (i = 0; i < clk->num_parents; i++) {
1084 for (i = 0; i < clk->num_parents; i++) 1080 if (clk->parents && clk->parents[i] == parent)
1085 if (!strcmp(clk->parent_names[i], parent->name)) { 1081 break;
1086 if (clk->parents) 1082 else if (!strcmp(clk->parent_names[i], parent->name)) {
1087 clk->parents[i] = __clk_lookup(parent->name); 1083 if (clk->parents)
1088 break; 1084 clk->parents[i] = __clk_lookup(parent->name);
1089 } 1085 break;
1086 }
1087 }
1090 1088
1091 if (i == clk->num_parents) { 1089 if (i == clk->num_parents) {
1092 pr_debug("%s: clock %s is not a possible parent of clock %s\n", 1090 pr_debug("%s: clock %s is not a possible parent of clock %s\n",
diff --git a/drivers/clk/spear/spear1310_clock.c b/drivers/clk/spear/spear1310_clock.c
index 8f05652d53e6..0fcec2aae19c 100644
--- a/drivers/clk/spear/spear1310_clock.c
+++ b/drivers/clk/spear/spear1310_clock.c
@@ -345,31 +345,30 @@ static struct frac_rate_tbl gen_rtbl[] = {
345/* clock parents */ 345/* clock parents */
346static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", }; 346static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
347static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", }; 347static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
348static const char *uart0_parents[] = { "pll5_clk", "uart_synth_gate_clk", }; 348static const char *uart0_parents[] = { "pll5_clk", "uart_syn_gclk", };
349static const char *c3_parents[] = { "pll5_clk", "c3_synth_gate_clk", }; 349static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
350static const char *gmac_phy_input_parents[] = { "gmii_125m_pad_clk", "pll2_clk", 350static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
351 "osc_25m_clk", }; 351 "osc_25m_clk", };
352static const char *gmac_phy_parents[] = { "gmac_phy_input_mux_clk", 352static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
353 "gmac_phy_synth_gate_clk", };
354static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", }; 353static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
355static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_synth_clk", }; 354static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
356static const char *i2s_src_parents[] = { "vco1div2_clk", "none", "pll3_clk", 355static const char *i2s_src_parents[] = { "vco1div2_clk", "none", "pll3_clk",
357 "i2s_src_pad_clk", }; 356 "i2s_src_pad_clk", };
358static const char *i2s_ref_parents[] = { "i2s_src_mux_clk", "i2s_prs1_clk", }; 357static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
359static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk", 358static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
360 "pll3_clk", }; 359 "pll3_clk", };
361static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco3div2_clk", 360static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco3div2_clk",
362 "pll2_clk", }; 361 "pll2_clk", };
363static const char *rmii_phy_parents[] = { "ras_tx50_clk", "none", 362static const char *rmii_phy_parents[] = { "ras_tx50_clk", "none",
364 "ras_pll2_clk", "ras_synth0_clk", }; 363 "ras_pll2_clk", "ras_syn0_clk", };
365static const char *smii_rgmii_phy_parents[] = { "none", "ras_tx125_clk", 364static const char *smii_rgmii_phy_parents[] = { "none", "ras_tx125_clk",
366 "ras_pll2_clk", "ras_synth0_clk", }; 365 "ras_pll2_clk", "ras_syn0_clk", };
367static const char *uart_parents[] = { "ras_apb_clk", "gen_synth3_clk", }; 366static const char *uart_parents[] = { "ras_apb_clk", "gen_syn3_clk", };
368static const char *i2c_parents[] = { "ras_apb_clk", "gen_synth1_clk", }; 367static const char *i2c_parents[] = { "ras_apb_clk", "gen_syn1_clk", };
369static const char *ssp1_parents[] = { "ras_apb_clk", "gen_synth1_clk", 368static const char *ssp1_parents[] = { "ras_apb_clk", "gen_syn1_clk",
370 "ras_plclk0_clk", }; 369 "ras_plclk0_clk", };
371static const char *pci_parents[] = { "ras_pll3_clk", "gen_synth2_clk", }; 370static const char *pci_parents[] = { "ras_pll3_clk", "gen_syn2_clk", };
372static const char *tdm_parents[] = { "ras_pll3_clk", "gen_synth1_clk", }; 371static const char *tdm_parents[] = { "ras_pll3_clk", "gen_syn1_clk", };
373 372
374void __init spear1310_clk_init(void) 373void __init spear1310_clk_init(void)
375{ 374{
@@ -390,9 +389,9 @@ void __init spear1310_clk_init(void)
390 25000000); 389 25000000);
391 clk_register_clkdev(clk, "osc_25m_clk", NULL); 390 clk_register_clkdev(clk, "osc_25m_clk", NULL);
392 391
393 clk = clk_register_fixed_rate(NULL, "gmii_125m_pad_clk", NULL, 392 clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, CLK_IS_ROOT,
394 CLK_IS_ROOT, 125000000); 393 125000000);
395 clk_register_clkdev(clk, "gmii_125m_pad_clk", NULL); 394 clk_register_clkdev(clk, "gmii_pad_clk", NULL);
396 395
397 clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 396 clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL,
398 CLK_IS_ROOT, 12288000); 397 CLK_IS_ROOT, 12288000);
@@ -406,34 +405,34 @@ void __init spear1310_clk_init(void)
406 405
407 /* clock derived from 24 or 25 MHz osc clk */ 406 /* clock derived from 24 or 25 MHz osc clk */
408 /* vco-pll */ 407 /* vco-pll */
409 clk = clk_register_mux(NULL, "vco1_mux_clk", vco_parents, 408 clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
410 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG, 409 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
411 SPEAR1310_PLL1_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0, 410 SPEAR1310_PLL1_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
412 &_lock); 411 &_lock);
413 clk_register_clkdev(clk, "vco1_mux_clk", NULL); 412 clk_register_clkdev(clk, "vco1_mclk", NULL);
414 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mux_clk", 413 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk",
415 0, SPEAR1310_PLL1_CTR, SPEAR1310_PLL1_FRQ, pll_rtbl, 414 0, SPEAR1310_PLL1_CTR, SPEAR1310_PLL1_FRQ, pll_rtbl,
416 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 415 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
417 clk_register_clkdev(clk, "vco1_clk", NULL); 416 clk_register_clkdev(clk, "vco1_clk", NULL);
418 clk_register_clkdev(clk1, "pll1_clk", NULL); 417 clk_register_clkdev(clk1, "pll1_clk", NULL);
419 418
420 clk = clk_register_mux(NULL, "vco2_mux_clk", vco_parents, 419 clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
421 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG, 420 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
422 SPEAR1310_PLL2_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0, 421 SPEAR1310_PLL2_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
423 &_lock); 422 &_lock);
424 clk_register_clkdev(clk, "vco2_mux_clk", NULL); 423 clk_register_clkdev(clk, "vco2_mclk", NULL);
425 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mux_clk", 424 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk",
426 0, SPEAR1310_PLL2_CTR, SPEAR1310_PLL2_FRQ, pll_rtbl, 425 0, SPEAR1310_PLL2_CTR, SPEAR1310_PLL2_FRQ, pll_rtbl,
427 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 426 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
428 clk_register_clkdev(clk, "vco2_clk", NULL); 427 clk_register_clkdev(clk, "vco2_clk", NULL);
429 clk_register_clkdev(clk1, "pll2_clk", NULL); 428 clk_register_clkdev(clk1, "pll2_clk", NULL);
430 429
431 clk = clk_register_mux(NULL, "vco3_mux_clk", vco_parents, 430 clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
432 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG, 431 ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
433 SPEAR1310_PLL3_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0, 432 SPEAR1310_PLL3_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
434 &_lock); 433 &_lock);
435 clk_register_clkdev(clk, "vco3_mux_clk", NULL); 434 clk_register_clkdev(clk, "vco3_mclk", NULL);
436 clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mux_clk", 435 clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk",
437 0, SPEAR1310_PLL3_CTR, SPEAR1310_PLL3_FRQ, pll_rtbl, 436 0, SPEAR1310_PLL3_CTR, SPEAR1310_PLL3_FRQ, pll_rtbl,
438 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 437 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
439 clk_register_clkdev(clk, "vco3_clk", NULL); 438 clk_register_clkdev(clk, "vco3_clk", NULL);
@@ -473,7 +472,7 @@ void __init spear1310_clk_init(void)
473 /* peripherals */ 472 /* peripherals */
474 clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1, 473 clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
475 128); 474 128);
476 clk = clk_register_gate(NULL, "thermal_gate_clk", "thermal_clk", 0, 475 clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
477 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_THSENS_CLK_ENB, 0, 476 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_THSENS_CLK_ENB, 0,
478 &_lock); 477 &_lock);
479 clk_register_clkdev(clk, NULL, "spear_thermal"); 478 clk_register_clkdev(clk, NULL, "spear_thermal");
@@ -500,177 +499,176 @@ void __init spear1310_clk_init(void)
500 clk_register_clkdev(clk, "apb_clk", NULL); 499 clk_register_clkdev(clk, "apb_clk", NULL);
501 500
502 /* gpt clocks */ 501 /* gpt clocks */
503 clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt_parents, 502 clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
504 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG, 503 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
505 SPEAR1310_GPT0_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0, 504 SPEAR1310_GPT0_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
506 &_lock); 505 &_lock);
507 clk_register_clkdev(clk, "gpt0_mux_clk", NULL); 506 clk_register_clkdev(clk, "gpt0_mclk", NULL);
508 clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mux_clk", 0, 507 clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
509 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT0_CLK_ENB, 0, 508 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT0_CLK_ENB, 0,
510 &_lock); 509 &_lock);
511 clk_register_clkdev(clk, NULL, "gpt0"); 510 clk_register_clkdev(clk, NULL, "gpt0");
512 511
513 clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt_parents, 512 clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
514 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG, 513 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
515 SPEAR1310_GPT1_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0, 514 SPEAR1310_GPT1_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
516 &_lock); 515 &_lock);
517 clk_register_clkdev(clk, "gpt1_mux_clk", NULL); 516 clk_register_clkdev(clk, "gpt1_mclk", NULL);
518 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0, 517 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
519 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT1_CLK_ENB, 0, 518 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT1_CLK_ENB, 0,
520 &_lock); 519 &_lock);
521 clk_register_clkdev(clk, NULL, "gpt1"); 520 clk_register_clkdev(clk, NULL, "gpt1");
522 521
523 clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt_parents, 522 clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
524 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG, 523 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
525 SPEAR1310_GPT2_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0, 524 SPEAR1310_GPT2_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
526 &_lock); 525 &_lock);
527 clk_register_clkdev(clk, "gpt2_mux_clk", NULL); 526 clk_register_clkdev(clk, "gpt2_mclk", NULL);
528 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0, 527 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
529 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT2_CLK_ENB, 0, 528 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT2_CLK_ENB, 0,
530 &_lock); 529 &_lock);
531 clk_register_clkdev(clk, NULL, "gpt2"); 530 clk_register_clkdev(clk, NULL, "gpt2");
532 531
533 clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt_parents, 532 clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
534 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG, 533 ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
535 SPEAR1310_GPT3_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0, 534 SPEAR1310_GPT3_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
536 &_lock); 535 &_lock);
537 clk_register_clkdev(clk, "gpt3_mux_clk", NULL); 536 clk_register_clkdev(clk, "gpt3_mclk", NULL);
538 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0, 537 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
539 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT3_CLK_ENB, 0, 538 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT3_CLK_ENB, 0,
540 &_lock); 539 &_lock);
541 clk_register_clkdev(clk, NULL, "gpt3"); 540 clk_register_clkdev(clk, NULL, "gpt3");
542 541
543 /* others */ 542 /* others */
544 clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk", 543 clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "vco1div2_clk",
545 "vco1div2_clk", 0, SPEAR1310_UART_CLK_SYNT, NULL, 544 0, SPEAR1310_UART_CLK_SYNT, NULL, aux_rtbl,
546 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 545 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
547 clk_register_clkdev(clk, "uart_synth_clk", NULL); 546 clk_register_clkdev(clk, "uart_syn_clk", NULL);
548 clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL); 547 clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
549 548
550 clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents, 549 clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
551 ARRAY_SIZE(uart0_parents), 0, SPEAR1310_PERIP_CLK_CFG, 550 ARRAY_SIZE(uart0_parents), 0, SPEAR1310_PERIP_CLK_CFG,
552 SPEAR1310_UART_CLK_SHIFT, SPEAR1310_UART_CLK_MASK, 0, 551 SPEAR1310_UART_CLK_SHIFT, SPEAR1310_UART_CLK_MASK, 0,
553 &_lock); 552 &_lock);
554 clk_register_clkdev(clk, "uart0_mux_clk", NULL); 553 clk_register_clkdev(clk, "uart0_mclk", NULL);
555 554
556 clk = clk_register_gate(NULL, "uart0_clk", "uart0_mux_clk", 0, 555 clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk", 0,
557 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UART_CLK_ENB, 0, 556 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UART_CLK_ENB, 0,
558 &_lock); 557 &_lock);
559 clk_register_clkdev(clk, NULL, "e0000000.serial"); 558 clk_register_clkdev(clk, NULL, "e0000000.serial");
560 559
561 clk = clk_register_aux("sdhci_synth_clk", "sdhci_synth_gate_clk", 560 clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
562 "vco1div2_clk", 0, SPEAR1310_SDHCI_CLK_SYNT, NULL, 561 "vco1div2_clk", 0, SPEAR1310_SDHCI_CLK_SYNT, NULL,
563 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 562 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
564 clk_register_clkdev(clk, "sdhci_synth_clk", NULL); 563 clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
565 clk_register_clkdev(clk1, "sdhci_synth_gate_clk", NULL); 564 clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
566 565
567 clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_synth_gate_clk", 0, 566 clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk", 0,
568 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SDHCI_CLK_ENB, 0, 567 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SDHCI_CLK_ENB, 0,
569 &_lock); 568 &_lock);
570 clk_register_clkdev(clk, NULL, "b3000000.sdhci"); 569 clk_register_clkdev(clk, NULL, "b3000000.sdhci");
571 570
572 clk = clk_register_aux("cfxd_synth_clk", "cfxd_synth_gate_clk", 571 clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
573 "vco1div2_clk", 0, SPEAR1310_CFXD_CLK_SYNT, NULL, 572 0, SPEAR1310_CFXD_CLK_SYNT, NULL, aux_rtbl,
574 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 573 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
575 clk_register_clkdev(clk, "cfxd_synth_clk", NULL); 574 clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
576 clk_register_clkdev(clk1, "cfxd_synth_gate_clk", NULL); 575 clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
577 576
578 clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_synth_gate_clk", 0, 577 clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk", 0,
579 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CFXD_CLK_ENB, 0, 578 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CFXD_CLK_ENB, 0,
580 &_lock); 579 &_lock);
581 clk_register_clkdev(clk, NULL, "b2800000.cf"); 580 clk_register_clkdev(clk, NULL, "b2800000.cf");
582 clk_register_clkdev(clk, NULL, "arasan_xd"); 581 clk_register_clkdev(clk, NULL, "arasan_xd");
583 582
584 clk = clk_register_aux("c3_synth_clk", "c3_synth_gate_clk", 583 clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk",
585 "vco1div2_clk", 0, SPEAR1310_C3_CLK_SYNT, NULL, 584 0, SPEAR1310_C3_CLK_SYNT, NULL, aux_rtbl,
586 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 585 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
587 clk_register_clkdev(clk, "c3_synth_clk", NULL); 586 clk_register_clkdev(clk, "c3_syn_clk", NULL);
588 clk_register_clkdev(clk1, "c3_synth_gate_clk", NULL); 587 clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
589 588
590 clk = clk_register_mux(NULL, "c3_mux_clk", c3_parents, 589 clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
591 ARRAY_SIZE(c3_parents), 0, SPEAR1310_PERIP_CLK_CFG, 590 ARRAY_SIZE(c3_parents), 0, SPEAR1310_PERIP_CLK_CFG,
592 SPEAR1310_C3_CLK_SHIFT, SPEAR1310_C3_CLK_MASK, 0, 591 SPEAR1310_C3_CLK_SHIFT, SPEAR1310_C3_CLK_MASK, 0,
593 &_lock); 592 &_lock);
594 clk_register_clkdev(clk, "c3_mux_clk", NULL); 593 clk_register_clkdev(clk, "c3_mclk", NULL);
595 594
596 clk = clk_register_gate(NULL, "c3_clk", "c3_mux_clk", 0, 595 clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0,
597 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_C3_CLK_ENB, 0, 596 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_C3_CLK_ENB, 0,
598 &_lock); 597 &_lock);
599 clk_register_clkdev(clk, NULL, "c3"); 598 clk_register_clkdev(clk, NULL, "c3");
600 599
601 /* gmac */ 600 /* gmac */
602 clk = clk_register_mux(NULL, "gmac_phy_input_mux_clk", 601 clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
603 gmac_phy_input_parents,
604 ARRAY_SIZE(gmac_phy_input_parents), 0, 602 ARRAY_SIZE(gmac_phy_input_parents), 0,
605 SPEAR1310_GMAC_CLK_CFG, 603 SPEAR1310_GMAC_CLK_CFG,
606 SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT, 604 SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT,
607 SPEAR1310_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock); 605 SPEAR1310_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
608 clk_register_clkdev(clk, "gmac_phy_input_mux_clk", NULL); 606 clk_register_clkdev(clk, "phy_input_mclk", NULL);
609 607
610 clk = clk_register_aux("gmac_phy_synth_clk", "gmac_phy_synth_gate_clk", 608 clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
611 "gmac_phy_input_mux_clk", 0, SPEAR1310_GMAC_CLK_SYNT, 609 0, SPEAR1310_GMAC_CLK_SYNT, NULL, gmac_rtbl,
612 NULL, gmac_rtbl, ARRAY_SIZE(gmac_rtbl), &_lock, &clk1); 610 ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
613 clk_register_clkdev(clk, "gmac_phy_synth_clk", NULL); 611 clk_register_clkdev(clk, "phy_syn_clk", NULL);
614 clk_register_clkdev(clk1, "gmac_phy_synth_gate_clk", NULL); 612 clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
615 613
616 clk = clk_register_mux(NULL, "gmac_phy_mux_clk", gmac_phy_parents, 614 clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
617 ARRAY_SIZE(gmac_phy_parents), 0, 615 ARRAY_SIZE(gmac_phy_parents), 0,
618 SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GMAC_PHY_CLK_SHIFT, 616 SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GMAC_PHY_CLK_SHIFT,
619 SPEAR1310_GMAC_PHY_CLK_MASK, 0, &_lock); 617 SPEAR1310_GMAC_PHY_CLK_MASK, 0, &_lock);
620 clk_register_clkdev(clk, NULL, "stmmacphy.0"); 618 clk_register_clkdev(clk, NULL, "stmmacphy.0");
621 619
622 /* clcd */ 620 /* clcd */
623 clk = clk_register_mux(NULL, "clcd_synth_mux_clk", clcd_synth_parents, 621 clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
624 ARRAY_SIZE(clcd_synth_parents), 0, 622 ARRAY_SIZE(clcd_synth_parents), 0,
625 SPEAR1310_CLCD_CLK_SYNT, SPEAR1310_CLCD_SYNT_CLK_SHIFT, 623 SPEAR1310_CLCD_CLK_SYNT, SPEAR1310_CLCD_SYNT_CLK_SHIFT,
626 SPEAR1310_CLCD_SYNT_CLK_MASK, 0, &_lock); 624 SPEAR1310_CLCD_SYNT_CLK_MASK, 0, &_lock);
627 clk_register_clkdev(clk, "clcd_synth_mux_clk", NULL); 625 clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
628 626
629 clk = clk_register_frac("clcd_synth_clk", "clcd_synth_mux_clk", 0, 627 clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
630 SPEAR1310_CLCD_CLK_SYNT, clcd_rtbl, 628 SPEAR1310_CLCD_CLK_SYNT, clcd_rtbl,
631 ARRAY_SIZE(clcd_rtbl), &_lock); 629 ARRAY_SIZE(clcd_rtbl), &_lock);
632 clk_register_clkdev(clk, "clcd_synth_clk", NULL); 630 clk_register_clkdev(clk, "clcd_syn_clk", NULL);
633 631
634 clk = clk_register_mux(NULL, "clcd_pixel_mux_clk", clcd_pixel_parents, 632 clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
635 ARRAY_SIZE(clcd_pixel_parents), 0, 633 ARRAY_SIZE(clcd_pixel_parents), 0,
636 SPEAR1310_PERIP_CLK_CFG, SPEAR1310_CLCD_CLK_SHIFT, 634 SPEAR1310_PERIP_CLK_CFG, SPEAR1310_CLCD_CLK_SHIFT,
637 SPEAR1310_CLCD_CLK_MASK, 0, &_lock); 635 SPEAR1310_CLCD_CLK_MASK, 0, &_lock);
638 clk_register_clkdev(clk, "clcd_pixel_clk", NULL); 636 clk_register_clkdev(clk, "clcd_pixel_clk", NULL);
639 637
640 clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mux_clk", 0, 638 clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
641 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CLCD_CLK_ENB, 0, 639 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CLCD_CLK_ENB, 0,
642 &_lock); 640 &_lock);
643 clk_register_clkdev(clk, "clcd_clk", NULL); 641 clk_register_clkdev(clk, "clcd_clk", NULL);
644 642
645 /* i2s */ 643 /* i2s */
646 clk = clk_register_mux(NULL, "i2s_src_mux_clk", i2s_src_parents, 644 clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
647 ARRAY_SIZE(i2s_src_parents), 0, SPEAR1310_I2S_CLK_CFG, 645 ARRAY_SIZE(i2s_src_parents), 0, SPEAR1310_I2S_CLK_CFG,
648 SPEAR1310_I2S_SRC_CLK_SHIFT, SPEAR1310_I2S_SRC_CLK_MASK, 646 SPEAR1310_I2S_SRC_CLK_SHIFT, SPEAR1310_I2S_SRC_CLK_MASK,
649 0, &_lock); 647 0, &_lock);
650 clk_register_clkdev(clk, "i2s_src_clk", NULL); 648 clk_register_clkdev(clk, "i2s_src_clk", NULL);
651 649
652 clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mux_clk", 0, 650 clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0,
653 SPEAR1310_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl, 651 SPEAR1310_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl,
654 ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL); 652 ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
655 clk_register_clkdev(clk, "i2s_prs1_clk", NULL); 653 clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
656 654
657 clk = clk_register_mux(NULL, "i2s_ref_mux_clk", i2s_ref_parents, 655 clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
658 ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1310_I2S_CLK_CFG, 656 ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1310_I2S_CLK_CFG,
659 SPEAR1310_I2S_REF_SHIFT, SPEAR1310_I2S_REF_SEL_MASK, 0, 657 SPEAR1310_I2S_REF_SHIFT, SPEAR1310_I2S_REF_SEL_MASK, 0,
660 &_lock); 658 &_lock);
661 clk_register_clkdev(clk, "i2s_ref_clk", NULL); 659 clk_register_clkdev(clk, "i2s_ref_clk", NULL);
662 660
663 clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mux_clk", 0, 661 clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
664 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_I2S_REF_PAD_CLK_ENB, 662 SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_I2S_REF_PAD_CLK_ENB,
665 0, &_lock); 663 0, &_lock);
666 clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL); 664 clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
667 665
668 clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gate_clk", 666 clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk",
669 "i2s_ref_pad_clk", 0, SPEAR1310_I2S_CLK_CFG, 667 "i2s_ref_pad_clk", 0, SPEAR1310_I2S_CLK_CFG,
670 &i2s_sclk_masks, i2s_sclk_rtbl, 668 &i2s_sclk_masks, i2s_sclk_rtbl,
671 ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1); 669 ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1);
672 clk_register_clkdev(clk, "i2s_sclk_clk", NULL); 670 clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
673 clk_register_clkdev(clk1, "i2s_sclk_gate_clk", NULL); 671 clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
674 672
675 /* clock derived from ahb clk */ 673 /* clock derived from ahb clk */
676 clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0, 674 clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
@@ -747,13 +745,13 @@ void __init spear1310_clk_init(void)
747 &_lock); 745 &_lock);
748 clk_register_clkdev(clk, "sysram1_clk", NULL); 746 clk_register_clkdev(clk, "sysram1_clk", NULL);
749 747
750 clk = clk_register_aux("adc_synth_clk", "adc_synth_gate_clk", "ahb_clk", 748 clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
751 0, SPEAR1310_ADC_CLK_SYNT, NULL, adc_rtbl, 749 0, SPEAR1310_ADC_CLK_SYNT, NULL, adc_rtbl,
752 ARRAY_SIZE(adc_rtbl), &_lock, &clk1); 750 ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
753 clk_register_clkdev(clk, "adc_synth_clk", NULL); 751 clk_register_clkdev(clk, "adc_syn_clk", NULL);
754 clk_register_clkdev(clk1, "adc_synth_gate_clk", NULL); 752 clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
755 753
756 clk = clk_register_gate(NULL, "adc_clk", "adc_synth_gate_clk", 0, 754 clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk", 0,
757 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_ADC_CLK_ENB, 0, 755 SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_ADC_CLK_ENB, 0,
758 &_lock); 756 &_lock);
759 clk_register_clkdev(clk, NULL, "adc_clk"); 757 clk_register_clkdev(clk, NULL, "adc_clk");
@@ -790,37 +788,37 @@ void __init spear1310_clk_init(void)
790 clk_register_clkdev(clk, NULL, "e0300000.kbd"); 788 clk_register_clkdev(clk, NULL, "e0300000.kbd");
791 789
792 /* RAS clks */ 790 /* RAS clks */
793 clk = clk_register_mux(NULL, "gen_synth0_1_mux_clk", 791 clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
794 gen_synth0_1_parents, ARRAY_SIZE(gen_synth0_1_parents), 792 ARRAY_SIZE(gen_synth0_1_parents), 0, SPEAR1310_PLL_CFG,
795 0, SPEAR1310_PLL_CFG, SPEAR1310_RAS_SYNT0_1_CLK_SHIFT, 793 SPEAR1310_RAS_SYNT0_1_CLK_SHIFT,
796 SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock); 794 SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
797 clk_register_clkdev(clk, "gen_synth0_1_clk", NULL); 795 clk_register_clkdev(clk, "gen_syn0_1_clk", NULL);
798 796
799 clk = clk_register_mux(NULL, "gen_synth2_3_mux_clk", 797 clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
800 gen_synth2_3_parents, ARRAY_SIZE(gen_synth2_3_parents), 798 ARRAY_SIZE(gen_synth2_3_parents), 0, SPEAR1310_PLL_CFG,
801 0, SPEAR1310_PLL_CFG, SPEAR1310_RAS_SYNT2_3_CLK_SHIFT, 799 SPEAR1310_RAS_SYNT2_3_CLK_SHIFT,
802 SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock); 800 SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
803 clk_register_clkdev(clk, "gen_synth2_3_clk", NULL); 801 clk_register_clkdev(clk, "gen_syn2_3_clk", NULL);
804 802
805 clk = clk_register_frac("gen_synth0_clk", "gen_synth0_1_clk", 0, 803 clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0,
806 SPEAR1310_RAS_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl), 804 SPEAR1310_RAS_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
807 &_lock); 805 &_lock);
808 clk_register_clkdev(clk, "gen_synth0_clk", NULL); 806 clk_register_clkdev(clk, "gen_syn0_clk", NULL);
809 807
810 clk = clk_register_frac("gen_synth1_clk", "gen_synth0_1_clk", 0, 808 clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0,
811 SPEAR1310_RAS_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl), 809 SPEAR1310_RAS_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
812 &_lock); 810 &_lock);
813 clk_register_clkdev(clk, "gen_synth1_clk", NULL); 811 clk_register_clkdev(clk, "gen_syn1_clk", NULL);
814 812
815 clk = clk_register_frac("gen_synth2_clk", "gen_synth2_3_clk", 0, 813 clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0,
816 SPEAR1310_RAS_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl), 814 SPEAR1310_RAS_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
817 &_lock); 815 &_lock);
818 clk_register_clkdev(clk, "gen_synth2_clk", NULL); 816 clk_register_clkdev(clk, "gen_syn2_clk", NULL);
819 817
820 clk = clk_register_frac("gen_synth3_clk", "gen_synth2_3_clk", 0, 818 clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0,
821 SPEAR1310_RAS_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl), 819 SPEAR1310_RAS_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
822 &_lock); 820 &_lock);
823 clk_register_clkdev(clk, "gen_synth3_clk", NULL); 821 clk_register_clkdev(clk, "gen_syn3_clk", NULL);
824 822
825 clk = clk_register_gate(NULL, "ras_osc_24m_clk", "osc_24m_clk", 0, 823 clk = clk_register_gate(NULL, "ras_osc_24m_clk", "osc_24m_clk", 0,
826 SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_24M_CLK_ENB, 0, 824 SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_24M_CLK_ENB, 0,
@@ -847,7 +845,7 @@ void __init spear1310_clk_init(void)
847 &_lock); 845 &_lock);
848 clk_register_clkdev(clk, "ras_pll3_clk", NULL); 846 clk_register_clkdev(clk, "ras_pll3_clk", NULL);
849 847
850 clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_125m_pad_clk", 0, 848 clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_pad_clk", 0,
851 SPEAR1310_RAS_CLK_ENB, SPEAR1310_C125M_PAD_CLK_ENB, 0, 849 SPEAR1310_RAS_CLK_ENB, SPEAR1310_C125M_PAD_CLK_ENB, 0,
852 &_lock); 850 &_lock);
853 clk_register_clkdev(clk, "ras_tx125_clk", NULL); 851 clk_register_clkdev(clk, "ras_tx125_clk", NULL);
@@ -912,7 +910,7 @@ void __init spear1310_clk_init(void)
912 &_lock); 910 &_lock);
913 clk_register_clkdev(clk, NULL, "5c700000.eth"); 911 clk_register_clkdev(clk, NULL, "5c700000.eth");
914 912
915 clk = clk_register_mux(NULL, "smii_rgmii_phy_mux_clk", 913 clk = clk_register_mux(NULL, "smii_rgmii_phy_mclk",
916 smii_rgmii_phy_parents, 914 smii_rgmii_phy_parents,
917 ARRAY_SIZE(smii_rgmii_phy_parents), 0, 915 ARRAY_SIZE(smii_rgmii_phy_parents), 0,
918 SPEAR1310_RAS_CTRL_REG1, 916 SPEAR1310_RAS_CTRL_REG1,
@@ -922,184 +920,184 @@ void __init spear1310_clk_init(void)
922 clk_register_clkdev(clk, NULL, "stmmacphy.2"); 920 clk_register_clkdev(clk, NULL, "stmmacphy.2");
923 clk_register_clkdev(clk, NULL, "stmmacphy.4"); 921 clk_register_clkdev(clk, NULL, "stmmacphy.4");
924 922
925 clk = clk_register_mux(NULL, "rmii_phy_mux_clk", rmii_phy_parents, 923 clk = clk_register_mux(NULL, "rmii_phy_mclk", rmii_phy_parents,
926 ARRAY_SIZE(rmii_phy_parents), 0, 924 ARRAY_SIZE(rmii_phy_parents), 0,
927 SPEAR1310_RAS_CTRL_REG1, SPEAR1310_RMII_PHY_CLK_SHIFT, 925 SPEAR1310_RAS_CTRL_REG1, SPEAR1310_RMII_PHY_CLK_SHIFT,
928 SPEAR1310_PHY_CLK_MASK, 0, &_lock); 926 SPEAR1310_PHY_CLK_MASK, 0, &_lock);
929 clk_register_clkdev(clk, NULL, "stmmacphy.3"); 927 clk_register_clkdev(clk, NULL, "stmmacphy.3");
930 928
931 clk = clk_register_mux(NULL, "uart1_mux_clk", uart_parents, 929 clk = clk_register_mux(NULL, "uart1_mclk", uart_parents,
932 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0, 930 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
933 SPEAR1310_UART1_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK, 931 SPEAR1310_UART1_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
934 0, &_lock); 932 0, &_lock);
935 clk_register_clkdev(clk, "uart1_mux_clk", NULL); 933 clk_register_clkdev(clk, "uart1_mclk", NULL);
936 934
937 clk = clk_register_gate(NULL, "uart1_clk", "uart1_mux_clk", 0, 935 clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
938 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART1_CLK_ENB, 0, 936 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART1_CLK_ENB, 0,
939 &_lock); 937 &_lock);
940 clk_register_clkdev(clk, NULL, "5c800000.serial"); 938 clk_register_clkdev(clk, NULL, "5c800000.serial");
941 939
942 clk = clk_register_mux(NULL, "uart2_mux_clk", uart_parents, 940 clk = clk_register_mux(NULL, "uart2_mclk", uart_parents,
943 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0, 941 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
944 SPEAR1310_UART2_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK, 942 SPEAR1310_UART2_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
945 0, &_lock); 943 0, &_lock);
946 clk_register_clkdev(clk, "uart2_mux_clk", NULL); 944 clk_register_clkdev(clk, "uart2_mclk", NULL);
947 945
948 clk = clk_register_gate(NULL, "uart2_clk", "uart2_mux_clk", 0, 946 clk = clk_register_gate(NULL, "uart2_clk", "uart2_mclk", 0,
949 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART2_CLK_ENB, 0, 947 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART2_CLK_ENB, 0,
950 &_lock); 948 &_lock);
951 clk_register_clkdev(clk, NULL, "5c900000.serial"); 949 clk_register_clkdev(clk, NULL, "5c900000.serial");
952 950
953 clk = clk_register_mux(NULL, "uart3_mux_clk", uart_parents, 951 clk = clk_register_mux(NULL, "uart3_mclk", uart_parents,
954 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0, 952 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
955 SPEAR1310_UART3_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK, 953 SPEAR1310_UART3_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
956 0, &_lock); 954 0, &_lock);
957 clk_register_clkdev(clk, "uart3_mux_clk", NULL); 955 clk_register_clkdev(clk, "uart3_mclk", NULL);
958 956
959 clk = clk_register_gate(NULL, "uart3_clk", "uart3_mux_clk", 0, 957 clk = clk_register_gate(NULL, "uart3_clk", "uart3_mclk", 0,
960 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART3_CLK_ENB, 0, 958 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART3_CLK_ENB, 0,
961 &_lock); 959 &_lock);
962 clk_register_clkdev(clk, NULL, "5ca00000.serial"); 960 clk_register_clkdev(clk, NULL, "5ca00000.serial");
963 961
964 clk = clk_register_mux(NULL, "uart4_mux_clk", uart_parents, 962 clk = clk_register_mux(NULL, "uart4_mclk", uart_parents,
965 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0, 963 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
966 SPEAR1310_UART4_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK, 964 SPEAR1310_UART4_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
967 0, &_lock); 965 0, &_lock);
968 clk_register_clkdev(clk, "uart4_mux_clk", NULL); 966 clk_register_clkdev(clk, "uart4_mclk", NULL);
969 967
970 clk = clk_register_gate(NULL, "uart4_clk", "uart4_mux_clk", 0, 968 clk = clk_register_gate(NULL, "uart4_clk", "uart4_mclk", 0,
971 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART4_CLK_ENB, 0, 969 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART4_CLK_ENB, 0,
972 &_lock); 970 &_lock);
973 clk_register_clkdev(clk, NULL, "5cb00000.serial"); 971 clk_register_clkdev(clk, NULL, "5cb00000.serial");
974 972
975 clk = clk_register_mux(NULL, "uart5_mux_clk", uart_parents, 973 clk = clk_register_mux(NULL, "uart5_mclk", uart_parents,
976 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0, 974 ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
977 SPEAR1310_UART5_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK, 975 SPEAR1310_UART5_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
978 0, &_lock); 976 0, &_lock);
979 clk_register_clkdev(clk, "uart5_mux_clk", NULL); 977 clk_register_clkdev(clk, "uart5_mclk", NULL);
980 978
981 clk = clk_register_gate(NULL, "uart5_clk", "uart5_mux_clk", 0, 979 clk = clk_register_gate(NULL, "uart5_clk", "uart5_mclk", 0,
982 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART5_CLK_ENB, 0, 980 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART5_CLK_ENB, 0,
983 &_lock); 981 &_lock);
984 clk_register_clkdev(clk, NULL, "5cc00000.serial"); 982 clk_register_clkdev(clk, NULL, "5cc00000.serial");
985 983
986 clk = clk_register_mux(NULL, "i2c1_mux_clk", i2c_parents, 984 clk = clk_register_mux(NULL, "i2c1_mclk", i2c_parents,
987 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 985 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
988 SPEAR1310_I2C1_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 986 SPEAR1310_I2C1_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
989 &_lock); 987 &_lock);
990 clk_register_clkdev(clk, "i2c1_mux_clk", NULL); 988 clk_register_clkdev(clk, "i2c1_mclk", NULL);
991 989
992 clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mux_clk", 0, 990 clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mclk", 0,
993 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C1_CLK_ENB, 0, 991 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C1_CLK_ENB, 0,
994 &_lock); 992 &_lock);
995 clk_register_clkdev(clk, NULL, "5cd00000.i2c"); 993 clk_register_clkdev(clk, NULL, "5cd00000.i2c");
996 994
997 clk = clk_register_mux(NULL, "i2c2_mux_clk", i2c_parents, 995 clk = clk_register_mux(NULL, "i2c2_mclk", i2c_parents,
998 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 996 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
999 SPEAR1310_I2C2_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 997 SPEAR1310_I2C2_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1000 &_lock); 998 &_lock);
1001 clk_register_clkdev(clk, "i2c2_mux_clk", NULL); 999 clk_register_clkdev(clk, "i2c2_mclk", NULL);
1002 1000
1003 clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mux_clk", 0, 1001 clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mclk", 0,
1004 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C2_CLK_ENB, 0, 1002 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C2_CLK_ENB, 0,
1005 &_lock); 1003 &_lock);
1006 clk_register_clkdev(clk, NULL, "5ce00000.i2c"); 1004 clk_register_clkdev(clk, NULL, "5ce00000.i2c");
1007 1005
1008 clk = clk_register_mux(NULL, "i2c3_mux_clk", i2c_parents, 1006 clk = clk_register_mux(NULL, "i2c3_mclk", i2c_parents,
1009 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1007 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1010 SPEAR1310_I2C3_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 1008 SPEAR1310_I2C3_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1011 &_lock); 1009 &_lock);
1012 clk_register_clkdev(clk, "i2c3_mux_clk", NULL); 1010 clk_register_clkdev(clk, "i2c3_mclk", NULL);
1013 1011
1014 clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mux_clk", 0, 1012 clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mclk", 0,
1015 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C3_CLK_ENB, 0, 1013 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C3_CLK_ENB, 0,
1016 &_lock); 1014 &_lock);
1017 clk_register_clkdev(clk, NULL, "5cf00000.i2c"); 1015 clk_register_clkdev(clk, NULL, "5cf00000.i2c");
1018 1016
1019 clk = clk_register_mux(NULL, "i2c4_mux_clk", i2c_parents, 1017 clk = clk_register_mux(NULL, "i2c4_mclk", i2c_parents,
1020 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1018 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1021 SPEAR1310_I2C4_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 1019 SPEAR1310_I2C4_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1022 &_lock); 1020 &_lock);
1023 clk_register_clkdev(clk, "i2c4_mux_clk", NULL); 1021 clk_register_clkdev(clk, "i2c4_mclk", NULL);
1024 1022
1025 clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mux_clk", 0, 1023 clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mclk", 0,
1026 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C4_CLK_ENB, 0, 1024 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C4_CLK_ENB, 0,
1027 &_lock); 1025 &_lock);
1028 clk_register_clkdev(clk, NULL, "5d000000.i2c"); 1026 clk_register_clkdev(clk, NULL, "5d000000.i2c");
1029 1027
1030 clk = clk_register_mux(NULL, "i2c5_mux_clk", i2c_parents, 1028 clk = clk_register_mux(NULL, "i2c5_mclk", i2c_parents,
1031 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1029 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1032 SPEAR1310_I2C5_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 1030 SPEAR1310_I2C5_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1033 &_lock); 1031 &_lock);
1034 clk_register_clkdev(clk, "i2c5_mux_clk", NULL); 1032 clk_register_clkdev(clk, "i2c5_mclk", NULL);
1035 1033
1036 clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mux_clk", 0, 1034 clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mclk", 0,
1037 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C5_CLK_ENB, 0, 1035 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C5_CLK_ENB, 0,
1038 &_lock); 1036 &_lock);
1039 clk_register_clkdev(clk, NULL, "5d100000.i2c"); 1037 clk_register_clkdev(clk, NULL, "5d100000.i2c");
1040 1038
1041 clk = clk_register_mux(NULL, "i2c6_mux_clk", i2c_parents, 1039 clk = clk_register_mux(NULL, "i2c6_mclk", i2c_parents,
1042 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1040 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1043 SPEAR1310_I2C6_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 1041 SPEAR1310_I2C6_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1044 &_lock); 1042 &_lock);
1045 clk_register_clkdev(clk, "i2c6_mux_clk", NULL); 1043 clk_register_clkdev(clk, "i2c6_mclk", NULL);
1046 1044
1047 clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mux_clk", 0, 1045 clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mclk", 0,
1048 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C6_CLK_ENB, 0, 1046 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C6_CLK_ENB, 0,
1049 &_lock); 1047 &_lock);
1050 clk_register_clkdev(clk, NULL, "5d200000.i2c"); 1048 clk_register_clkdev(clk, NULL, "5d200000.i2c");
1051 1049
1052 clk = clk_register_mux(NULL, "i2c7_mux_clk", i2c_parents, 1050 clk = clk_register_mux(NULL, "i2c7_mclk", i2c_parents,
1053 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1051 ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1054 SPEAR1310_I2C7_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0, 1052 SPEAR1310_I2C7_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
1055 &_lock); 1053 &_lock);
1056 clk_register_clkdev(clk, "i2c7_mux_clk", NULL); 1054 clk_register_clkdev(clk, "i2c7_mclk", NULL);
1057 1055
1058 clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mux_clk", 0, 1056 clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mclk", 0,
1059 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C7_CLK_ENB, 0, 1057 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C7_CLK_ENB, 0,
1060 &_lock); 1058 &_lock);
1061 clk_register_clkdev(clk, NULL, "5d300000.i2c"); 1059 clk_register_clkdev(clk, NULL, "5d300000.i2c");
1062 1060
1063 clk = clk_register_mux(NULL, "ssp1_mux_clk", ssp1_parents, 1061 clk = clk_register_mux(NULL, "ssp1_mclk", ssp1_parents,
1064 ARRAY_SIZE(ssp1_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1062 ARRAY_SIZE(ssp1_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1065 SPEAR1310_SSP1_CLK_SHIFT, SPEAR1310_SSP1_CLK_MASK, 0, 1063 SPEAR1310_SSP1_CLK_SHIFT, SPEAR1310_SSP1_CLK_MASK, 0,
1066 &_lock); 1064 &_lock);
1067 clk_register_clkdev(clk, "ssp1_mux_clk", NULL); 1065 clk_register_clkdev(clk, "ssp1_mclk", NULL);
1068 1066
1069 clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mux_clk", 0, 1067 clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mclk", 0,
1070 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_SSP1_CLK_ENB, 0, 1068 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_SSP1_CLK_ENB, 0,
1071 &_lock); 1069 &_lock);
1072 clk_register_clkdev(clk, NULL, "5d400000.spi"); 1070 clk_register_clkdev(clk, NULL, "5d400000.spi");
1073 1071
1074 clk = clk_register_mux(NULL, "pci_mux_clk", pci_parents, 1072 clk = clk_register_mux(NULL, "pci_mclk", pci_parents,
1075 ARRAY_SIZE(pci_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1073 ARRAY_SIZE(pci_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1076 SPEAR1310_PCI_CLK_SHIFT, SPEAR1310_PCI_CLK_MASK, 0, 1074 SPEAR1310_PCI_CLK_SHIFT, SPEAR1310_PCI_CLK_MASK, 0,
1077 &_lock); 1075 &_lock);
1078 clk_register_clkdev(clk, "pci_mux_clk", NULL); 1076 clk_register_clkdev(clk, "pci_mclk", NULL);
1079 1077
1080 clk = clk_register_gate(NULL, "pci_clk", "pci_mux_clk", 0, 1078 clk = clk_register_gate(NULL, "pci_clk", "pci_mclk", 0,
1081 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_PCI_CLK_ENB, 0, 1079 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_PCI_CLK_ENB, 0,
1082 &_lock); 1080 &_lock);
1083 clk_register_clkdev(clk, NULL, "pci"); 1081 clk_register_clkdev(clk, NULL, "pci");
1084 1082
1085 clk = clk_register_mux(NULL, "tdm1_mux_clk", tdm_parents, 1083 clk = clk_register_mux(NULL, "tdm1_mclk", tdm_parents,
1086 ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1084 ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1087 SPEAR1310_TDM1_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0, 1085 SPEAR1310_TDM1_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0,
1088 &_lock); 1086 &_lock);
1089 clk_register_clkdev(clk, "tdm1_mux_clk", NULL); 1087 clk_register_clkdev(clk, "tdm1_mclk", NULL);
1090 1088
1091 clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mux_clk", 0, 1089 clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mclk", 0,
1092 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM1_CLK_ENB, 0, 1090 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM1_CLK_ENB, 0,
1093 &_lock); 1091 &_lock);
1094 clk_register_clkdev(clk, NULL, "tdm_hdlc.0"); 1092 clk_register_clkdev(clk, NULL, "tdm_hdlc.0");
1095 1093
1096 clk = clk_register_mux(NULL, "tdm2_mux_clk", tdm_parents, 1094 clk = clk_register_mux(NULL, "tdm2_mclk", tdm_parents,
1097 ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0, 1095 ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0,
1098 SPEAR1310_TDM2_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0, 1096 SPEAR1310_TDM2_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0,
1099 &_lock); 1097 &_lock);
1100 clk_register_clkdev(clk, "tdm2_mux_clk", NULL); 1098 clk_register_clkdev(clk, "tdm2_mclk", NULL);
1101 1099
1102 clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mux_clk", 0, 1100 clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mclk", 0,
1103 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM2_CLK_ENB, 0, 1101 SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM2_CLK_ENB, 0,
1104 &_lock); 1102 &_lock);
1105 clk_register_clkdev(clk, NULL, "tdm_hdlc.1"); 1103 clk_register_clkdev(clk, NULL, "tdm_hdlc.1");
diff --git a/drivers/clk/spear/spear1340_clock.c b/drivers/clk/spear/spear1340_clock.c
index e3ea72162236..2352cee7f645 100644
--- a/drivers/clk/spear/spear1340_clock.c
+++ b/drivers/clk/spear/spear1340_clock.c
@@ -369,27 +369,25 @@ static struct frac_rate_tbl gen_rtbl[] = {
369 369
370/* clock parents */ 370/* clock parents */
371static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", }; 371static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
372static const char *sys_parents[] = { "none", "pll1_clk", "none", "none", 372static const char *sys_parents[] = { "pll1_clk", "pll1_clk", "pll1_clk",
373 "sys_synth_clk", "none", "pll2_clk", "pll3_clk", }; 373 "pll1_clk", "sys_synth_clk", "sys_synth_clk", "pll2_clk", "pll3_clk", };
374static const char *ahb_parents[] = { "cpu_div3_clk", "amba_synth_clk", }; 374static const char *ahb_parents[] = { "cpu_div3_clk", "amba_syn_clk", };
375static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", }; 375static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
376static const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk", 376static const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk",
377 "uart0_synth_gate_clk", }; 377 "uart0_syn_gclk", };
378static const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk", 378static const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk",
379 "uart1_synth_gate_clk", }; 379 "uart1_syn_gclk", };
380static const char *c3_parents[] = { "pll5_clk", "c3_synth_gate_clk", }; 380static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
381static const char *gmac_phy_input_parents[] = { "gmii_125m_pad_clk", "pll2_clk", 381static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
382 "osc_25m_clk", }; 382 "osc_25m_clk", };
383static const char *gmac_phy_parents[] = { "gmac_phy_input_mux_clk", 383static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
384 "gmac_phy_synth_gate_clk", };
385static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", }; 384static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
386static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_synth_clk", }; 385static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
387static const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk", 386static const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk",
388 "i2s_src_pad_clk", }; 387 "i2s_src_pad_clk", };
389static const char *i2s_ref_parents[] = { "i2s_src_mux_clk", "i2s_prs1_clk", }; 388static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
390static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_synth2_clk", 389static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_syn2_clk", };
391}; 390static const char *spdif_in_parents[] = { "pll2_clk", "gen_syn3_clk", };
392static const char *spdif_in_parents[] = { "pll2_clk", "gen_synth3_clk", };
393 391
394static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk", 392static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
395 "pll3_clk", }; 393 "pll3_clk", };
@@ -415,9 +413,9 @@ void __init spear1340_clk_init(void)
415 25000000); 413 25000000);
416 clk_register_clkdev(clk, "osc_25m_clk", NULL); 414 clk_register_clkdev(clk, "osc_25m_clk", NULL);
417 415
418 clk = clk_register_fixed_rate(NULL, "gmii_125m_pad_clk", NULL, 416 clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, CLK_IS_ROOT,
419 CLK_IS_ROOT, 125000000); 417 125000000);
420 clk_register_clkdev(clk, "gmii_125m_pad_clk", NULL); 418 clk_register_clkdev(clk, "gmii_pad_clk", NULL);
421 419
422 clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 420 clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL,
423 CLK_IS_ROOT, 12288000); 421 CLK_IS_ROOT, 12288000);
@@ -431,35 +429,35 @@ void __init spear1340_clk_init(void)
431 429
432 /* clock derived from 24 or 25 MHz osc clk */ 430 /* clock derived from 24 or 25 MHz osc clk */
433 /* vco-pll */ 431 /* vco-pll */
434 clk = clk_register_mux(NULL, "vco1_mux_clk", vco_parents, 432 clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
435 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG, 433 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
436 SPEAR1340_PLL1_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0, 434 SPEAR1340_PLL1_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
437 &_lock); 435 &_lock);
438 clk_register_clkdev(clk, "vco1_mux_clk", NULL); 436 clk_register_clkdev(clk, "vco1_mclk", NULL);
439 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mux_clk", 437 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 0,
440 0, SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl, 438 SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
441 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 439 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
442 clk_register_clkdev(clk, "vco1_clk", NULL); 440 clk_register_clkdev(clk, "vco1_clk", NULL);
443 clk_register_clkdev(clk1, "pll1_clk", NULL); 441 clk_register_clkdev(clk1, "pll1_clk", NULL);
444 442
445 clk = clk_register_mux(NULL, "vco2_mux_clk", vco_parents, 443 clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
446 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG, 444 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
447 SPEAR1340_PLL2_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0, 445 SPEAR1340_PLL2_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
448 &_lock); 446 &_lock);
449 clk_register_clkdev(clk, "vco2_mux_clk", NULL); 447 clk_register_clkdev(clk, "vco2_mclk", NULL);
450 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mux_clk", 448 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 0,
451 0, SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl, 449 SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
452 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 450 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
453 clk_register_clkdev(clk, "vco2_clk", NULL); 451 clk_register_clkdev(clk, "vco2_clk", NULL);
454 clk_register_clkdev(clk1, "pll2_clk", NULL); 452 clk_register_clkdev(clk1, "pll2_clk", NULL);
455 453
456 clk = clk_register_mux(NULL, "vco3_mux_clk", vco_parents, 454 clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
457 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG, 455 ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
458 SPEAR1340_PLL3_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0, 456 SPEAR1340_PLL3_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
459 &_lock); 457 &_lock);
460 clk_register_clkdev(clk, "vco3_mux_clk", NULL); 458 clk_register_clkdev(clk, "vco3_mclk", NULL);
461 clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mux_clk", 459 clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 0,
462 0, SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl, 460 SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
463 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 461 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
464 clk_register_clkdev(clk, "vco3_clk", NULL); 462 clk_register_clkdev(clk, "vco3_clk", NULL);
465 clk_register_clkdev(clk1, "pll3_clk", NULL); 463 clk_register_clkdev(clk1, "pll3_clk", NULL);
@@ -498,7 +496,7 @@ void __init spear1340_clk_init(void)
498 /* peripherals */ 496 /* peripherals */
499 clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1, 497 clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
500 128); 498 128);
501 clk = clk_register_gate(NULL, "thermal_gate_clk", "thermal_clk", 0, 499 clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
502 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0, 500 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0,
503 &_lock); 501 &_lock);
504 clk_register_clkdev(clk, NULL, "spear_thermal"); 502 clk_register_clkdev(clk, NULL, "spear_thermal");
@@ -509,23 +507,23 @@ void __init spear1340_clk_init(void)
509 clk_register_clkdev(clk, "ddr_clk", NULL); 507 clk_register_clkdev(clk, "ddr_clk", NULL);
510 508
511 /* clock derived from pll1 clk */ 509 /* clock derived from pll1 clk */
512 clk = clk_register_frac("sys_synth_clk", "vco1div2_clk", 0, 510 clk = clk_register_frac("sys_syn_clk", "vco1div2_clk", 0,
513 SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl, 511 SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl,
514 ARRAY_SIZE(sys_synth_rtbl), &_lock); 512 ARRAY_SIZE(sys_synth_rtbl), &_lock);
515 clk_register_clkdev(clk, "sys_synth_clk", NULL); 513 clk_register_clkdev(clk, "sys_syn_clk", NULL);
516 514
517 clk = clk_register_frac("amba_synth_clk", "vco1div2_clk", 0, 515 clk = clk_register_frac("amba_syn_clk", "vco1div2_clk", 0,
518 SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl, 516 SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl,
519 ARRAY_SIZE(amba_synth_rtbl), &_lock); 517 ARRAY_SIZE(amba_synth_rtbl), &_lock);
520 clk_register_clkdev(clk, "amba_synth_clk", NULL); 518 clk_register_clkdev(clk, "amba_syn_clk", NULL);
521 519
522 clk = clk_register_mux(NULL, "sys_mux_clk", sys_parents, 520 clk = clk_register_mux(NULL, "sys_mclk", sys_parents,
523 ARRAY_SIZE(sys_parents), 0, SPEAR1340_SYS_CLK_CTRL, 521 ARRAY_SIZE(sys_parents), 0, SPEAR1340_SYS_CLK_CTRL,
524 SPEAR1340_SCLK_SRC_SEL_SHIFT, 522 SPEAR1340_SCLK_SRC_SEL_SHIFT,
525 SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock); 523 SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock);
526 clk_register_clkdev(clk, "sys_clk", NULL); 524 clk_register_clkdev(clk, "sys_clk", NULL);
527 525
528 clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mux_clk", 0, 1, 526 clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mclk", 0, 1,
529 2); 527 2);
530 clk_register_clkdev(clk, "cpu_clk", NULL); 528 clk_register_clkdev(clk, "cpu_clk", NULL);
531 529
@@ -548,194 +546,193 @@ void __init spear1340_clk_init(void)
548 clk_register_clkdev(clk, "apb_clk", NULL); 546 clk_register_clkdev(clk, "apb_clk", NULL);
549 547
550 /* gpt clocks */ 548 /* gpt clocks */
551 clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt_parents, 549 clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
552 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG, 550 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
553 SPEAR1340_GPT0_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0, 551 SPEAR1340_GPT0_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
554 &_lock); 552 &_lock);
555 clk_register_clkdev(clk, "gpt0_mux_clk", NULL); 553 clk_register_clkdev(clk, "gpt0_mclk", NULL);
556 clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mux_clk", 0, 554 clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
557 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0, 555 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0,
558 &_lock); 556 &_lock);
559 clk_register_clkdev(clk, NULL, "gpt0"); 557 clk_register_clkdev(clk, NULL, "gpt0");
560 558
561 clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt_parents, 559 clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
562 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG, 560 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
563 SPEAR1340_GPT1_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0, 561 SPEAR1340_GPT1_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
564 &_lock); 562 &_lock);
565 clk_register_clkdev(clk, "gpt1_mux_clk", NULL); 563 clk_register_clkdev(clk, "gpt1_mclk", NULL);
566 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0, 564 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
567 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0, 565 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0,
568 &_lock); 566 &_lock);
569 clk_register_clkdev(clk, NULL, "gpt1"); 567 clk_register_clkdev(clk, NULL, "gpt1");
570 568
571 clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt_parents, 569 clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
572 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG, 570 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
573 SPEAR1340_GPT2_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0, 571 SPEAR1340_GPT2_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
574 &_lock); 572 &_lock);
575 clk_register_clkdev(clk, "gpt2_mux_clk", NULL); 573 clk_register_clkdev(clk, "gpt2_mclk", NULL);
576 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0, 574 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
577 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0, 575 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0,
578 &_lock); 576 &_lock);
579 clk_register_clkdev(clk, NULL, "gpt2"); 577 clk_register_clkdev(clk, NULL, "gpt2");
580 578
581 clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt_parents, 579 clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
582 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG, 580 ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
583 SPEAR1340_GPT3_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0, 581 SPEAR1340_GPT3_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
584 &_lock); 582 &_lock);
585 clk_register_clkdev(clk, "gpt3_mux_clk", NULL); 583 clk_register_clkdev(clk, "gpt3_mclk", NULL);
586 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0, 584 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
587 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0, 585 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0,
588 &_lock); 586 &_lock);
589 clk_register_clkdev(clk, NULL, "gpt3"); 587 clk_register_clkdev(clk, NULL, "gpt3");
590 588
591 /* others */ 589 /* others */
592 clk = clk_register_aux("uart0_synth_clk", "uart0_synth_gate_clk", 590 clk = clk_register_aux("uart0_syn_clk", "uart0_syn_gclk",
593 "vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL, 591 "vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL,
594 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 592 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
595 clk_register_clkdev(clk, "uart0_synth_clk", NULL); 593 clk_register_clkdev(clk, "uart0_syn_clk", NULL);
596 clk_register_clkdev(clk1, "uart0_synth_gate_clk", NULL); 594 clk_register_clkdev(clk1, "uart0_syn_gclk", NULL);
597 595
598 clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents, 596 clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
599 ARRAY_SIZE(uart0_parents), 0, SPEAR1340_PERIP_CLK_CFG, 597 ARRAY_SIZE(uart0_parents), 0, SPEAR1340_PERIP_CLK_CFG,
600 SPEAR1340_UART0_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0, 598 SPEAR1340_UART0_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0,
601 &_lock); 599 &_lock);
602 clk_register_clkdev(clk, "uart0_mux_clk", NULL); 600 clk_register_clkdev(clk, "uart0_mclk", NULL);
603 601
604 clk = clk_register_gate(NULL, "uart0_clk", "uart0_mux_clk", 0, 602 clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk", 0,
605 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UART0_CLK_ENB, 0, 603 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UART0_CLK_ENB, 0,
606 &_lock); 604 &_lock);
607 clk_register_clkdev(clk, NULL, "e0000000.serial"); 605 clk_register_clkdev(clk, NULL, "e0000000.serial");
608 606
609 clk = clk_register_aux("uart1_synth_clk", "uart1_synth_gate_clk", 607 clk = clk_register_aux("uart1_syn_clk", "uart1_syn_gclk",
610 "vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL, 608 "vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL,
611 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 609 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
612 clk_register_clkdev(clk, "uart1_synth_clk", NULL); 610 clk_register_clkdev(clk, "uart1_syn_clk", NULL);
613 clk_register_clkdev(clk1, "uart1_synth_gate_clk", NULL); 611 clk_register_clkdev(clk1, "uart1_syn_gclk", NULL);
614 612
615 clk = clk_register_mux(NULL, "uart1_mux_clk", uart1_parents, 613 clk = clk_register_mux(NULL, "uart1_mclk", uart1_parents,
616 ARRAY_SIZE(uart1_parents), 0, SPEAR1340_PERIP_CLK_CFG, 614 ARRAY_SIZE(uart1_parents), 0, SPEAR1340_PERIP_CLK_CFG,
617 SPEAR1340_UART1_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0, 615 SPEAR1340_UART1_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0,
618 &_lock); 616 &_lock);
619 clk_register_clkdev(clk, "uart1_mux_clk", NULL); 617 clk_register_clkdev(clk, "uart1_mclk", NULL);
620 618
621 clk = clk_register_gate(NULL, "uart1_clk", "uart1_mux_clk", 0, 619 clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
622 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0, 620 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
623 &_lock); 621 &_lock);
624 clk_register_clkdev(clk, NULL, "b4100000.serial"); 622 clk_register_clkdev(clk, NULL, "b4100000.serial");
625 623
626 clk = clk_register_aux("sdhci_synth_clk", "sdhci_synth_gate_clk", 624 clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
627 "vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL, 625 "vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL,
628 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 626 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
629 clk_register_clkdev(clk, "sdhci_synth_clk", NULL); 627 clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
630 clk_register_clkdev(clk1, "sdhci_synth_gate_clk", NULL); 628 clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
631 629
632 clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_synth_gate_clk", 0, 630 clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk", 0,
633 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SDHCI_CLK_ENB, 0, 631 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SDHCI_CLK_ENB, 0,
634 &_lock); 632 &_lock);
635 clk_register_clkdev(clk, NULL, "b3000000.sdhci"); 633 clk_register_clkdev(clk, NULL, "b3000000.sdhci");
636 634
637 clk = clk_register_aux("cfxd_synth_clk", "cfxd_synth_gate_clk", 635 clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
638 "vco1div2_clk", 0, SPEAR1340_CFXD_CLK_SYNT, NULL, 636 0, SPEAR1340_CFXD_CLK_SYNT, NULL, aux_rtbl,
639 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 637 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
640 clk_register_clkdev(clk, "cfxd_synth_clk", NULL); 638 clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
641 clk_register_clkdev(clk1, "cfxd_synth_gate_clk", NULL); 639 clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
642 640
643 clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_synth_gate_clk", 0, 641 clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk", 0,
644 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CFXD_CLK_ENB, 0, 642 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CFXD_CLK_ENB, 0,
645 &_lock); 643 &_lock);
646 clk_register_clkdev(clk, NULL, "b2800000.cf"); 644 clk_register_clkdev(clk, NULL, "b2800000.cf");
647 clk_register_clkdev(clk, NULL, "arasan_xd"); 645 clk_register_clkdev(clk, NULL, "arasan_xd");
648 646
649 clk = clk_register_aux("c3_synth_clk", "c3_synth_gate_clk", 647 clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 0,
650 "vco1div2_clk", 0, SPEAR1340_C3_CLK_SYNT, NULL, 648 SPEAR1340_C3_CLK_SYNT, NULL, aux_rtbl,
651 aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 649 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
652 clk_register_clkdev(clk, "c3_synth_clk", NULL); 650 clk_register_clkdev(clk, "c3_syn_clk", NULL);
653 clk_register_clkdev(clk1, "c3_synth_gate_clk", NULL); 651 clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
654 652
655 clk = clk_register_mux(NULL, "c3_mux_clk", c3_parents, 653 clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
656 ARRAY_SIZE(c3_parents), 0, SPEAR1340_PERIP_CLK_CFG, 654 ARRAY_SIZE(c3_parents), 0, SPEAR1340_PERIP_CLK_CFG,
657 SPEAR1340_C3_CLK_SHIFT, SPEAR1340_C3_CLK_MASK, 0, 655 SPEAR1340_C3_CLK_SHIFT, SPEAR1340_C3_CLK_MASK, 0,
658 &_lock); 656 &_lock);
659 clk_register_clkdev(clk, "c3_mux_clk", NULL); 657 clk_register_clkdev(clk, "c3_mclk", NULL);
660 658
661 clk = clk_register_gate(NULL, "c3_clk", "c3_mux_clk", 0, 659 clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0,
662 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0, 660 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0,
663 &_lock); 661 &_lock);
664 clk_register_clkdev(clk, NULL, "c3"); 662 clk_register_clkdev(clk, NULL, "c3");
665 663
666 /* gmac */ 664 /* gmac */
667 clk = clk_register_mux(NULL, "gmac_phy_input_mux_clk", 665 clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
668 gmac_phy_input_parents,
669 ARRAY_SIZE(gmac_phy_input_parents), 0, 666 ARRAY_SIZE(gmac_phy_input_parents), 0,
670 SPEAR1340_GMAC_CLK_CFG, 667 SPEAR1340_GMAC_CLK_CFG,
671 SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT, 668 SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT,
672 SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock); 669 SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
673 clk_register_clkdev(clk, "gmac_phy_input_mux_clk", NULL); 670 clk_register_clkdev(clk, "phy_input_mclk", NULL);
674 671
675 clk = clk_register_aux("gmac_phy_synth_clk", "gmac_phy_synth_gate_clk", 672 clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
676 "gmac_phy_input_mux_clk", 0, SPEAR1340_GMAC_CLK_SYNT, 673 0, SPEAR1340_GMAC_CLK_SYNT, NULL, gmac_rtbl,
677 NULL, gmac_rtbl, ARRAY_SIZE(gmac_rtbl), &_lock, &clk1); 674 ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
678 clk_register_clkdev(clk, "gmac_phy_synth_clk", NULL); 675 clk_register_clkdev(clk, "phy_syn_clk", NULL);
679 clk_register_clkdev(clk1, "gmac_phy_synth_gate_clk", NULL); 676 clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
680 677
681 clk = clk_register_mux(NULL, "gmac_phy_mux_clk", gmac_phy_parents, 678 clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
682 ARRAY_SIZE(gmac_phy_parents), 0, 679 ARRAY_SIZE(gmac_phy_parents), 0,
683 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT, 680 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT,
684 SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock); 681 SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock);
685 clk_register_clkdev(clk, NULL, "stmmacphy.0"); 682 clk_register_clkdev(clk, NULL, "stmmacphy.0");
686 683
687 /* clcd */ 684 /* clcd */
688 clk = clk_register_mux(NULL, "clcd_synth_mux_clk", clcd_synth_parents, 685 clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
689 ARRAY_SIZE(clcd_synth_parents), 0, 686 ARRAY_SIZE(clcd_synth_parents), 0,
690 SPEAR1340_CLCD_CLK_SYNT, SPEAR1340_CLCD_SYNT_CLK_SHIFT, 687 SPEAR1340_CLCD_CLK_SYNT, SPEAR1340_CLCD_SYNT_CLK_SHIFT,
691 SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock); 688 SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock);
692 clk_register_clkdev(clk, "clcd_synth_mux_clk", NULL); 689 clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
693 690
694 clk = clk_register_frac("clcd_synth_clk", "clcd_synth_mux_clk", 0, 691 clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
695 SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl, 692 SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl,
696 ARRAY_SIZE(clcd_rtbl), &_lock); 693 ARRAY_SIZE(clcd_rtbl), &_lock);
697 clk_register_clkdev(clk, "clcd_synth_clk", NULL); 694 clk_register_clkdev(clk, "clcd_syn_clk", NULL);
698 695
699 clk = clk_register_mux(NULL, "clcd_pixel_mux_clk", clcd_pixel_parents, 696 clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
700 ARRAY_SIZE(clcd_pixel_parents), 0, 697 ARRAY_SIZE(clcd_pixel_parents), 0,
701 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT, 698 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT,
702 SPEAR1340_CLCD_CLK_MASK, 0, &_lock); 699 SPEAR1340_CLCD_CLK_MASK, 0, &_lock);
703 clk_register_clkdev(clk, "clcd_pixel_clk", NULL); 700 clk_register_clkdev(clk, "clcd_pixel_clk", NULL);
704 701
705 clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mux_clk", 0, 702 clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
706 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0, 703 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0,
707 &_lock); 704 &_lock);
708 clk_register_clkdev(clk, "clcd_clk", NULL); 705 clk_register_clkdev(clk, "clcd_clk", NULL);
709 706
710 /* i2s */ 707 /* i2s */
711 clk = clk_register_mux(NULL, "i2s_src_mux_clk", i2s_src_parents, 708 clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
712 ARRAY_SIZE(i2s_src_parents), 0, SPEAR1340_I2S_CLK_CFG, 709 ARRAY_SIZE(i2s_src_parents), 0, SPEAR1340_I2S_CLK_CFG,
713 SPEAR1340_I2S_SRC_CLK_SHIFT, SPEAR1340_I2S_SRC_CLK_MASK, 710 SPEAR1340_I2S_SRC_CLK_SHIFT, SPEAR1340_I2S_SRC_CLK_MASK,
714 0, &_lock); 711 0, &_lock);
715 clk_register_clkdev(clk, "i2s_src_clk", NULL); 712 clk_register_clkdev(clk, "i2s_src_clk", NULL);
716 713
717 clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mux_clk", 0, 714 clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0,
718 SPEAR1340_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl, 715 SPEAR1340_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl,
719 ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL); 716 ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
720 clk_register_clkdev(clk, "i2s_prs1_clk", NULL); 717 clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
721 718
722 clk = clk_register_mux(NULL, "i2s_ref_mux_clk", i2s_ref_parents, 719 clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
723 ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1340_I2S_CLK_CFG, 720 ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1340_I2S_CLK_CFG,
724 SPEAR1340_I2S_REF_SHIFT, SPEAR1340_I2S_REF_SEL_MASK, 0, 721 SPEAR1340_I2S_REF_SHIFT, SPEAR1340_I2S_REF_SEL_MASK, 0,
725 &_lock); 722 &_lock);
726 clk_register_clkdev(clk, "i2s_ref_clk", NULL); 723 clk_register_clkdev(clk, "i2s_ref_clk", NULL);
727 724
728 clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mux_clk", 0, 725 clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
729 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB, 726 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB,
730 0, &_lock); 727 0, &_lock);
731 clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL); 728 clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
732 729
733 clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gate_clk", 730 clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", "i2s_ref_mclk",
734 "i2s_ref_mux_clk", 0, SPEAR1340_I2S_CLK_CFG, 731 0, SPEAR1340_I2S_CLK_CFG, &i2s_sclk_masks,
735 &i2s_sclk_masks, i2s_sclk_rtbl, 732 i2s_sclk_rtbl, ARRAY_SIZE(i2s_sclk_rtbl), &_lock,
736 ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1); 733 &clk1);
737 clk_register_clkdev(clk, "i2s_sclk_clk", NULL); 734 clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
738 clk_register_clkdev(clk1, "i2s_sclk_gate_clk", NULL); 735 clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
739 736
740 /* clock derived from ahb clk */ 737 /* clock derived from ahb clk */
741 clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0, 738 clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
@@ -744,7 +741,7 @@ void __init spear1340_clk_init(void)
744 clk_register_clkdev(clk, NULL, "e0280000.i2c"); 741 clk_register_clkdev(clk, NULL, "e0280000.i2c");
745 742
746 clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0, 743 clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0,
747 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0, 744 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
748 &_lock); 745 &_lock);
749 clk_register_clkdev(clk, NULL, "b4000000.i2c"); 746 clk_register_clkdev(clk, NULL, "b4000000.i2c");
750 747
@@ -800,13 +797,13 @@ void __init spear1340_clk_init(void)
800 &_lock); 797 &_lock);
801 clk_register_clkdev(clk, "sysram1_clk", NULL); 798 clk_register_clkdev(clk, "sysram1_clk", NULL);
802 799
803 clk = clk_register_aux("adc_synth_clk", "adc_synth_gate_clk", "ahb_clk", 800 clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
804 0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl, 801 0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl,
805 ARRAY_SIZE(adc_rtbl), &_lock, &clk1); 802 ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
806 clk_register_clkdev(clk, "adc_synth_clk", NULL); 803 clk_register_clkdev(clk, "adc_syn_clk", NULL);
807 clk_register_clkdev(clk1, "adc_synth_gate_clk", NULL); 804 clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
808 805
809 clk = clk_register_gate(NULL, "adc_clk", "adc_synth_gate_clk", 0, 806 clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk", 0,
810 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_ADC_CLK_ENB, 0, 807 SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_ADC_CLK_ENB, 0,
811 &_lock); 808 &_lock);
812 clk_register_clkdev(clk, NULL, "adc_clk"); 809 clk_register_clkdev(clk, NULL, "adc_clk");
@@ -843,39 +840,39 @@ void __init spear1340_clk_init(void)
843 clk_register_clkdev(clk, NULL, "e0300000.kbd"); 840 clk_register_clkdev(clk, NULL, "e0300000.kbd");
844 841
845 /* RAS clks */ 842 /* RAS clks */
846 clk = clk_register_mux(NULL, "gen_synth0_1_mux_clk", 843 clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
847 gen_synth0_1_parents, ARRAY_SIZE(gen_synth0_1_parents), 844 ARRAY_SIZE(gen_synth0_1_parents), 0, SPEAR1340_PLL_CFG,
848 0, SPEAR1340_PLL_CFG, SPEAR1340_GEN_SYNT0_1_CLK_SHIFT, 845 SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
849 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock); 846 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
850 clk_register_clkdev(clk, "gen_synth0_1_clk", NULL); 847 clk_register_clkdev(clk, "gen_syn0_1_clk", NULL);
851 848
852 clk = clk_register_mux(NULL, "gen_synth2_3_mux_clk", 849 clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
853 gen_synth2_3_parents, ARRAY_SIZE(gen_synth2_3_parents), 850 ARRAY_SIZE(gen_synth2_3_parents), 0, SPEAR1340_PLL_CFG,
854 0, SPEAR1340_PLL_CFG, SPEAR1340_GEN_SYNT2_3_CLK_SHIFT, 851 SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
855 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock); 852 SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
856 clk_register_clkdev(clk, "gen_synth2_3_clk", NULL); 853 clk_register_clkdev(clk, "gen_syn2_3_clk", NULL);
857 854
858 clk = clk_register_frac("gen_synth0_clk", "gen_synth0_1_clk", 0, 855 clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0,
859 SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl), 856 SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
860 &_lock); 857 &_lock);
861 clk_register_clkdev(clk, "gen_synth0_clk", NULL); 858 clk_register_clkdev(clk, "gen_syn0_clk", NULL);
862 859
863 clk = clk_register_frac("gen_synth1_clk", "gen_synth0_1_clk", 0, 860 clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0,
864 SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl), 861 SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
865 &_lock); 862 &_lock);
866 clk_register_clkdev(clk, "gen_synth1_clk", NULL); 863 clk_register_clkdev(clk, "gen_syn1_clk", NULL);
867 864
868 clk = clk_register_frac("gen_synth2_clk", "gen_synth2_3_clk", 0, 865 clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0,
869 SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl), 866 SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
870 &_lock); 867 &_lock);
871 clk_register_clkdev(clk, "gen_synth2_clk", NULL); 868 clk_register_clkdev(clk, "gen_syn2_clk", NULL);
872 869
873 clk = clk_register_frac("gen_synth3_clk", "gen_synth2_3_clk", 0, 870 clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0,
874 SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl), 871 SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
875 &_lock); 872 &_lock);
876 clk_register_clkdev(clk, "gen_synth3_clk", NULL); 873 clk_register_clkdev(clk, "gen_syn3_clk", NULL);
877 874
878 clk = clk_register_gate(NULL, "mali_clk", "gen_synth3_clk", 0, 875 clk = clk_register_gate(NULL, "mali_clk", "gen_syn3_clk", 0,
879 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_MALI_CLK_ENB, 0, 876 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_MALI_CLK_ENB, 0,
880 &_lock); 877 &_lock);
881 clk_register_clkdev(clk, NULL, "mali"); 878 clk_register_clkdev(clk, NULL, "mali");
@@ -890,74 +887,74 @@ void __init spear1340_clk_init(void)
890 &_lock); 887 &_lock);
891 clk_register_clkdev(clk, NULL, "spear_cec.1"); 888 clk_register_clkdev(clk, NULL, "spear_cec.1");
892 889
893 clk = clk_register_mux(NULL, "spdif_out_mux_clk", spdif_out_parents, 890 clk = clk_register_mux(NULL, "spdif_out_mclk", spdif_out_parents,
894 ARRAY_SIZE(spdif_out_parents), 0, 891 ARRAY_SIZE(spdif_out_parents), 0,
895 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT, 892 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT,
896 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock); 893 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
897 clk_register_clkdev(clk, "spdif_out_mux_clk", NULL); 894 clk_register_clkdev(clk, "spdif_out_mclk", NULL);
898 895
899 clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mux_clk", 0, 896 clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mclk", 0,
900 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_OUT_CLK_ENB, 897 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_OUT_CLK_ENB,
901 0, &_lock); 898 0, &_lock);
902 clk_register_clkdev(clk, NULL, "spdif-out"); 899 clk_register_clkdev(clk, NULL, "spdif-out");
903 900
904 clk = clk_register_mux(NULL, "spdif_in_mux_clk", spdif_in_parents, 901 clk = clk_register_mux(NULL, "spdif_in_mclk", spdif_in_parents,
905 ARRAY_SIZE(spdif_in_parents), 0, 902 ARRAY_SIZE(spdif_in_parents), 0,
906 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT, 903 SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT,
907 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock); 904 SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
908 clk_register_clkdev(clk, "spdif_in_mux_clk", NULL); 905 clk_register_clkdev(clk, "spdif_in_mclk", NULL);
909 906
910 clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mux_clk", 0, 907 clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mclk", 0,
911 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_IN_CLK_ENB, 0, 908 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_IN_CLK_ENB, 0,
912 &_lock); 909 &_lock);
913 clk_register_clkdev(clk, NULL, "spdif-in"); 910 clk_register_clkdev(clk, NULL, "spdif-in");
914 911
915 clk = clk_register_gate(NULL, "acp_clk", "acp_mux_clk", 0, 912 clk = clk_register_gate(NULL, "acp_clk", "acp_mclk", 0,
916 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0, 913 SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0,
917 &_lock); 914 &_lock);
918 clk_register_clkdev(clk, NULL, "acp_clk"); 915 clk_register_clkdev(clk, NULL, "acp_clk");
919 916
920 clk = clk_register_gate(NULL, "plgpio_clk", "plgpio_mux_clk", 0, 917 clk = clk_register_gate(NULL, "plgpio_clk", "plgpio_mclk", 0,
921 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0, 918 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0,
922 &_lock); 919 &_lock);
923 clk_register_clkdev(clk, NULL, "plgpio"); 920 clk_register_clkdev(clk, NULL, "plgpio");
924 921
925 clk = clk_register_gate(NULL, "video_dec_clk", "video_dec_mux_clk", 0, 922 clk = clk_register_gate(NULL, "video_dec_clk", "video_dec_mclk", 0,
926 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB, 923 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB,
927 0, &_lock); 924 0, &_lock);
928 clk_register_clkdev(clk, NULL, "video_dec"); 925 clk_register_clkdev(clk, NULL, "video_dec");
929 926
930 clk = clk_register_gate(NULL, "video_enc_clk", "video_enc_mux_clk", 0, 927 clk = clk_register_gate(NULL, "video_enc_clk", "video_enc_mclk", 0,
931 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB, 928 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB,
932 0, &_lock); 929 0, &_lock);
933 clk_register_clkdev(clk, NULL, "video_enc"); 930 clk_register_clkdev(clk, NULL, "video_enc");
934 931
935 clk = clk_register_gate(NULL, "video_in_clk", "video_in_mux_clk", 0, 932 clk = clk_register_gate(NULL, "video_in_clk", "video_in_mclk", 0,
936 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0, 933 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0,
937 &_lock); 934 &_lock);
938 clk_register_clkdev(clk, NULL, "spear_vip"); 935 clk_register_clkdev(clk, NULL, "spear_vip");
939 936
940 clk = clk_register_gate(NULL, "cam0_clk", "cam0_mux_clk", 0, 937 clk = clk_register_gate(NULL, "cam0_clk", "cam0_mclk", 0,
941 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0, 938 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0,
942 &_lock); 939 &_lock);
943 clk_register_clkdev(clk, NULL, "spear_camif.0"); 940 clk_register_clkdev(clk, NULL, "spear_camif.0");
944 941
945 clk = clk_register_gate(NULL, "cam1_clk", "cam1_mux_clk", 0, 942 clk = clk_register_gate(NULL, "cam1_clk", "cam1_mclk", 0,
946 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0, 943 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0,
947 &_lock); 944 &_lock);
948 clk_register_clkdev(clk, NULL, "spear_camif.1"); 945 clk_register_clkdev(clk, NULL, "spear_camif.1");
949 946
950 clk = clk_register_gate(NULL, "cam2_clk", "cam2_mux_clk", 0, 947 clk = clk_register_gate(NULL, "cam2_clk", "cam2_mclk", 0,
951 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0, 948 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0,
952 &_lock); 949 &_lock);
953 clk_register_clkdev(clk, NULL, "spear_camif.2"); 950 clk_register_clkdev(clk, NULL, "spear_camif.2");
954 951
955 clk = clk_register_gate(NULL, "cam3_clk", "cam3_mux_clk", 0, 952 clk = clk_register_gate(NULL, "cam3_clk", "cam3_mclk", 0,
956 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0, 953 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0,
957 &_lock); 954 &_lock);
958 clk_register_clkdev(clk, NULL, "spear_camif.3"); 955 clk_register_clkdev(clk, NULL, "spear_camif.3");
959 956
960 clk = clk_register_gate(NULL, "pwm_clk", "pwm_mux_clk", 0, 957 clk = clk_register_gate(NULL, "pwm_clk", "pwm_mclk", 0,
961 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0, 958 SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0,
962 &_lock); 959 &_lock);
963 clk_register_clkdev(clk, NULL, "pwm"); 960 clk_register_clkdev(clk, NULL, "pwm");
diff --git a/drivers/clk/spear/spear3xx_clock.c b/drivers/clk/spear/spear3xx_clock.c
index 01dd6daff2a1..c3157454bb3f 100644
--- a/drivers/clk/spear/spear3xx_clock.c
+++ b/drivers/clk/spear/spear3xx_clock.c
@@ -122,12 +122,12 @@ static struct gpt_rate_tbl gpt_rtbl[] = {
122}; 122};
123 123
124/* clock parents */ 124/* clock parents */
125static const char *uart0_parents[] = { "pll3_48m_clk", "uart_synth_gate_clk", }; 125static const char *uart0_parents[] = { "pll3_clk", "uart_syn_gclk", };
126static const char *firda_parents[] = { "pll3_48m_clk", "firda_synth_gate_clk", 126static const char *firda_parents[] = { "pll3_clk", "firda_syn_gclk",
127}; 127};
128static const char *gpt0_parents[] = { "pll3_48m_clk", "gpt0_synth_clk", }; 128static const char *gpt0_parents[] = { "pll3_clk", "gpt0_syn_clk", };
129static const char *gpt1_parents[] = { "pll3_48m_clk", "gpt1_synth_clk", }; 129static const char *gpt1_parents[] = { "pll3_clk", "gpt1_syn_clk", };
130static const char *gpt2_parents[] = { "pll3_48m_clk", "gpt2_synth_clk", }; 130static const char *gpt2_parents[] = { "pll3_clk", "gpt2_syn_clk", };
131static const char *gen2_3_parents[] = { "pll1_clk", "pll2_clk", }; 131static const char *gen2_3_parents[] = { "pll1_clk", "pll2_clk", };
132static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none", 132static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none",
133 "pll2_clk", }; 133 "pll2_clk", };
@@ -137,7 +137,7 @@ static void __init spear300_clk_init(void)
137{ 137{
138 struct clk *clk; 138 struct clk *clk;
139 139
140 clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_48m_clk", 0, 140 clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_clk", 0,
141 1, 1); 141 1, 1);
142 clk_register_clkdev(clk, NULL, "60000000.clcd"); 142 clk_register_clkdev(clk, NULL, "60000000.clcd");
143 143
@@ -219,15 +219,11 @@ static void __init spear310_clk_init(void)
219 #define SPEAR320_UARTX_PCLK_VAL_SYNTH1 0x0 219 #define SPEAR320_UARTX_PCLK_VAL_SYNTH1 0x0
220 #define SPEAR320_UARTX_PCLK_VAL_APB 0x1 220 #define SPEAR320_UARTX_PCLK_VAL_APB 0x1
221 221
222static const char *i2s_ref_parents[] = { "ras_pll2_clk", 222static const char *i2s_ref_parents[] = { "ras_pll2_clk", "ras_syn2_gclk", };
223 "ras_gen2_synth_gate_clk", }; 223static const char *sdhci_parents[] = { "ras_pll3_clk", "ras_syn3_gclk", };
224static const char *sdhci_parents[] = { "ras_pll3_48m_clk",
225 "ras_gen3_synth_gate_clk",
226};
227static const char *smii0_parents[] = { "smii_125m_pad", "ras_pll2_clk", 224static const char *smii0_parents[] = { "smii_125m_pad", "ras_pll2_clk",
228 "ras_gen0_synth_gate_clk", }; 225 "ras_syn0_gclk", };
229static const char *uartx_parents[] = { "ras_gen1_synth_gate_clk", "ras_apb_clk", 226static const char *uartx_parents[] = { "ras_syn1_gclk", "ras_apb_clk", };
230};
231 227
232static void __init spear320_clk_init(void) 228static void __init spear320_clk_init(void)
233{ 229{
@@ -237,7 +233,7 @@ static void __init spear320_clk_init(void)
237 CLK_IS_ROOT, 125000000); 233 CLK_IS_ROOT, 125000000);
238 clk_register_clkdev(clk, "smii_125m_pad", NULL); 234 clk_register_clkdev(clk, "smii_125m_pad", NULL);
239 235
240 clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_48m_clk", 0, 236 clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_clk", 0,
241 1, 1); 237 1, 1);
242 clk_register_clkdev(clk, NULL, "90000000.clcd"); 238 clk_register_clkdev(clk, NULL, "90000000.clcd");
243 239
@@ -363,9 +359,9 @@ void __init spear3xx_clk_init(void)
363 clk_register_clkdev(clk, NULL, "fc900000.rtc"); 359 clk_register_clkdev(clk, NULL, "fc900000.rtc");
364 360
365 /* clock derived from 24 MHz osc clk */ 361 /* clock derived from 24 MHz osc clk */
366 clk = clk_register_fixed_rate(NULL, "pll3_48m_clk", "osc_24m_clk", 0, 362 clk = clk_register_fixed_rate(NULL, "pll3_clk", "osc_24m_clk", 0,
367 48000000); 363 48000000);
368 clk_register_clkdev(clk, "pll3_48m_clk", NULL); 364 clk_register_clkdev(clk, "pll3_clk", NULL);
369 365
370 clk = clk_register_fixed_factor(NULL, "wdt_clk", "osc_24m_clk", 0, 1, 366 clk = clk_register_fixed_factor(NULL, "wdt_clk", "osc_24m_clk", 0, 1,
371 1); 367 1);
@@ -392,98 +388,98 @@ void __init spear3xx_clk_init(void)
392 HCLK_RATIO_MASK, 0, &_lock); 388 HCLK_RATIO_MASK, 0, &_lock);
393 clk_register_clkdev(clk, "ahb_clk", NULL); 389 clk_register_clkdev(clk, "ahb_clk", NULL);
394 390
395 clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk", 391 clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "pll1_clk", 0,
396 "pll1_clk", 0, UART_CLK_SYNT, NULL, aux_rtbl, 392 UART_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
397 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 393 &_lock, &clk1);
398 clk_register_clkdev(clk, "uart_synth_clk", NULL); 394 clk_register_clkdev(clk, "uart_syn_clk", NULL);
399 clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL); 395 clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
400 396
401 clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents, 397 clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
402 ARRAY_SIZE(uart0_parents), 0, PERIP_CLK_CFG, 398 ARRAY_SIZE(uart0_parents), 0, PERIP_CLK_CFG,
403 UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock); 399 UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock);
404 clk_register_clkdev(clk, "uart0_mux_clk", NULL); 400 clk_register_clkdev(clk, "uart0_mclk", NULL);
405 401
406 clk = clk_register_gate(NULL, "uart0", "uart0_mux_clk", 0, 402 clk = clk_register_gate(NULL, "uart0", "uart0_mclk", 0, PERIP1_CLK_ENB,
407 PERIP1_CLK_ENB, UART_CLK_ENB, 0, &_lock); 403 UART_CLK_ENB, 0, &_lock);
408 clk_register_clkdev(clk, NULL, "d0000000.serial"); 404 clk_register_clkdev(clk, NULL, "d0000000.serial");
409 405
410 clk = clk_register_aux("firda_synth_clk", "firda_synth_gate_clk", 406 clk = clk_register_aux("firda_syn_clk", "firda_syn_gclk", "pll1_clk", 0,
411 "pll1_clk", 0, FIRDA_CLK_SYNT, NULL, aux_rtbl, 407 FIRDA_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
412 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 408 &_lock, &clk1);
413 clk_register_clkdev(clk, "firda_synth_clk", NULL); 409 clk_register_clkdev(clk, "firda_syn_clk", NULL);
414 clk_register_clkdev(clk1, "firda_synth_gate_clk", NULL); 410 clk_register_clkdev(clk1, "firda_syn_gclk", NULL);
415 411
416 clk = clk_register_mux(NULL, "firda_mux_clk", firda_parents, 412 clk = clk_register_mux(NULL, "firda_mclk", firda_parents,
417 ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG, 413 ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG,
418 FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock); 414 FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock);
419 clk_register_clkdev(clk, "firda_mux_clk", NULL); 415 clk_register_clkdev(clk, "firda_mclk", NULL);
420 416
421 clk = clk_register_gate(NULL, "firda_clk", "firda_mux_clk", 0, 417 clk = clk_register_gate(NULL, "firda_clk", "firda_mclk", 0,
422 PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock); 418 PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock);
423 clk_register_clkdev(clk, NULL, "firda"); 419 clk_register_clkdev(clk, NULL, "firda");
424 420
425 /* gpt clocks */ 421 /* gpt clocks */
426 clk_register_gpt("gpt0_synth_clk", "pll1_clk", 0, PRSC0_CLK_CFG, 422 clk_register_gpt("gpt0_syn_clk", "pll1_clk", 0, PRSC0_CLK_CFG, gpt_rtbl,
427 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 423 ARRAY_SIZE(gpt_rtbl), &_lock);
428 clk = clk_register_mux(NULL, "gpt0_clk", gpt0_parents, 424 clk = clk_register_mux(NULL, "gpt0_clk", gpt0_parents,
429 ARRAY_SIZE(gpt0_parents), 0, PERIP_CLK_CFG, 425 ARRAY_SIZE(gpt0_parents), 0, PERIP_CLK_CFG,
430 GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 426 GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
431 clk_register_clkdev(clk, NULL, "gpt0"); 427 clk_register_clkdev(clk, NULL, "gpt0");
432 428
433 clk_register_gpt("gpt1_synth_clk", "pll1_clk", 0, PRSC1_CLK_CFG, 429 clk_register_gpt("gpt1_syn_clk", "pll1_clk", 0, PRSC1_CLK_CFG, gpt_rtbl,
434 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 430 ARRAY_SIZE(gpt_rtbl), &_lock);
435 clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt1_parents, 431 clk = clk_register_mux(NULL, "gpt1_mclk", gpt1_parents,
436 ARRAY_SIZE(gpt1_parents), 0, PERIP_CLK_CFG, 432 ARRAY_SIZE(gpt1_parents), 0, PERIP_CLK_CFG,
437 GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 433 GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
438 clk_register_clkdev(clk, "gpt1_mux_clk", NULL); 434 clk_register_clkdev(clk, "gpt1_mclk", NULL);
439 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0, 435 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
440 PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock); 436 PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock);
441 clk_register_clkdev(clk, NULL, "gpt1"); 437 clk_register_clkdev(clk, NULL, "gpt1");
442 438
443 clk_register_gpt("gpt2_synth_clk", "pll1_clk", 0, PRSC2_CLK_CFG, 439 clk_register_gpt("gpt2_syn_clk", "pll1_clk", 0, PRSC2_CLK_CFG, gpt_rtbl,
444 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 440 ARRAY_SIZE(gpt_rtbl), &_lock);
445 clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt2_parents, 441 clk = clk_register_mux(NULL, "gpt2_mclk", gpt2_parents,
446 ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG, 442 ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG,
447 GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 443 GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
448 clk_register_clkdev(clk, "gpt2_mux_clk", NULL); 444 clk_register_clkdev(clk, "gpt2_mclk", NULL);
449 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0, 445 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
450 PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock); 446 PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock);
451 clk_register_clkdev(clk, NULL, "gpt2"); 447 clk_register_clkdev(clk, NULL, "gpt2");
452 448
453 /* general synths clocks */ 449 /* general synths clocks */
454 clk = clk_register_aux("gen0_synth_clk", "gen0_synth_gate_clk", 450 clk = clk_register_aux("gen0_syn_clk", "gen0_syn_gclk", "pll1_clk",
455 "pll1_clk", 0, GEN0_CLK_SYNT, NULL, aux_rtbl, 451 0, GEN0_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
456 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 452 &_lock, &clk1);
457 clk_register_clkdev(clk, "gen0_synth_clk", NULL); 453 clk_register_clkdev(clk, "gen0_syn_clk", NULL);
458 clk_register_clkdev(clk1, "gen0_synth_gate_clk", NULL); 454 clk_register_clkdev(clk1, "gen0_syn_gclk", NULL);
459 455
460 clk = clk_register_aux("gen1_synth_clk", "gen1_synth_gate_clk", 456 clk = clk_register_aux("gen1_syn_clk", "gen1_syn_gclk", "pll1_clk",
461 "pll1_clk", 0, GEN1_CLK_SYNT, NULL, aux_rtbl, 457 0, GEN1_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
462 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 458 &_lock, &clk1);
463 clk_register_clkdev(clk, "gen1_synth_clk", NULL); 459 clk_register_clkdev(clk, "gen1_syn_clk", NULL);
464 clk_register_clkdev(clk1, "gen1_synth_gate_clk", NULL); 460 clk_register_clkdev(clk1, "gen1_syn_gclk", NULL);
465 461
466 clk = clk_register_mux(NULL, "gen2_3_parent_clk", gen2_3_parents, 462 clk = clk_register_mux(NULL, "gen2_3_par_clk", gen2_3_parents,
467 ARRAY_SIZE(gen2_3_parents), 0, CORE_CLK_CFG, 463 ARRAY_SIZE(gen2_3_parents), 0, CORE_CLK_CFG,
468 GEN_SYNTH2_3_CLK_SHIFT, GEN_SYNTH2_3_CLK_MASK, 0, 464 GEN_SYNTH2_3_CLK_SHIFT, GEN_SYNTH2_3_CLK_MASK, 0,
469 &_lock); 465 &_lock);
470 clk_register_clkdev(clk, "gen2_3_parent_clk", NULL); 466 clk_register_clkdev(clk, "gen2_3_par_clk", NULL);
471 467
472 clk = clk_register_aux("gen2_synth_clk", "gen2_synth_gate_clk", 468 clk = clk_register_aux("gen2_syn_clk", "gen2_syn_gclk",
473 "gen2_3_parent_clk", 0, GEN2_CLK_SYNT, NULL, aux_rtbl, 469 "gen2_3_par_clk", 0, GEN2_CLK_SYNT, NULL, aux_rtbl,
474 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 470 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
475 clk_register_clkdev(clk, "gen2_synth_clk", NULL); 471 clk_register_clkdev(clk, "gen2_syn_clk", NULL);
476 clk_register_clkdev(clk1, "gen2_synth_gate_clk", NULL); 472 clk_register_clkdev(clk1, "gen2_syn_gclk", NULL);
477 473
478 clk = clk_register_aux("gen3_synth_clk", "gen3_synth_gate_clk", 474 clk = clk_register_aux("gen3_syn_clk", "gen3_syn_gclk",
479 "gen2_3_parent_clk", 0, GEN3_CLK_SYNT, NULL, aux_rtbl, 475 "gen2_3_par_clk", 0, GEN3_CLK_SYNT, NULL, aux_rtbl,
480 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 476 ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
481 clk_register_clkdev(clk, "gen3_synth_clk", NULL); 477 clk_register_clkdev(clk, "gen3_syn_clk", NULL);
482 clk_register_clkdev(clk1, "gen3_synth_gate_clk", NULL); 478 clk_register_clkdev(clk1, "gen3_syn_gclk", NULL);
483 479
484 /* clock derived from pll3 clk */ 480 /* clock derived from pll3 clk */
485 clk = clk_register_gate(NULL, "usbh_clk", "pll3_48m_clk", 0, 481 clk = clk_register_gate(NULL, "usbh_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
486 PERIP1_CLK_ENB, USBH_CLK_ENB, 0, &_lock); 482 USBH_CLK_ENB, 0, &_lock);
487 clk_register_clkdev(clk, "usbh_clk", NULL); 483 clk_register_clkdev(clk, "usbh_clk", NULL);
488 484
489 clk = clk_register_fixed_factor(NULL, "usbh.0_clk", "usbh_clk", 0, 1, 485 clk = clk_register_fixed_factor(NULL, "usbh.0_clk", "usbh_clk", 0, 1,
@@ -494,8 +490,8 @@ void __init spear3xx_clk_init(void)
494 1); 490 1);
495 clk_register_clkdev(clk, "usbh.1_clk", NULL); 491 clk_register_clkdev(clk, "usbh.1_clk", NULL);
496 492
497 clk = clk_register_gate(NULL, "usbd_clk", "pll3_48m_clk", 0, 493 clk = clk_register_gate(NULL, "usbd_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
498 PERIP1_CLK_ENB, USBD_CLK_ENB, 0, &_lock); 494 USBD_CLK_ENB, 0, &_lock);
499 clk_register_clkdev(clk, NULL, "designware_udc"); 495 clk_register_clkdev(clk, NULL, "designware_udc");
500 496
501 /* clock derived from ahb clk */ 497 /* clock derived from ahb clk */
@@ -579,29 +575,25 @@ void __init spear3xx_clk_init(void)
579 RAS_CLK_ENB, RAS_PLL2_CLK_ENB, 0, &_lock); 575 RAS_CLK_ENB, RAS_PLL2_CLK_ENB, 0, &_lock);
580 clk_register_clkdev(clk, "ras_pll2_clk", NULL); 576 clk_register_clkdev(clk, "ras_pll2_clk", NULL);
581 577
582 clk = clk_register_gate(NULL, "ras_pll3_48m_clk", "pll3_48m_clk", 0, 578 clk = clk_register_gate(NULL, "ras_pll3_clk", "pll3_clk", 0,
583 RAS_CLK_ENB, RAS_48M_CLK_ENB, 0, &_lock); 579 RAS_CLK_ENB, RAS_48M_CLK_ENB, 0, &_lock);
584 clk_register_clkdev(clk, "ras_pll3_48m_clk", NULL); 580 clk_register_clkdev(clk, "ras_pll3_clk", NULL);
585 581
586 clk = clk_register_gate(NULL, "ras_gen0_synth_gate_clk", 582 clk = clk_register_gate(NULL, "ras_syn0_gclk", "gen0_syn_gclk", 0,
587 "gen0_synth_gate_clk", 0, RAS_CLK_ENB, 583 RAS_CLK_ENB, RAS_SYNT0_CLK_ENB, 0, &_lock);
588 RAS_SYNT0_CLK_ENB, 0, &_lock); 584 clk_register_clkdev(clk, "ras_syn0_gclk", NULL);
589 clk_register_clkdev(clk, "ras_gen0_synth_gate_clk", NULL); 585
590 586 clk = clk_register_gate(NULL, "ras_syn1_gclk", "gen1_syn_gclk", 0,
591 clk = clk_register_gate(NULL, "ras_gen1_synth_gate_clk", 587 RAS_CLK_ENB, RAS_SYNT1_CLK_ENB, 0, &_lock);
592 "gen1_synth_gate_clk", 0, RAS_CLK_ENB, 588 clk_register_clkdev(clk, "ras_syn1_gclk", NULL);
593 RAS_SYNT1_CLK_ENB, 0, &_lock); 589
594 clk_register_clkdev(clk, "ras_gen1_synth_gate_clk", NULL); 590 clk = clk_register_gate(NULL, "ras_syn2_gclk", "gen2_syn_gclk", 0,
595 591 RAS_CLK_ENB, RAS_SYNT2_CLK_ENB, 0, &_lock);
596 clk = clk_register_gate(NULL, "ras_gen2_synth_gate_clk", 592 clk_register_clkdev(clk, "ras_syn2_gclk", NULL);
597 "gen2_synth_gate_clk", 0, RAS_CLK_ENB, 593
598 RAS_SYNT2_CLK_ENB, 0, &_lock); 594 clk = clk_register_gate(NULL, "ras_syn3_gclk", "gen3_syn_gclk", 0,
599 clk_register_clkdev(clk, "ras_gen2_synth_gate_clk", NULL); 595 RAS_CLK_ENB, RAS_SYNT3_CLK_ENB, 0, &_lock);
600 596 clk_register_clkdev(clk, "ras_syn3_gclk", NULL);
601 clk = clk_register_gate(NULL, "ras_gen3_synth_gate_clk",
602 "gen3_synth_gate_clk", 0, RAS_CLK_ENB,
603 RAS_SYNT3_CLK_ENB, 0, &_lock);
604 clk_register_clkdev(clk, "ras_gen3_synth_gate_clk", NULL);
605 597
606 if (of_machine_is_compatible("st,spear300")) 598 if (of_machine_is_compatible("st,spear300"))
607 spear300_clk_init(); 599 spear300_clk_init();
diff --git a/drivers/clk/spear/spear6xx_clock.c b/drivers/clk/spear/spear6xx_clock.c
index 61026ae564ab..a98d0866f541 100644
--- a/drivers/clk/spear/spear6xx_clock.c
+++ b/drivers/clk/spear/spear6xx_clock.c
@@ -97,13 +97,12 @@ static struct aux_rate_tbl aux_rtbl[] = {
97 {.xscale = 1, .yscale = 2, .eq = 1}, /* 166 MHz */ 97 {.xscale = 1, .yscale = 2, .eq = 1}, /* 166 MHz */
98}; 98};
99 99
100static const char *clcd_parents[] = { "pll3_48m_clk", "clcd_synth_gate_clk", }; 100static const char *clcd_parents[] = { "pll3_clk", "clcd_syn_gclk", };
101static const char *firda_parents[] = { "pll3_48m_clk", "firda_synth_gate_clk", 101static const char *firda_parents[] = { "pll3_clk", "firda_syn_gclk", };
102}; 102static const char *uart_parents[] = { "pll3_clk", "uart_syn_gclk", };
103static const char *uart_parents[] = { "pll3_48m_clk", "uart_synth_gate_clk", }; 103static const char *gpt0_1_parents[] = { "pll3_clk", "gpt0_1_syn_clk", };
104static const char *gpt0_1_parents[] = { "pll3_48m_clk", "gpt0_1_synth_clk", }; 104static const char *gpt2_parents[] = { "pll3_clk", "gpt2_syn_clk", };
105static const char *gpt2_parents[] = { "pll3_48m_clk", "gpt2_synth_clk", }; 105static const char *gpt3_parents[] = { "pll3_clk", "gpt3_syn_clk", };
106static const char *gpt3_parents[] = { "pll3_48m_clk", "gpt3_synth_clk", };
107static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none", 106static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none",
108 "pll2_clk", }; 107 "pll2_clk", };
109 108
@@ -136,9 +135,9 @@ void __init spear6xx_clk_init(void)
136 clk_register_clkdev(clk, NULL, "rtc-spear"); 135 clk_register_clkdev(clk, NULL, "rtc-spear");
137 136
138 /* clock derived from 30 MHz osc clk */ 137 /* clock derived from 30 MHz osc clk */
139 clk = clk_register_fixed_rate(NULL, "pll3_48m_clk", "osc_24m_clk", 0, 138 clk = clk_register_fixed_rate(NULL, "pll3_clk", "osc_24m_clk", 0,
140 48000000); 139 48000000);
141 clk_register_clkdev(clk, "pll3_48m_clk", NULL); 140 clk_register_clkdev(clk, "pll3_clk", NULL);
142 141
143 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "osc_30m_clk", 142 clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "osc_30m_clk",
144 0, PLL1_CTR, PLL1_FRQ, pll_rtbl, ARRAY_SIZE(pll_rtbl), 143 0, PLL1_CTR, PLL1_FRQ, pll_rtbl, ARRAY_SIZE(pll_rtbl),
@@ -146,9 +145,9 @@ void __init spear6xx_clk_init(void)
146 clk_register_clkdev(clk, "vco1_clk", NULL); 145 clk_register_clkdev(clk, "vco1_clk", NULL);
147 clk_register_clkdev(clk1, "pll1_clk", NULL); 146 clk_register_clkdev(clk1, "pll1_clk", NULL);
148 147
149 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, 148 clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "osc_30m_clk",
150 "osc_30m_clk", 0, PLL2_CTR, PLL2_FRQ, pll_rtbl, 149 0, PLL2_CTR, PLL2_FRQ, pll_rtbl, ARRAY_SIZE(pll_rtbl),
151 ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 150 &_lock, &clk1, NULL);
152 clk_register_clkdev(clk, "vco2_clk", NULL); 151 clk_register_clkdev(clk, "vco2_clk", NULL);
153 clk_register_clkdev(clk1, "pll2_clk", NULL); 152 clk_register_clkdev(clk1, "pll2_clk", NULL);
154 153
@@ -165,111 +164,111 @@ void __init spear6xx_clk_init(void)
165 HCLK_RATIO_MASK, 0, &_lock); 164 HCLK_RATIO_MASK, 0, &_lock);
166 clk_register_clkdev(clk, "ahb_clk", NULL); 165 clk_register_clkdev(clk, "ahb_clk", NULL);
167 166
168 clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk", 167 clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "pll1_clk", 0,
169 "pll1_clk", 0, UART_CLK_SYNT, NULL, aux_rtbl, 168 UART_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
170 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 169 &_lock, &clk1);
171 clk_register_clkdev(clk, "uart_synth_clk", NULL); 170 clk_register_clkdev(clk, "uart_syn_clk", NULL);
172 clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL); 171 clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
173 172
174 clk = clk_register_mux(NULL, "uart_mux_clk", uart_parents, 173 clk = clk_register_mux(NULL, "uart_mclk", uart_parents,
175 ARRAY_SIZE(uart_parents), 0, PERIP_CLK_CFG, 174 ARRAY_SIZE(uart_parents), 0, PERIP_CLK_CFG,
176 UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock); 175 UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock);
177 clk_register_clkdev(clk, "uart_mux_clk", NULL); 176 clk_register_clkdev(clk, "uart_mclk", NULL);
178 177
179 clk = clk_register_gate(NULL, "uart0", "uart_mux_clk", 0, 178 clk = clk_register_gate(NULL, "uart0", "uart_mclk", 0, PERIP1_CLK_ENB,
180 PERIP1_CLK_ENB, UART0_CLK_ENB, 0, &_lock); 179 UART0_CLK_ENB, 0, &_lock);
181 clk_register_clkdev(clk, NULL, "d0000000.serial"); 180 clk_register_clkdev(clk, NULL, "d0000000.serial");
182 181
183 clk = clk_register_gate(NULL, "uart1", "uart_mux_clk", 0, 182 clk = clk_register_gate(NULL, "uart1", "uart_mclk", 0, PERIP1_CLK_ENB,
184 PERIP1_CLK_ENB, UART1_CLK_ENB, 0, &_lock); 183 UART1_CLK_ENB, 0, &_lock);
185 clk_register_clkdev(clk, NULL, "d0080000.serial"); 184 clk_register_clkdev(clk, NULL, "d0080000.serial");
186 185
187 clk = clk_register_aux("firda_synth_clk", "firda_synth_gate_clk", 186 clk = clk_register_aux("firda_syn_clk", "firda_syn_gclk", "pll1_clk",
188 "pll1_clk", 0, FIRDA_CLK_SYNT, NULL, aux_rtbl, 187 0, FIRDA_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
189 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 188 &_lock, &clk1);
190 clk_register_clkdev(clk, "firda_synth_clk", NULL); 189 clk_register_clkdev(clk, "firda_syn_clk", NULL);
191 clk_register_clkdev(clk1, "firda_synth_gate_clk", NULL); 190 clk_register_clkdev(clk1, "firda_syn_gclk", NULL);
192 191
193 clk = clk_register_mux(NULL, "firda_mux_clk", firda_parents, 192 clk = clk_register_mux(NULL, "firda_mclk", firda_parents,
194 ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG, 193 ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG,
195 FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock); 194 FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock);
196 clk_register_clkdev(clk, "firda_mux_clk", NULL); 195 clk_register_clkdev(clk, "firda_mclk", NULL);
197 196
198 clk = clk_register_gate(NULL, "firda_clk", "firda_mux_clk", 0, 197 clk = clk_register_gate(NULL, "firda_clk", "firda_mclk", 0,
199 PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock); 198 PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock);
200 clk_register_clkdev(clk, NULL, "firda"); 199 clk_register_clkdev(clk, NULL, "firda");
201 200
202 clk = clk_register_aux("clcd_synth_clk", "clcd_synth_gate_clk", 201 clk = clk_register_aux("clcd_syn_clk", "clcd_syn_gclk", "pll1_clk",
203 "pll1_clk", 0, CLCD_CLK_SYNT, NULL, aux_rtbl, 202 0, CLCD_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
204 ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 203 &_lock, &clk1);
205 clk_register_clkdev(clk, "clcd_synth_clk", NULL); 204 clk_register_clkdev(clk, "clcd_syn_clk", NULL);
206 clk_register_clkdev(clk1, "clcd_synth_gate_clk", NULL); 205 clk_register_clkdev(clk1, "clcd_syn_gclk", NULL);
207 206
208 clk = clk_register_mux(NULL, "clcd_mux_clk", clcd_parents, 207 clk = clk_register_mux(NULL, "clcd_mclk", clcd_parents,
209 ARRAY_SIZE(clcd_parents), 0, PERIP_CLK_CFG, 208 ARRAY_SIZE(clcd_parents), 0, PERIP_CLK_CFG,
210 CLCD_CLK_SHIFT, CLCD_CLK_MASK, 0, &_lock); 209 CLCD_CLK_SHIFT, CLCD_CLK_MASK, 0, &_lock);
211 clk_register_clkdev(clk, "clcd_mux_clk", NULL); 210 clk_register_clkdev(clk, "clcd_mclk", NULL);
212 211
213 clk = clk_register_gate(NULL, "clcd_clk", "clcd_mux_clk", 0, 212 clk = clk_register_gate(NULL, "clcd_clk", "clcd_mclk", 0,
214 PERIP1_CLK_ENB, CLCD_CLK_ENB, 0, &_lock); 213 PERIP1_CLK_ENB, CLCD_CLK_ENB, 0, &_lock);
215 clk_register_clkdev(clk, NULL, "clcd"); 214 clk_register_clkdev(clk, NULL, "clcd");
216 215
217 /* gpt clocks */ 216 /* gpt clocks */
218 clk = clk_register_gpt("gpt0_1_synth_clk", "pll1_clk", 0, PRSC0_CLK_CFG, 217 clk = clk_register_gpt("gpt0_1_syn_clk", "pll1_clk", 0, PRSC0_CLK_CFG,
219 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 218 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
220 clk_register_clkdev(clk, "gpt0_1_synth_clk", NULL); 219 clk_register_clkdev(clk, "gpt0_1_syn_clk", NULL);
221 220
222 clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt0_1_parents, 221 clk = clk_register_mux(NULL, "gpt0_mclk", gpt0_1_parents,
223 ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG, 222 ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG,
224 GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 223 GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
225 clk_register_clkdev(clk, NULL, "gpt0"); 224 clk_register_clkdev(clk, NULL, "gpt0");
226 225
227 clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt0_1_parents, 226 clk = clk_register_mux(NULL, "gpt1_mclk", gpt0_1_parents,
228 ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG, 227 ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG,
229 GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 228 GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
230 clk_register_clkdev(clk, "gpt1_mux_clk", NULL); 229 clk_register_clkdev(clk, "gpt1_mclk", NULL);
231 230
232 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0, 231 clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
233 PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock); 232 PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock);
234 clk_register_clkdev(clk, NULL, "gpt1"); 233 clk_register_clkdev(clk, NULL, "gpt1");
235 234
236 clk = clk_register_gpt("gpt2_synth_clk", "pll1_clk", 0, PRSC1_CLK_CFG, 235 clk = clk_register_gpt("gpt2_syn_clk", "pll1_clk", 0, PRSC1_CLK_CFG,
237 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 236 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
238 clk_register_clkdev(clk, "gpt2_synth_clk", NULL); 237 clk_register_clkdev(clk, "gpt2_syn_clk", NULL);
239 238
240 clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt2_parents, 239 clk = clk_register_mux(NULL, "gpt2_mclk", gpt2_parents,
241 ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG, 240 ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG,
242 GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 241 GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
243 clk_register_clkdev(clk, "gpt2_mux_clk", NULL); 242 clk_register_clkdev(clk, "gpt2_mclk", NULL);
244 243
245 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0, 244 clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
246 PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock); 245 PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock);
247 clk_register_clkdev(clk, NULL, "gpt2"); 246 clk_register_clkdev(clk, NULL, "gpt2");
248 247
249 clk = clk_register_gpt("gpt3_synth_clk", "pll1_clk", 0, PRSC2_CLK_CFG, 248 clk = clk_register_gpt("gpt3_syn_clk", "pll1_clk", 0, PRSC2_CLK_CFG,
250 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock); 249 gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
251 clk_register_clkdev(clk, "gpt3_synth_clk", NULL); 250 clk_register_clkdev(clk, "gpt3_syn_clk", NULL);
252 251
253 clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt3_parents, 252 clk = clk_register_mux(NULL, "gpt3_mclk", gpt3_parents,
254 ARRAY_SIZE(gpt3_parents), 0, PERIP_CLK_CFG, 253 ARRAY_SIZE(gpt3_parents), 0, PERIP_CLK_CFG,
255 GPT3_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock); 254 GPT3_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
256 clk_register_clkdev(clk, "gpt3_mux_clk", NULL); 255 clk_register_clkdev(clk, "gpt3_mclk", NULL);
257 256
258 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0, 257 clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
259 PERIP1_CLK_ENB, GPT3_CLK_ENB, 0, &_lock); 258 PERIP1_CLK_ENB, GPT3_CLK_ENB, 0, &_lock);
260 clk_register_clkdev(clk, NULL, "gpt3"); 259 clk_register_clkdev(clk, NULL, "gpt3");
261 260
262 /* clock derived from pll3 clk */ 261 /* clock derived from pll3 clk */
263 clk = clk_register_gate(NULL, "usbh0_clk", "pll3_48m_clk", 0, 262 clk = clk_register_gate(NULL, "usbh0_clk", "pll3_clk", 0,
264 PERIP1_CLK_ENB, USBH0_CLK_ENB, 0, &_lock); 263 PERIP1_CLK_ENB, USBH0_CLK_ENB, 0, &_lock);
265 clk_register_clkdev(clk, NULL, "usbh.0_clk"); 264 clk_register_clkdev(clk, NULL, "usbh.0_clk");
266 265
267 clk = clk_register_gate(NULL, "usbh1_clk", "pll3_48m_clk", 0, 266 clk = clk_register_gate(NULL, "usbh1_clk", "pll3_clk", 0,
268 PERIP1_CLK_ENB, USBH1_CLK_ENB, 0, &_lock); 267 PERIP1_CLK_ENB, USBH1_CLK_ENB, 0, &_lock);
269 clk_register_clkdev(clk, NULL, "usbh.1_clk"); 268 clk_register_clkdev(clk, NULL, "usbh.1_clk");
270 269
271 clk = clk_register_gate(NULL, "usbd_clk", "pll3_48m_clk", 0, 270 clk = clk_register_gate(NULL, "usbd_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
272 PERIP1_CLK_ENB, USBD_CLK_ENB, 0, &_lock); 271 USBD_CLK_ENB, 0, &_lock);
273 clk_register_clkdev(clk, NULL, "designware_udc"); 272 clk_register_clkdev(clk, NULL, "designware_udc");
274 273
275 /* clock derived from ahb clk */ 274 /* clock derived from ahb clk */
@@ -278,9 +277,8 @@ void __init spear6xx_clk_init(void)
278 clk_register_clkdev(clk, "ahbmult2_clk", NULL); 277 clk_register_clkdev(clk, "ahbmult2_clk", NULL);
279 278
280 clk = clk_register_mux(NULL, "ddr_clk", ddr_parents, 279 clk = clk_register_mux(NULL, "ddr_clk", ddr_parents,
281 ARRAY_SIZE(ddr_parents), 280 ARRAY_SIZE(ddr_parents), 0, PLL_CLK_CFG, MCTR_CLK_SHIFT,
282 0, PLL_CLK_CFG, MCTR_CLK_SHIFT, MCTR_CLK_MASK, 0, 281 MCTR_CLK_MASK, 0, &_lock);
283 &_lock);
284 clk_register_clkdev(clk, "ddr_clk", NULL); 282 clk_register_clkdev(clk, "ddr_clk", NULL);
285 283
286 clk = clk_register_divider(NULL, "apb_clk", "ahb_clk", 284 clk = clk_register_divider(NULL, "apb_clk", "ahb_clk",
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 7f2f149ae40f..fb8a5279c5d8 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -138,7 +138,7 @@ void disable_cpufreq(void)
138static LIST_HEAD(cpufreq_governor_list); 138static LIST_HEAD(cpufreq_governor_list);
139static DEFINE_MUTEX(cpufreq_governor_mutex); 139static DEFINE_MUTEX(cpufreq_governor_mutex);
140 140
141struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu) 141static struct cpufreq_policy *__cpufreq_cpu_get(unsigned int cpu, bool sysfs)
142{ 142{
143 struct cpufreq_policy *data; 143 struct cpufreq_policy *data;
144 unsigned long flags; 144 unsigned long flags;
@@ -162,7 +162,7 @@ struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
162 if (!data) 162 if (!data)
163 goto err_out_put_module; 163 goto err_out_put_module;
164 164
165 if (!kobject_get(&data->kobj)) 165 if (!sysfs && !kobject_get(&data->kobj))
166 goto err_out_put_module; 166 goto err_out_put_module;
167 167
168 spin_unlock_irqrestore(&cpufreq_driver_lock, flags); 168 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
@@ -175,16 +175,35 @@ err_out_unlock:
175err_out: 175err_out:
176 return NULL; 176 return NULL;
177} 177}
178
179struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
180{
181 return __cpufreq_cpu_get(cpu, false);
182}
178EXPORT_SYMBOL_GPL(cpufreq_cpu_get); 183EXPORT_SYMBOL_GPL(cpufreq_cpu_get);
179 184
185static struct cpufreq_policy *cpufreq_cpu_get_sysfs(unsigned int cpu)
186{
187 return __cpufreq_cpu_get(cpu, true);
188}
180 189
181void cpufreq_cpu_put(struct cpufreq_policy *data) 190static void __cpufreq_cpu_put(struct cpufreq_policy *data, bool sysfs)
182{ 191{
183 kobject_put(&data->kobj); 192 if (!sysfs)
193 kobject_put(&data->kobj);
184 module_put(cpufreq_driver->owner); 194 module_put(cpufreq_driver->owner);
185} 195}
196
197void cpufreq_cpu_put(struct cpufreq_policy *data)
198{
199 __cpufreq_cpu_put(data, false);
200}
186EXPORT_SYMBOL_GPL(cpufreq_cpu_put); 201EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
187 202
203static void cpufreq_cpu_put_sysfs(struct cpufreq_policy *data)
204{
205 __cpufreq_cpu_put(data, true);
206}
188 207
189/********************************************************************* 208/*********************************************************************
190 * EXTERNALLY AFFECTING FREQUENCY CHANGES * 209 * EXTERNALLY AFFECTING FREQUENCY CHANGES *
@@ -617,7 +636,7 @@ static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf)
617 struct cpufreq_policy *policy = to_policy(kobj); 636 struct cpufreq_policy *policy = to_policy(kobj);
618 struct freq_attr *fattr = to_attr(attr); 637 struct freq_attr *fattr = to_attr(attr);
619 ssize_t ret = -EINVAL; 638 ssize_t ret = -EINVAL;
620 policy = cpufreq_cpu_get(policy->cpu); 639 policy = cpufreq_cpu_get_sysfs(policy->cpu);
621 if (!policy) 640 if (!policy)
622 goto no_policy; 641 goto no_policy;
623 642
@@ -631,7 +650,7 @@ static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf)
631 650
632 unlock_policy_rwsem_read(policy->cpu); 651 unlock_policy_rwsem_read(policy->cpu);
633fail: 652fail:
634 cpufreq_cpu_put(policy); 653 cpufreq_cpu_put_sysfs(policy);
635no_policy: 654no_policy:
636 return ret; 655 return ret;
637} 656}
@@ -642,7 +661,7 @@ static ssize_t store(struct kobject *kobj, struct attribute *attr,
642 struct cpufreq_policy *policy = to_policy(kobj); 661 struct cpufreq_policy *policy = to_policy(kobj);
643 struct freq_attr *fattr = to_attr(attr); 662 struct freq_attr *fattr = to_attr(attr);
644 ssize_t ret = -EINVAL; 663 ssize_t ret = -EINVAL;
645 policy = cpufreq_cpu_get(policy->cpu); 664 policy = cpufreq_cpu_get_sysfs(policy->cpu);
646 if (!policy) 665 if (!policy)
647 goto no_policy; 666 goto no_policy;
648 667
@@ -656,7 +675,7 @@ static ssize_t store(struct kobject *kobj, struct attribute *attr,
656 675
657 unlock_policy_rwsem_write(policy->cpu); 676 unlock_policy_rwsem_write(policy->cpu);
658fail: 677fail:
659 cpufreq_cpu_put(policy); 678 cpufreq_cpu_put_sysfs(policy);
660no_policy: 679no_policy:
661 return ret; 680 return ret;
662} 681}
diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c
index b243a7ee01f6..af2d81e10f71 100644
--- a/drivers/cpufreq/exynos-cpufreq.c
+++ b/drivers/cpufreq/exynos-cpufreq.c
@@ -62,8 +62,18 @@ static int exynos_target(struct cpufreq_policy *policy,
62 goto out; 62 goto out;
63 } 63 }
64 64
65 if (cpufreq_frequency_table_target(policy, freq_table, 65 /*
66 freqs.old, relation, &old_index)) { 66 * The policy max have been changed so that we cannot get proper
67 * old_index with cpufreq_frequency_table_target(). Thus, ignore
68 * policy and get the index from the raw freqeuncy table.
69 */
70 for (old_index = 0;
71 freq_table[old_index].frequency != CPUFREQ_TABLE_END;
72 old_index++)
73 if (freq_table[old_index].frequency == freqs.old)
74 break;
75
76 if (freq_table[old_index].frequency == CPUFREQ_TABLE_END) {
67 ret = -EINVAL; 77 ret = -EINVAL;
68 goto out; 78 goto out;
69 } 79 }
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index d90519cec880..d6a533e68e0f 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -201,6 +201,22 @@ void cpuidle_resume_and_unlock(void)
201 201
202EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); 202EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock);
203 203
204/* Currently used in suspend/resume path to suspend cpuidle */
205void cpuidle_pause(void)
206{
207 mutex_lock(&cpuidle_lock);
208 cpuidle_uninstall_idle_handler();
209 mutex_unlock(&cpuidle_lock);
210}
211
212/* Currently used in suspend/resume path to resume cpuidle */
213void cpuidle_resume(void)
214{
215 mutex_lock(&cpuidle_lock);
216 cpuidle_install_idle_handler();
217 mutex_unlock(&cpuidle_lock);
218}
219
204/** 220/**
205 * cpuidle_wrap_enter - performs timekeeping and irqen around enter function 221 * cpuidle_wrap_enter - performs timekeeping and irqen around enter function
206 * @dev: pointer to a valid cpuidle_device object 222 * @dev: pointer to a valid cpuidle_device object
@@ -265,7 +281,7 @@ static void poll_idle_init(struct cpuidle_driver *drv)
265 state->power_usage = -1; 281 state->power_usage = -1;
266 state->flags = 0; 282 state->flags = 0;
267 state->enter = poll_idle; 283 state->enter = poll_idle;
268 state->disable = 0; 284 state->disabled = false;
269} 285}
270#else 286#else
271static void poll_idle_init(struct cpuidle_driver *drv) {} 287static void poll_idle_init(struct cpuidle_driver *drv) {}
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
index 40cd3f3024df..58bf3b1ac9c4 100644
--- a/drivers/cpuidle/driver.c
+++ b/drivers/cpuidle/driver.c
@@ -16,6 +16,7 @@
16 16
17static struct cpuidle_driver *cpuidle_curr_driver; 17static struct cpuidle_driver *cpuidle_curr_driver;
18DEFINE_SPINLOCK(cpuidle_driver_lock); 18DEFINE_SPINLOCK(cpuidle_driver_lock);
19int cpuidle_driver_refcount;
19 20
20static void __cpuidle_register_driver(struct cpuidle_driver *drv) 21static void __cpuidle_register_driver(struct cpuidle_driver *drv)
21{ 22{
@@ -89,8 +90,34 @@ void cpuidle_unregister_driver(struct cpuidle_driver *drv)
89 } 90 }
90 91
91 spin_lock(&cpuidle_driver_lock); 92 spin_lock(&cpuidle_driver_lock);
92 cpuidle_curr_driver = NULL; 93
94 if (!WARN_ON(cpuidle_driver_refcount > 0))
95 cpuidle_curr_driver = NULL;
96
93 spin_unlock(&cpuidle_driver_lock); 97 spin_unlock(&cpuidle_driver_lock);
94} 98}
95 99
96EXPORT_SYMBOL_GPL(cpuidle_unregister_driver); 100EXPORT_SYMBOL_GPL(cpuidle_unregister_driver);
101
102struct cpuidle_driver *cpuidle_driver_ref(void)
103{
104 struct cpuidle_driver *drv;
105
106 spin_lock(&cpuidle_driver_lock);
107
108 drv = cpuidle_curr_driver;
109 cpuidle_driver_refcount++;
110
111 spin_unlock(&cpuidle_driver_lock);
112 return drv;
113}
114
115void cpuidle_driver_unref(void)
116{
117 spin_lock(&cpuidle_driver_lock);
118
119 if (!WARN_ON(cpuidle_driver_refcount <= 0))
120 cpuidle_driver_refcount--;
121
122 spin_unlock(&cpuidle_driver_lock);
123}
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index 06335756ea14..5b1f2c372c1f 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -281,7 +281,8 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
281 * unless the timer is happening really really soon. 281 * unless the timer is happening really really soon.
282 */ 282 */
283 if (data->expected_us > 5 && 283 if (data->expected_us > 5 &&
284 drv->states[CPUIDLE_DRIVER_STATE_START].disable == 0) 284 !drv->states[CPUIDLE_DRIVER_STATE_START].disabled &&
285 dev->states_usage[CPUIDLE_DRIVER_STATE_START].disable == 0)
285 data->last_state_idx = CPUIDLE_DRIVER_STATE_START; 286 data->last_state_idx = CPUIDLE_DRIVER_STATE_START;
286 287
287 /* 288 /*
@@ -290,8 +291,9 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
290 */ 291 */
291 for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) { 292 for (i = CPUIDLE_DRIVER_STATE_START; i < drv->state_count; i++) {
292 struct cpuidle_state *s = &drv->states[i]; 293 struct cpuidle_state *s = &drv->states[i];
294 struct cpuidle_state_usage *su = &dev->states_usage[i];
293 295
294 if (s->disable) 296 if (s->disabled || su->disable)
295 continue; 297 continue;
296 if (s->target_residency > data->predicted_us) 298 if (s->target_residency > data->predicted_us)
297 continue; 299 continue;
diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
index 88032b4dc6d2..5f809e337b89 100644
--- a/drivers/cpuidle/sysfs.c
+++ b/drivers/cpuidle/sysfs.c
@@ -217,7 +217,8 @@ struct cpuidle_state_attr {
217 struct attribute attr; 217 struct attribute attr;
218 ssize_t (*show)(struct cpuidle_state *, \ 218 ssize_t (*show)(struct cpuidle_state *, \
219 struct cpuidle_state_usage *, char *); 219 struct cpuidle_state_usage *, char *);
220 ssize_t (*store)(struct cpuidle_state *, const char *, size_t); 220 ssize_t (*store)(struct cpuidle_state *, \
221 struct cpuidle_state_usage *, const char *, size_t);
221}; 222};
222 223
223#define define_one_state_ro(_name, show) \ 224#define define_one_state_ro(_name, show) \
@@ -233,21 +234,22 @@ static ssize_t show_state_##_name(struct cpuidle_state *state, \
233 return sprintf(buf, "%u\n", state->_name);\ 234 return sprintf(buf, "%u\n", state->_name);\
234} 235}
235 236
236#define define_store_state_function(_name) \ 237#define define_store_state_ull_function(_name) \
237static ssize_t store_state_##_name(struct cpuidle_state *state, \ 238static ssize_t store_state_##_name(struct cpuidle_state *state, \
239 struct cpuidle_state_usage *state_usage, \
238 const char *buf, size_t size) \ 240 const char *buf, size_t size) \
239{ \ 241{ \
240 long value; \ 242 unsigned long long value; \
241 int err; \ 243 int err; \
242 if (!capable(CAP_SYS_ADMIN)) \ 244 if (!capable(CAP_SYS_ADMIN)) \
243 return -EPERM; \ 245 return -EPERM; \
244 err = kstrtol(buf, 0, &value); \ 246 err = kstrtoull(buf, 0, &value); \
245 if (err) \ 247 if (err) \
246 return err; \ 248 return err; \
247 if (value) \ 249 if (value) \
248 state->disable = 1; \ 250 state_usage->_name = 1; \
249 else \ 251 else \
250 state->disable = 0; \ 252 state_usage->_name = 0; \
251 return size; \ 253 return size; \
252} 254}
253 255
@@ -273,8 +275,8 @@ define_show_state_ull_function(usage)
273define_show_state_ull_function(time) 275define_show_state_ull_function(time)
274define_show_state_str_function(name) 276define_show_state_str_function(name)
275define_show_state_str_function(desc) 277define_show_state_str_function(desc)
276define_show_state_function(disable) 278define_show_state_ull_function(disable)
277define_store_state_function(disable) 279define_store_state_ull_function(disable)
278 280
279define_one_state_ro(name, show_state_name); 281define_one_state_ro(name, show_state_name);
280define_one_state_ro(desc, show_state_desc); 282define_one_state_ro(desc, show_state_desc);
@@ -318,10 +320,11 @@ static ssize_t cpuidle_state_store(struct kobject *kobj,
318{ 320{
319 int ret = -EIO; 321 int ret = -EIO;
320 struct cpuidle_state *state = kobj_to_state(kobj); 322 struct cpuidle_state *state = kobj_to_state(kobj);
323 struct cpuidle_state_usage *state_usage = kobj_to_state_usage(kobj);
321 struct cpuidle_state_attr *cattr = attr_to_stateattr(attr); 324 struct cpuidle_state_attr *cattr = attr_to_stateattr(attr);
322 325
323 if (cattr->store) 326 if (cattr->store)
324 ret = cattr->store(state, buf, size); 327 ret = cattr->store(state, state_usage, buf, size);
325 328
326 return ret; 329 return ret;
327} 330}
diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
index 7cac12793a4b..1c307e1b840c 100644
--- a/drivers/crypto/ux500/cryp/cryp_core.c
+++ b/drivers/crypto/ux500/cryp/cryp_core.c
@@ -1661,27 +1661,26 @@ static void ux500_cryp_shutdown(struct platform_device *pdev)
1661 1661
1662} 1662}
1663 1663
1664static int ux500_cryp_suspend(struct platform_device *pdev, pm_message_t state) 1664static int ux500_cryp_suspend(struct device *dev)
1665{ 1665{
1666 int ret; 1666 int ret;
1667 struct platform_device *pdev = to_platform_device(dev);
1667 struct cryp_device_data *device_data; 1668 struct cryp_device_data *device_data;
1668 struct resource *res_irq; 1669 struct resource *res_irq;
1669 struct cryp_ctx *temp_ctx = NULL; 1670 struct cryp_ctx *temp_ctx = NULL;
1670 1671
1671 dev_dbg(&pdev->dev, "[%s]", __func__); 1672 dev_dbg(dev, "[%s]", __func__);
1672 1673
1673 /* Handle state? */ 1674 /* Handle state? */
1674 device_data = platform_get_drvdata(pdev); 1675 device_data = platform_get_drvdata(pdev);
1675 if (!device_data) { 1676 if (!device_data) {
1676 dev_err(&pdev->dev, "[%s]: platform_get_drvdata() failed!", 1677 dev_err(dev, "[%s]: platform_get_drvdata() failed!", __func__);
1677 __func__);
1678 return -ENOMEM; 1678 return -ENOMEM;
1679 } 1679 }
1680 1680
1681 res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1681 res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1682 if (!res_irq) 1682 if (!res_irq)
1683 dev_err(&pdev->dev, "[%s]: IORESOURCE_IRQ, unavailable", 1683 dev_err(dev, "[%s]: IORESOURCE_IRQ, unavailable", __func__);
1684 __func__);
1685 else 1684 else
1686 disable_irq(res_irq->start); 1685 disable_irq(res_irq->start);
1687 1686
@@ -1692,32 +1691,32 @@ static int ux500_cryp_suspend(struct platform_device *pdev, pm_message_t state)
1692 1691
1693 if (device_data->current_ctx == ++temp_ctx) { 1692 if (device_data->current_ctx == ++temp_ctx) {
1694 if (down_interruptible(&driver_data.device_allocation)) 1693 if (down_interruptible(&driver_data.device_allocation))
1695 dev_dbg(&pdev->dev, "[%s]: down_interruptible() " 1694 dev_dbg(dev, "[%s]: down_interruptible() failed",
1696 "failed", __func__); 1695 __func__);
1697 ret = cryp_disable_power(&pdev->dev, device_data, false); 1696 ret = cryp_disable_power(dev, device_data, false);
1698 1697
1699 } else 1698 } else
1700 ret = cryp_disable_power(&pdev->dev, device_data, true); 1699 ret = cryp_disable_power(dev, device_data, true);
1701 1700
1702 if (ret) 1701 if (ret)
1703 dev_err(&pdev->dev, "[%s]: cryp_disable_power()", __func__); 1702 dev_err(dev, "[%s]: cryp_disable_power()", __func__);
1704 1703
1705 return ret; 1704 return ret;
1706} 1705}
1707 1706
1708static int ux500_cryp_resume(struct platform_device *pdev) 1707static int ux500_cryp_resume(struct device *dev)
1709{ 1708{
1710 int ret = 0; 1709 int ret = 0;
1710 struct platform_device *pdev = to_platform_device(dev);
1711 struct cryp_device_data *device_data; 1711 struct cryp_device_data *device_data;
1712 struct resource *res_irq; 1712 struct resource *res_irq;
1713 struct cryp_ctx *temp_ctx = NULL; 1713 struct cryp_ctx *temp_ctx = NULL;
1714 1714
1715 dev_dbg(&pdev->dev, "[%s]", __func__); 1715 dev_dbg(dev, "[%s]", __func__);
1716 1716
1717 device_data = platform_get_drvdata(pdev); 1717 device_data = platform_get_drvdata(pdev);
1718 if (!device_data) { 1718 if (!device_data) {
1719 dev_err(&pdev->dev, "[%s]: platform_get_drvdata() failed!", 1719 dev_err(dev, "[%s]: platform_get_drvdata() failed!", __func__);
1720 __func__);
1721 return -ENOMEM; 1720 return -ENOMEM;
1722 } 1721 }
1723 1722
@@ -1730,11 +1729,10 @@ static int ux500_cryp_resume(struct platform_device *pdev)
1730 if (!device_data->current_ctx) 1729 if (!device_data->current_ctx)
1731 up(&driver_data.device_allocation); 1730 up(&driver_data.device_allocation);
1732 else 1731 else
1733 ret = cryp_enable_power(&pdev->dev, device_data, true); 1732 ret = cryp_enable_power(dev, device_data, true);
1734 1733
1735 if (ret) 1734 if (ret)
1736 dev_err(&pdev->dev, "[%s]: cryp_enable_power() failed!", 1735 dev_err(dev, "[%s]: cryp_enable_power() failed!", __func__);
1737 __func__);
1738 else { 1736 else {
1739 res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1737 res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1740 if (res_irq) 1738 if (res_irq)
@@ -1744,15 +1742,16 @@ static int ux500_cryp_resume(struct platform_device *pdev)
1744 return ret; 1742 return ret;
1745} 1743}
1746 1744
1745static SIMPLE_DEV_PM_OPS(ux500_cryp_pm, ux500_cryp_suspend, ux500_cryp_resume);
1746
1747static struct platform_driver cryp_driver = { 1747static struct platform_driver cryp_driver = {
1748 .probe = ux500_cryp_probe, 1748 .probe = ux500_cryp_probe,
1749 .remove = ux500_cryp_remove, 1749 .remove = ux500_cryp_remove,
1750 .shutdown = ux500_cryp_shutdown, 1750 .shutdown = ux500_cryp_shutdown,
1751 .suspend = ux500_cryp_suspend,
1752 .resume = ux500_cryp_resume,
1753 .driver = { 1751 .driver = {
1754 .owner = THIS_MODULE, 1752 .owner = THIS_MODULE,
1755 .name = "cryp1" 1753 .name = "cryp1"
1754 .pm = &ux500_cryp_pm,
1756 } 1755 }
1757}; 1756};
1758 1757
diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
index 6dbb9ec709a3..08d5032cb564 100644
--- a/drivers/crypto/ux500/hash/hash_core.c
+++ b/drivers/crypto/ux500/hash/hash_core.c
@@ -1894,19 +1894,17 @@ static void ux500_hash_shutdown(struct platform_device *pdev)
1894 1894
1895/** 1895/**
1896 * ux500_hash_suspend - Function that suspends the hash device. 1896 * ux500_hash_suspend - Function that suspends the hash device.
1897 * @pdev: The platform device. 1897 * @dev: Device to suspend.
1898 * @state: -
1899 */ 1898 */
1900static int ux500_hash_suspend(struct platform_device *pdev, pm_message_t state) 1899static int ux500_hash_suspend(struct device *dev)
1901{ 1900{
1902 int ret; 1901 int ret;
1903 struct hash_device_data *device_data; 1902 struct hash_device_data *device_data;
1904 struct hash_ctx *temp_ctx = NULL; 1903 struct hash_ctx *temp_ctx = NULL;
1905 1904
1906 device_data = platform_get_drvdata(pdev); 1905 device_data = dev_get_drvdata(dev);
1907 if (!device_data) { 1906 if (!device_data) {
1908 dev_err(&pdev->dev, "[%s] platform_get_drvdata() failed!", 1907 dev_err(dev, "[%s] platform_get_drvdata() failed!", __func__);
1909 __func__);
1910 return -ENOMEM; 1908 return -ENOMEM;
1911 } 1909 }
1912 1910
@@ -1917,33 +1915,32 @@ static int ux500_hash_suspend(struct platform_device *pdev, pm_message_t state)
1917 1915
1918 if (device_data->current_ctx == ++temp_ctx) { 1916 if (device_data->current_ctx == ++temp_ctx) {
1919 if (down_interruptible(&driver_data.device_allocation)) 1917 if (down_interruptible(&driver_data.device_allocation))
1920 dev_dbg(&pdev->dev, "[%s]: down_interruptible() " 1918 dev_dbg(dev, "[%s]: down_interruptible() failed",
1921 "failed", __func__); 1919 __func__);
1922 ret = hash_disable_power(device_data, false); 1920 ret = hash_disable_power(device_data, false);
1923 1921
1924 } else 1922 } else
1925 ret = hash_disable_power(device_data, true); 1923 ret = hash_disable_power(device_data, true);
1926 1924
1927 if (ret) 1925 if (ret)
1928 dev_err(&pdev->dev, "[%s]: hash_disable_power()", __func__); 1926 dev_err(dev, "[%s]: hash_disable_power()", __func__);
1929 1927
1930 return ret; 1928 return ret;
1931} 1929}
1932 1930
1933/** 1931/**
1934 * ux500_hash_resume - Function that resume the hash device. 1932 * ux500_hash_resume - Function that resume the hash device.
1935 * @pdev: The platform device. 1933 * @dev: Device to resume.
1936 */ 1934 */
1937static int ux500_hash_resume(struct platform_device *pdev) 1935static int ux500_hash_resume(struct device *dev)
1938{ 1936{
1939 int ret = 0; 1937 int ret = 0;
1940 struct hash_device_data *device_data; 1938 struct hash_device_data *device_data;
1941 struct hash_ctx *temp_ctx = NULL; 1939 struct hash_ctx *temp_ctx = NULL;
1942 1940
1943 device_data = platform_get_drvdata(pdev); 1941 device_data = dev_get_drvdata(dev);
1944 if (!device_data) { 1942 if (!device_data) {
1945 dev_err(&pdev->dev, "[%s] platform_get_drvdata() failed!", 1943 dev_err(dev, "[%s] platform_get_drvdata() failed!", __func__);
1946 __func__);
1947 return -ENOMEM; 1944 return -ENOMEM;
1948 } 1945 }
1949 1946
@@ -1958,21 +1955,21 @@ static int ux500_hash_resume(struct platform_device *pdev)
1958 ret = hash_enable_power(device_data, true); 1955 ret = hash_enable_power(device_data, true);
1959 1956
1960 if (ret) 1957 if (ret)
1961 dev_err(&pdev->dev, "[%s]: hash_enable_power() failed!", 1958 dev_err(dev, "[%s]: hash_enable_power() failed!", __func__);
1962 __func__);
1963 1959
1964 return ret; 1960 return ret;
1965} 1961}
1966 1962
1963static SIMPLE_DEV_PM_OPS(ux500_hash_pm, ux500_hash_suspend, ux500_hash_resume);
1964
1967static struct platform_driver hash_driver = { 1965static struct platform_driver hash_driver = {
1968 .probe = ux500_hash_probe, 1966 .probe = ux500_hash_probe,
1969 .remove = ux500_hash_remove, 1967 .remove = ux500_hash_remove,
1970 .shutdown = ux500_hash_shutdown, 1968 .shutdown = ux500_hash_shutdown,
1971 .suspend = ux500_hash_suspend,
1972 .resume = ux500_hash_resume,
1973 .driver = { 1969 .driver = {
1974 .owner = THIS_MODULE, 1970 .owner = THIS_MODULE,
1975 .name = "hash1", 1971 .name = "hash1",
1972 .pm = &ux500_hash_pm,
1976 } 1973 }
1977}; 1974};
1978 1975
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index c4067d0141f7..542f0c04b695 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -136,7 +136,7 @@ config GPIO_MPC8XXX
136 136
137config GPIO_MSM_V1 137config GPIO_MSM_V1
138 tristate "Qualcomm MSM GPIO v1" 138 tristate "Qualcomm MSM GPIO v1"
139 depends on GPIOLIB && ARCH_MSM 139 depends on GPIOLIB && ARCH_MSM && (ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50)
140 help 140 help
141 Say yes here to support the GPIO interface on ARM v6 based 141 Say yes here to support the GPIO interface on ARM v6 based
142 Qualcomm MSM chips. Most of the pins on the MSM can be 142 Qualcomm MSM chips. Most of the pins on the MSM can be
diff --git a/drivers/gpio/devres.c b/drivers/gpio/devres.c
index 9e9947cb86a3..1077754f8289 100644
--- a/drivers/gpio/devres.c
+++ b/drivers/gpio/devres.c
@@ -98,6 +98,7 @@ int devm_gpio_request_one(struct device *dev, unsigned gpio,
98 98
99 return 0; 99 return 0;
100} 100}
101EXPORT_SYMBOL(devm_gpio_request_one);
101 102
102/** 103/**
103 * devm_gpio_free - free an interrupt 104 * devm_gpio_free - free an interrupt
diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
index c337143b18f8..c89c4c1e668d 100644
--- a/drivers/gpio/gpio-mxc.c
+++ b/drivers/gpio/gpio-mxc.c
@@ -398,10 +398,12 @@ static int __devinit mxc_gpio_probe(struct platform_device *pdev)
398 writel(~0, port->base + GPIO_ISR); 398 writel(~0, port->base + GPIO_ISR);
399 399
400 if (mxc_gpio_hwtype == IMX21_GPIO) { 400 if (mxc_gpio_hwtype == IMX21_GPIO) {
401 /* setup one handler for all GPIO interrupts */ 401 /*
402 if (pdev->id == 0) 402 * Setup one handler for all GPIO interrupts. Actually setting
403 irq_set_chained_handler(port->irq, 403 * the handler is needed only once, but doing it for every port
404 mx2_gpio_irq_handler); 404 * is more robust and easier.
405 */
406 irq_set_chained_handler(port->irq, mx2_gpio_irq_handler);
405 } else { 407 } else {
406 /* setup one handler for each entry */ 408 /* setup one handler for each entry */
407 irq_set_chained_handler(port->irq, mx3_gpio_irq_handler); 409 irq_set_chained_handler(port->irq, mx3_gpio_irq_handler);
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index c4ed1722734c..4fbc208c32cf 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -174,12 +174,22 @@ static inline void _gpio_dbck_enable(struct gpio_bank *bank)
174 if (bank->dbck_enable_mask && !bank->dbck_enabled) { 174 if (bank->dbck_enable_mask && !bank->dbck_enabled) {
175 clk_enable(bank->dbck); 175 clk_enable(bank->dbck);
176 bank->dbck_enabled = true; 176 bank->dbck_enabled = true;
177
178 __raw_writel(bank->dbck_enable_mask,
179 bank->base + bank->regs->debounce_en);
177 } 180 }
178} 181}
179 182
180static inline void _gpio_dbck_disable(struct gpio_bank *bank) 183static inline void _gpio_dbck_disable(struct gpio_bank *bank)
181{ 184{
182 if (bank->dbck_enable_mask && bank->dbck_enabled) { 185 if (bank->dbck_enable_mask && bank->dbck_enabled) {
186 /*
187 * Disable debounce before cutting it's clock. If debounce is
188 * enabled but the clock is not, GPIO module seems to be unable
189 * to detect events and generate interrupts at least on OMAP3.
190 */
191 __raw_writel(0, bank->base + bank->regs->debounce_en);
192
183 clk_disable(bank->dbck); 193 clk_disable(bank->dbck);
184 bank->dbck_enabled = false; 194 bank->dbck_enabled = false;
185 } 195 }
@@ -1081,7 +1091,6 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
1081 bank->is_mpuio = pdata->is_mpuio; 1091 bank->is_mpuio = pdata->is_mpuio;
1082 bank->non_wakeup_gpios = pdata->non_wakeup_gpios; 1092 bank->non_wakeup_gpios = pdata->non_wakeup_gpios;
1083 bank->loses_context = pdata->loses_context; 1093 bank->loses_context = pdata->loses_context;
1084 bank->get_context_loss_count = pdata->get_context_loss_count;
1085 bank->regs = pdata->regs; 1094 bank->regs = pdata->regs;
1086#ifdef CONFIG_OF_GPIO 1095#ifdef CONFIG_OF_GPIO
1087 bank->chip.of_node = of_node_get(node); 1096 bank->chip.of_node = of_node_get(node);
@@ -1135,6 +1144,9 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
1135 omap_gpio_chip_init(bank); 1144 omap_gpio_chip_init(bank);
1136 omap_gpio_show_rev(bank); 1145 omap_gpio_show_rev(bank);
1137 1146
1147 if (bank->loses_context)
1148 bank->get_context_loss_count = pdata->get_context_loss_count;
1149
1138 pm_runtime_put(bank->dev); 1150 pm_runtime_put(bank->dev);
1139 1151
1140 list_add_tail(&bank->node, &omap_gpio_list); 1152 list_add_tail(&bank->node, &omap_gpio_list);
diff --git a/drivers/gpio/gpio-sta2x11.c b/drivers/gpio/gpio-sta2x11.c
index 38416be8ba11..6064fb376e11 100644
--- a/drivers/gpio/gpio-sta2x11.c
+++ b/drivers/gpio/gpio-sta2x11.c
@@ -383,8 +383,9 @@ static int __devinit gsta_probe(struct platform_device *dev)
383 } 383 }
384 spin_lock_init(&chip->lock); 384 spin_lock_init(&chip->lock);
385 gsta_gpio_setup(chip); 385 gsta_gpio_setup(chip);
386 for (i = 0; i < GSTA_NR_GPIO; i++) 386 if (gpio_pdata)
387 gsta_set_config(chip, i, gpio_pdata->pinconfig[i]); 387 for (i = 0; i < GSTA_NR_GPIO; i++)
388 gsta_set_config(chip, i, gpio_pdata->pinconfig[i]);
388 389
389 /* 384 was used in previous code: be compatible for other drivers */ 390 /* 384 was used in previous code: be compatible for other drivers */
390 err = irq_alloc_descs(-1, 384, GSTA_NR_GPIO, NUMA_NO_NODE); 391 err = irq_alloc_descs(-1, 384, GSTA_NR_GPIO, NUMA_NO_NODE);
diff --git a/drivers/gpio/gpio-tps65910.c b/drivers/gpio/gpio-tps65910.c
index c1ad2884f2ed..11f29c82253c 100644
--- a/drivers/gpio/gpio-tps65910.c
+++ b/drivers/gpio/gpio-tps65910.c
@@ -149,6 +149,9 @@ static int __devinit tps65910_gpio_probe(struct platform_device *pdev)
149 tps65910_gpio->gpio_chip.set = tps65910_gpio_set; 149 tps65910_gpio->gpio_chip.set = tps65910_gpio_set;
150 tps65910_gpio->gpio_chip.get = tps65910_gpio_get; 150 tps65910_gpio->gpio_chip.get = tps65910_gpio_get;
151 tps65910_gpio->gpio_chip.dev = &pdev->dev; 151 tps65910_gpio->gpio_chip.dev = &pdev->dev;
152#ifdef CONFIG_OF_GPIO
153 tps65910_gpio->gpio_chip.of_node = tps65910->dev->of_node;
154#endif
152 if (pdata && pdata->gpio_base) 155 if (pdata && pdata->gpio_base)
153 tps65910_gpio->gpio_chip.base = pdata->gpio_base; 156 tps65910_gpio->gpio_chip.base = pdata->gpio_base;
154 else 157 else
diff --git a/drivers/gpio/gpio-wm8994.c b/drivers/gpio/gpio-wm8994.c
index 92ea5350dfe9..aa61ad2fcaaa 100644
--- a/drivers/gpio/gpio-wm8994.c
+++ b/drivers/gpio/gpio-wm8994.c
@@ -89,8 +89,11 @@ static int wm8994_gpio_direction_out(struct gpio_chip *chip,
89 struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip); 89 struct wm8994_gpio *wm8994_gpio = to_wm8994_gpio(chip);
90 struct wm8994 *wm8994 = wm8994_gpio->wm8994; 90 struct wm8994 *wm8994 = wm8994_gpio->wm8994;
91 91
92 if (value)
93 value = WM8994_GPN_LVL;
94
92 return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset, 95 return wm8994_set_bits(wm8994, WM8994_GPIO_1 + offset,
93 WM8994_GPN_DIR, 0); 96 WM8994_GPN_DIR | WM8994_GPN_LVL, value);
94} 97}
95 98
96static void wm8994_gpio_set(struct gpio_chip *chip, unsigned offset, int value) 99static void wm8994_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 5873e481e5d2..a8743c399e83 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1039,6 +1039,24 @@ mode_in_range(const struct drm_display_mode *mode, struct edid *edid,
1039 return true; 1039 return true;
1040} 1040}
1041 1041
1042static bool valid_inferred_mode(const struct drm_connector *connector,
1043 const struct drm_display_mode *mode)
1044{
1045 struct drm_display_mode *m;
1046 bool ok = false;
1047
1048 list_for_each_entry(m, &connector->probed_modes, head) {
1049 if (mode->hdisplay == m->hdisplay &&
1050 mode->vdisplay == m->vdisplay &&
1051 drm_mode_vrefresh(mode) == drm_mode_vrefresh(m))
1052 return false; /* duplicated */
1053 if (mode->hdisplay <= m->hdisplay &&
1054 mode->vdisplay <= m->vdisplay)
1055 ok = true;
1056 }
1057 return ok;
1058}
1059
1042static int 1060static int
1043drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid, 1061drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid,
1044 struct detailed_timing *timing) 1062 struct detailed_timing *timing)
@@ -1048,7 +1066,8 @@ drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid,
1048 struct drm_device *dev = connector->dev; 1066 struct drm_device *dev = connector->dev;
1049 1067
1050 for (i = 0; i < drm_num_dmt_modes; i++) { 1068 for (i = 0; i < drm_num_dmt_modes; i++) {
1051 if (mode_in_range(drm_dmt_modes + i, edid, timing)) { 1069 if (mode_in_range(drm_dmt_modes + i, edid, timing) &&
1070 valid_inferred_mode(connector, drm_dmt_modes + i)) {
1052 newmode = drm_mode_duplicate(dev, &drm_dmt_modes[i]); 1071 newmode = drm_mode_duplicate(dev, &drm_dmt_modes[i]);
1053 if (newmode) { 1072 if (newmode) {
1054 drm_mode_probed_add(connector, newmode); 1073 drm_mode_probed_add(connector, newmode);
@@ -1088,7 +1107,8 @@ drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid,
1088 return modes; 1107 return modes;
1089 1108
1090 fixup_mode_1366x768(newmode); 1109 fixup_mode_1366x768(newmode);
1091 if (!mode_in_range(newmode, edid, timing)) { 1110 if (!mode_in_range(newmode, edid, timing) ||
1111 !valid_inferred_mode(connector, newmode)) {
1092 drm_mode_destroy(dev, newmode); 1112 drm_mode_destroy(dev, newmode);
1093 continue; 1113 continue;
1094 } 1114 }
@@ -1116,7 +1136,8 @@ drm_cvt_modes_for_range(struct drm_connector *connector, struct edid *edid,
1116 return modes; 1136 return modes;
1117 1137
1118 fixup_mode_1366x768(newmode); 1138 fixup_mode_1366x768(newmode);
1119 if (!mode_in_range(newmode, edid, timing)) { 1139 if (!mode_in_range(newmode, edid, timing) ||
1140 !valid_inferred_mode(connector, newmode)) {
1120 drm_mode_destroy(dev, newmode); 1141 drm_mode_destroy(dev, newmode);
1121 continue; 1142 continue;
1122 } 1143 }
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
index 9764045428ce..b7e7b49d8f62 100644
--- a/drivers/gpu/drm/gma500/cdv_device.c
+++ b/drivers/gpu/drm/gma500/cdv_device.c
@@ -78,21 +78,6 @@ static int cdv_backlight_combination_mode(struct drm_device *dev)
78 return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE; 78 return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE;
79} 79}
80 80
81static int cdv_get_brightness(struct backlight_device *bd)
82{
83 struct drm_device *dev = bl_get_data(bd);
84 u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
85
86 if (cdv_backlight_combination_mode(dev)) {
87 u8 lbpc;
88
89 val &= ~1;
90 pci_read_config_byte(dev->pdev, 0xF4, &lbpc);
91 val *= lbpc;
92 }
93 return val;
94}
95
96static u32 cdv_get_max_backlight(struct drm_device *dev) 81static u32 cdv_get_max_backlight(struct drm_device *dev)
97{ 82{
98 u32 max = REG_READ(BLC_PWM_CTL); 83 u32 max = REG_READ(BLC_PWM_CTL);
@@ -110,6 +95,22 @@ static u32 cdv_get_max_backlight(struct drm_device *dev)
110 return max; 95 return max;
111} 96}
112 97
98static int cdv_get_brightness(struct backlight_device *bd)
99{
100 struct drm_device *dev = bl_get_data(bd);
101 u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
102
103 if (cdv_backlight_combination_mode(dev)) {
104 u8 lbpc;
105
106 val &= ~1;
107 pci_read_config_byte(dev->pdev, 0xF4, &lbpc);
108 val *= lbpc;
109 }
110 return (val * 100)/cdv_get_max_backlight(dev);
111
112}
113
113static int cdv_set_brightness(struct backlight_device *bd) 114static int cdv_set_brightness(struct backlight_device *bd)
114{ 115{
115 struct drm_device *dev = bl_get_data(bd); 116 struct drm_device *dev = bl_get_data(bd);
@@ -120,6 +121,9 @@ static int cdv_set_brightness(struct backlight_device *bd)
120 if (level < 1) 121 if (level < 1)
121 level = 1; 122 level = 1;
122 123
124 level *= cdv_get_max_backlight(dev);
125 level /= 100;
126
123 if (cdv_backlight_combination_mode(dev)) { 127 if (cdv_backlight_combination_mode(dev)) {
124 u32 max = cdv_get_max_backlight(dev); 128 u32 max = cdv_get_max_backlight(dev);
125 u8 lbpc; 129 u8 lbpc;
@@ -157,7 +161,6 @@ static int cdv_backlight_init(struct drm_device *dev)
157 161
158 cdv_backlight_device->props.brightness = 162 cdv_backlight_device->props.brightness =
159 cdv_get_brightness(cdv_backlight_device); 163 cdv_get_brightness(cdv_backlight_device);
160 cdv_backlight_device->props.max_brightness = cdv_get_max_backlight(dev);
161 backlight_update_status(cdv_backlight_device); 164 backlight_update_status(cdv_backlight_device);
162 dev_priv->backlight_device = cdv_backlight_device; 165 dev_priv->backlight_device = cdv_backlight_device;
163 return 0; 166 return 0;
diff --git a/drivers/gpu/drm/gma500/opregion.c b/drivers/gpu/drm/gma500/opregion.c
index 4f186eca3a30..c430bd424681 100644
--- a/drivers/gpu/drm/gma500/opregion.c
+++ b/drivers/gpu/drm/gma500/opregion.c
@@ -144,6 +144,8 @@ struct opregion_asle {
144 144
145#define ASLE_CBLV_VALID (1<<31) 145#define ASLE_CBLV_VALID (1<<31)
146 146
147static struct psb_intel_opregion *system_opregion;
148
147static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) 149static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
148{ 150{
149 struct drm_psb_private *dev_priv = dev->dev_private; 151 struct drm_psb_private *dev_priv = dev->dev_private;
@@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
205 struct drm_psb_private *dev_priv = dev->dev_private; 207 struct drm_psb_private *dev_priv = dev->dev_private;
206 struct opregion_asle *asle = dev_priv->opregion.asle; 208 struct opregion_asle *asle = dev_priv->opregion.asle;
207 209
208 if (asle) { 210 if (asle && system_opregion ) {
209 /* Don't do this on Medfield or other non PC like devices, they 211 /* Don't do this on Medfield or other non PC like devices, they
210 use the bit for something different altogether */ 212 use the bit for something different altogether */
211 psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE); 213 psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE);
@@ -221,7 +223,6 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
221#define ACPI_EV_LID (1<<1) 223#define ACPI_EV_LID (1<<1)
222#define ACPI_EV_DOCK (1<<2) 224#define ACPI_EV_DOCK (1<<2)
223 225
224static struct psb_intel_opregion *system_opregion;
225 226
226static int psb_intel_opregion_video_event(struct notifier_block *nb, 227static int psb_intel_opregion_video_event(struct notifier_block *nb,
227 unsigned long val, void *data) 228 unsigned long val, void *data)
@@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev)
266 system_opregion = opregion; 267 system_opregion = opregion;
267 register_acpi_notifier(&psb_intel_opregion_notifier); 268 register_acpi_notifier(&psb_intel_opregion_notifier);
268 } 269 }
269
270 if (opregion->asle)
271 psb_intel_opregion_enable_asle(dev);
272} 270}
273 271
274void psb_intel_opregion_fini(struct drm_device *dev) 272void psb_intel_opregion_fini(struct drm_device *dev)
diff --git a/drivers/gpu/drm/gma500/opregion.h b/drivers/gpu/drm/gma500/opregion.h
index 72dc6b921265..4a90f8b0e16c 100644
--- a/drivers/gpu/drm/gma500/opregion.h
+++ b/drivers/gpu/drm/gma500/opregion.h
@@ -27,6 +27,7 @@ extern void psb_intel_opregion_asle_intr(struct drm_device *dev);
27extern void psb_intel_opregion_init(struct drm_device *dev); 27extern void psb_intel_opregion_init(struct drm_device *dev);
28extern void psb_intel_opregion_fini(struct drm_device *dev); 28extern void psb_intel_opregion_fini(struct drm_device *dev);
29extern int psb_intel_opregion_setup(struct drm_device *dev); 29extern int psb_intel_opregion_setup(struct drm_device *dev);
30extern void psb_intel_opregion_enable_asle(struct drm_device *dev);
30 31
31#else 32#else
32 33
@@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev)
46{ 47{
47 return 0; 48 return 0;
48} 49}
50
51extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev)
52{
53}
49#endif 54#endif
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
index eff039bf92d4..5971bc82b765 100644
--- a/drivers/gpu/drm/gma500/psb_device.c
+++ b/drivers/gpu/drm/gma500/psb_device.c
@@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev)
144 psb_backlight_device->props.max_brightness = 100; 144 psb_backlight_device->props.max_brightness = 100;
145 backlight_update_status(psb_backlight_device); 145 backlight_update_status(psb_backlight_device);
146 dev_priv->backlight_device = psb_backlight_device; 146 dev_priv->backlight_device = psb_backlight_device;
147
148 /* This must occur after the backlight is properly initialised */
149 psb_lid_timer_init(dev_priv);
150
147 return 0; 151 return 0;
148} 152}
149 153
@@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev)
354 return 0; 358 return 0;
355} 359}
356 360
357/* Not exactly an erratum more an irritation */
358static void psb_chip_errata(struct drm_device *dev)
359{
360 struct drm_psb_private *dev_priv = dev->dev_private;
361 psb_lid_timer_init(dev_priv);
362}
363
364static void psb_chip_teardown(struct drm_device *dev) 361static void psb_chip_teardown(struct drm_device *dev)
365{ 362{
366 struct drm_psb_private *dev_priv = dev->dev_private; 363 struct drm_psb_private *dev_priv = dev->dev_private;
@@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = {
379 .sgx_offset = PSB_SGX_OFFSET, 376 .sgx_offset = PSB_SGX_OFFSET,
380 .chip_setup = psb_chip_setup, 377 .chip_setup = psb_chip_setup,
381 .chip_teardown = psb_chip_teardown, 378 .chip_teardown = psb_chip_teardown,
382 .errata = psb_chip_errata,
383 379
384 .crtc_helper = &psb_intel_helper_funcs, 380 .crtc_helper = &psb_intel_helper_funcs,
385 .crtc_funcs = &psb_intel_crtc_funcs, 381 .crtc_funcs = &psb_intel_crtc_funcs,
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index caba6e08693c..a8858a907f47 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
374 374
375 if (ret) 375 if (ret)
376 return ret; 376 return ret;
377 psb_intel_opregion_enable_asle(dev);
377#if 0 378#if 0
378 /*enable runtime pm at last*/ 379 /*enable runtime pm at last*/
379 pm_runtime_enable(&dev->pdev->dev); 380 pm_runtime_enable(&dev->pdev->dev);
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index f94792626b94..36822b924eb1 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1401,6 +1401,27 @@ i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base,
1401 } 1401 }
1402} 1402}
1403 1403
1404static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1405{
1406 struct apertures_struct *ap;
1407 struct pci_dev *pdev = dev_priv->dev->pdev;
1408 bool primary;
1409
1410 ap = alloc_apertures(1);
1411 if (!ap)
1412 return;
1413
1414 ap->ranges[0].base = dev_priv->dev->agp->base;
1415 ap->ranges[0].size =
1416 dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
1417 primary =
1418 pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
1419
1420 remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
1421
1422 kfree(ap);
1423}
1424
1404/** 1425/**
1405 * i915_driver_load - setup chip and create an initial config 1426 * i915_driver_load - setup chip and create an initial config
1406 * @dev: DRM device 1427 * @dev: DRM device
@@ -1446,6 +1467,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1446 goto free_priv; 1467 goto free_priv;
1447 } 1468 }
1448 1469
1470 dev_priv->mm.gtt = intel_gtt_get();
1471 if (!dev_priv->mm.gtt) {
1472 DRM_ERROR("Failed to initialize GTT\n");
1473 ret = -ENODEV;
1474 goto put_bridge;
1475 }
1476
1477 i915_kick_out_firmware_fb(dev_priv);
1478
1449 pci_set_master(dev->pdev); 1479 pci_set_master(dev->pdev);
1450 1480
1451 /* overlay on gen2 is broken and can't address above 1G */ 1481 /* overlay on gen2 is broken and can't address above 1G */
@@ -1471,13 +1501,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1471 goto put_bridge; 1501 goto put_bridge;
1472 } 1502 }
1473 1503
1474 dev_priv->mm.gtt = intel_gtt_get();
1475 if (!dev_priv->mm.gtt) {
1476 DRM_ERROR("Failed to initialize GTT\n");
1477 ret = -ENODEV;
1478 goto out_rmmap;
1479 }
1480
1481 aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT; 1504 aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
1482 1505
1483 dev_priv->mm.gtt_mapping = 1506 dev_priv->mm.gtt_mapping =
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
index 59d44937dd9f..84b648a7ddd8 100644
--- a/drivers/gpu/drm/radeon/radeon_gart.c
+++ b/drivers/gpu/drm/radeon/radeon_gart.c
@@ -289,8 +289,9 @@ int radeon_vm_manager_init(struct radeon_device *rdev)
289 rdev->vm_manager.enabled = false; 289 rdev->vm_manager.enabled = false;
290 290
291 /* mark first vm as always in use, it's the system one */ 291 /* mark first vm as always in use, it's the system one */
292 /* allocate enough for 2 full VM pts */
292 r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager, 293 r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
293 rdev->vm_manager.max_pfn * 8, 294 rdev->vm_manager.max_pfn * 8 * 2,
294 RADEON_GEM_DOMAIN_VRAM); 295 RADEON_GEM_DOMAIN_VRAM);
295 if (r) { 296 if (r) {
296 dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n", 297 dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
@@ -633,7 +634,15 @@ int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)
633 mutex_init(&vm->mutex); 634 mutex_init(&vm->mutex);
634 INIT_LIST_HEAD(&vm->list); 635 INIT_LIST_HEAD(&vm->list);
635 INIT_LIST_HEAD(&vm->va); 636 INIT_LIST_HEAD(&vm->va);
636 vm->last_pfn = 0; 637 /* SI requires equal sized PTs for all VMs, so always set
638 * last_pfn to max_pfn. cayman allows variable sized
639 * pts so we can grow then as needed. Once we switch
640 * to two level pts we can unify this again.
641 */
642 if (rdev->family >= CHIP_TAHITI)
643 vm->last_pfn = rdev->vm_manager.max_pfn;
644 else
645 vm->last_pfn = 0;
637 /* map the ib pool buffer at 0 in virtual address space, set 646 /* map the ib pool buffer at 0 in virtual address space, set
638 * read only 647 * read only
639 */ 648 */
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index f28bd4b7ef98..21ec9f5653ce 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -292,6 +292,7 @@ int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
292int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, 292int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
293 struct drm_file *filp) 293 struct drm_file *filp)
294{ 294{
295 struct radeon_device *rdev = dev->dev_private;
295 struct drm_radeon_gem_busy *args = data; 296 struct drm_radeon_gem_busy *args = data;
296 struct drm_gem_object *gobj; 297 struct drm_gem_object *gobj;
297 struct radeon_bo *robj; 298 struct radeon_bo *robj;
@@ -317,13 +318,14 @@ int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
317 break; 318 break;
318 } 319 }
319 drm_gem_object_unreference_unlocked(gobj); 320 drm_gem_object_unreference_unlocked(gobj);
320 r = radeon_gem_handle_lockup(robj->rdev, r); 321 r = radeon_gem_handle_lockup(rdev, r);
321 return r; 322 return r;
322} 323}
323 324
324int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data, 325int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
325 struct drm_file *filp) 326 struct drm_file *filp)
326{ 327{
328 struct radeon_device *rdev = dev->dev_private;
327 struct drm_radeon_gem_wait_idle *args = data; 329 struct drm_radeon_gem_wait_idle *args = data;
328 struct drm_gem_object *gobj; 330 struct drm_gem_object *gobj;
329 struct radeon_bo *robj; 331 struct radeon_bo *robj;
@@ -336,10 +338,10 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
336 robj = gem_to_radeon_bo(gobj); 338 robj = gem_to_radeon_bo(gobj);
337 r = radeon_bo_wait(robj, NULL, false); 339 r = radeon_bo_wait(robj, NULL, false);
338 /* callback hw specific functions if any */ 340 /* callback hw specific functions if any */
339 if (robj->rdev->asic->ioctl_wait_idle) 341 if (rdev->asic->ioctl_wait_idle)
340 robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj); 342 robj->rdev->asic->ioctl_wait_idle(rdev, robj);
341 drm_gem_object_unreference_unlocked(gobj); 343 drm_gem_object_unreference_unlocked(gobj);
342 r = radeon_gem_handle_lockup(robj->rdev, r); 344 r = radeon_gem_handle_lockup(rdev, r);
343 return r; 345 return r;
344} 346}
345 347
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index c7b61f16ecfd..0b0279291a73 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -2365,12 +2365,12 @@ int si_pcie_gart_enable(struct radeon_device *rdev)
2365 WREG32(0x15DC, 0); 2365 WREG32(0x15DC, 0);
2366 2366
2367 /* empty context1-15 */ 2367 /* empty context1-15 */
2368 /* FIXME start with 1G, once using 2 level pt switch to full 2368 /* FIXME start with 4G, once using 2 level pt switch to full
2369 * vm size space 2369 * vm size space
2370 */ 2370 */
2371 /* set vm size, must be a multiple of 4 */ 2371 /* set vm size, must be a multiple of 4 */
2372 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0); 2372 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0);
2373 WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, (1 << 30) / RADEON_GPU_PAGE_SIZE); 2373 WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn);
2374 for (i = 1; i < 16; i++) { 2374 for (i = 1; i < 16; i++) {
2375 if (i < 8) 2375 if (i < 8)
2376 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), 2376 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index bef04c192768..3fda8c87f02c 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -386,6 +386,7 @@ config HID_MULTITOUCH
386 - Unitec Panels 386 - Unitec Panels
387 - XAT optical touch panels 387 - XAT optical touch panels
388 - Xiroku optical touch panels 388 - Xiroku optical touch panels
389 - Zytronic touch panels
389 390
390 If unsure, say N. 391 If unsure, say N.
391 392
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
index fa10f847f7db..585344b6d338 100644
--- a/drivers/hid/hid-apple.c
+++ b/drivers/hid/hid-apple.c
@@ -517,6 +517,12 @@ static const struct hid_device_id apple_devices[] = {
517 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, 517 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
518 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS), 518 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS),
519 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, 519 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
520 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
521 .driver_data = APPLE_HAS_FN },
522 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
523 .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
524 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
525 .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
520 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), 526 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
521 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, 527 .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
522 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), 528 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 6ac0286b5375..4c87276c8ddb 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1503,6 +1503,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
1503 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) }, 1503 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
1504 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) }, 1504 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
1505 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) }, 1505 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
1506 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
1507 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
1508 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
1506 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, 1509 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
1507 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, 1510 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
1508 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, 1511 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
@@ -1995,6 +1998,7 @@ static const struct hid_device_id hid_ignore_list[] = {
1995 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) }, 1998 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) },
1996 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) }, 1999 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
1997 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) }, 2000 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
2001 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
1998 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) }, 2002 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
1999 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) }, 2003 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
2000 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) }, 2004 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
@@ -2089,6 +2093,9 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
2089 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) }, 2093 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
2090 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) }, 2094 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
2091 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) }, 2095 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
2096 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
2097 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
2098 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
2092 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, 2099 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
2093 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, 2100 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
2094 { } 2101 { }
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index d1cdd2d28409..32039235cfee 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -125,6 +125,9 @@
125#define USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI 0x024c 125#define USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI 0x024c
126#define USB_DEVICE_ID_APPLE_WELLSPRING6_ISO 0x024d 126#define USB_DEVICE_ID_APPLE_WELLSPRING6_ISO 0x024d
127#define USB_DEVICE_ID_APPLE_WELLSPRING6_JIS 0x024e 127#define USB_DEVICE_ID_APPLE_WELLSPRING6_JIS 0x024e
128#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
129#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
130#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
128#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239 131#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
129#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a 132#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
130#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b 133#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
@@ -518,6 +521,9 @@
518#define USB_DEVICE_ID_CRYSTALTOUCH 0x0006 521#define USB_DEVICE_ID_CRYSTALTOUCH 0x0006
519#define USB_DEVICE_ID_CRYSTALTOUCH_DUAL 0x0007 522#define USB_DEVICE_ID_CRYSTALTOUCH_DUAL 0x0007
520 523
524#define USB_VENDOR_ID_MADCATZ 0x0738
525#define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540
526
521#define USB_VENDOR_ID_MCC 0x09db 527#define USB_VENDOR_ID_MCC 0x09db
522#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076 528#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
523#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a 529#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
@@ -653,6 +659,9 @@
653#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001 659#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
654#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600 660#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600
655 661
662#define USB_VENDOR_ID_SENNHEISER 0x1395
663#define USB_DEVICE_ID_SENNHEISER_BTD500USB 0x002c
664
656#define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f 665#define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f
657#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002 666#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
658 667
@@ -802,6 +811,9 @@
802#define USB_VENDOR_ID_ZYDACRON 0x13EC 811#define USB_VENDOR_ID_ZYDACRON 0x13EC
803#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006 812#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006
804 813
814#define USB_VENDOR_ID_ZYTRONIC 0x14c8
815#define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
816
805#define USB_VENDOR_ID_PRIMAX 0x0461 817#define USB_VENDOR_ID_PRIMAX 0x0461
806#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 818#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
807 819
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 132b0019365e..5301006f6c15 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -301,6 +301,9 @@ static const struct hid_device_id hid_battery_quirks[] = {
301 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 301 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
302 USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI), 302 USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI),
303 HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, 303 HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
304 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
305 USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
306 HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
304 {} 307 {}
305}; 308};
306 309
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 6e3332a99976..76479246d4ee 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -1048,6 +1048,11 @@ static const struct hid_device_id mt_devices[] = {
1048 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU, 1048 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1049 USB_DEVICE_ID_XIROKU_CSR2) }, 1049 USB_DEVICE_ID_XIROKU_CSR2) },
1050 1050
1051 /* Zytronic panels */
1052 { .driver_data = MT_CLS_SERIAL,
1053 MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
1054 USB_DEVICE_ID_ZYTRONIC_ZXY100) },
1055
1051 /* Generic MT device */ 1056 /* Generic MT device */
1052 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) }, 1057 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1053 { } 1058 { }
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 0597ee604f6e..903eef3d3e10 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -76,6 +76,7 @@ static const struct hid_blacklist {
76 { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET }, 76 { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
77 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET }, 77 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET },
78 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET }, 78 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
79 { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET },
79 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, 80 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
80 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET }, 81 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
81 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET }, 82 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index 34ad5a27a7e9..e3fcf8146834 100644
--- a/drivers/hwmon/acpi_power_meter.c
+++ b/drivers/hwmon/acpi_power_meter.c
@@ -929,20 +929,25 @@ static int acpi_power_meter_remove(struct acpi_device *device, int type)
929 return 0; 929 return 0;
930} 930}
931 931
932static int acpi_power_meter_resume(struct acpi_device *device) 932static int acpi_power_meter_resume(struct device *dev)
933{ 933{
934 struct acpi_power_meter_resource *resource; 934 struct acpi_power_meter_resource *resource;
935 935
936 if (!device || !acpi_driver_data(device)) 936 if (!dev)
937 return -EINVAL;
938
939 resource = acpi_driver_data(to_acpi_device(dev));
940 if (!resource)
937 return -EINVAL; 941 return -EINVAL;
938 942
939 resource = acpi_driver_data(device);
940 free_capabilities(resource); 943 free_capabilities(resource);
941 read_capabilities(resource); 944 read_capabilities(resource);
942 945
943 return 0; 946 return 0;
944} 947}
945 948
949static SIMPLE_DEV_PM_OPS(acpi_power_meter_pm, NULL, acpi_power_meter_resume);
950
946static struct acpi_driver acpi_power_meter_driver = { 951static struct acpi_driver acpi_power_meter_driver = {
947 .name = "power_meter", 952 .name = "power_meter",
948 .class = ACPI_POWER_METER_CLASS, 953 .class = ACPI_POWER_METER_CLASS,
@@ -950,9 +955,9 @@ static struct acpi_driver acpi_power_meter_driver = {
950 .ops = { 955 .ops = {
951 .add = acpi_power_meter_add, 956 .add = acpi_power_meter_add,
952 .remove = acpi_power_meter_remove, 957 .remove = acpi_power_meter_remove,
953 .resume = acpi_power_meter_resume,
954 .notify = acpi_power_meter_notify, 958 .notify = acpi_power_meter_notify,
955 }, 959 },
960 .drv.pm = &acpi_power_meter_pm,
956}; 961};
957 962
958/* Module init/exit routines */ 963/* Module init/exit routines */
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index e7701d99f8e8..f1de3979181f 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -2341,7 +2341,7 @@ static void __devinit it87_init_device(struct platform_device *pdev)
2341 2341
2342 /* Start monitoring */ 2342 /* Start monitoring */
2343 it87_write_value(data, IT87_REG_CONFIG, 2343 it87_write_value(data, IT87_REG_CONFIG,
2344 (it87_read_value(data, IT87_REG_CONFIG) & 0x36) 2344 (it87_read_value(data, IT87_REG_CONFIG) & 0x3e)
2345 | (update_vbat ? 0x41 : 0x01)); 2345 | (update_vbat ? 0x41 : 0x01));
2346} 2346}
2347 2347
diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
index 7356b5ec8f67..f2fe8078633b 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
@@ -33,9 +33,6 @@ static bool force;
33module_param(force, bool, 0444); 33module_param(force, bool, 0444);
34MODULE_PARM_DESC(force, "force loading on processors with erratum 319"); 34MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
35 35
36/* PCI-IDs for Northbridge devices not used anywhere else */
37#define PCI_DEVICE_ID_AMD_15H_M10H_NB_F3 0x1403
38
39/* CPUID function 0x80000001, ebx */ 36/* CPUID function 0x80000001, ebx */
40#define CPUID_PKGTYPE_MASK 0xf0000000 37#define CPUID_PKGTYPE_MASK 0xf0000000
41#define CPUID_PKGTYPE_F 0x00000000 38#define CPUID_PKGTYPE_F 0x00000000
@@ -213,7 +210,7 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = {
213 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_11H_NB_MISC) }, 210 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_11H_NB_MISC) },
214 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) }, 211 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
215 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) }, 212 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
216 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_NB_F3) }, 213 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) },
217 {} 214 {}
218}; 215};
219MODULE_DEVICE_TABLE(pci, k10temp_id_table); 216MODULE_DEVICE_TABLE(pci, k10temp_id_table);
diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c
index 61c9cf15fa52..1201a15784c3 100644
--- a/drivers/hwspinlock/hwspinlock_core.c
+++ b/drivers/hwspinlock/hwspinlock_core.c
@@ -345,7 +345,7 @@ int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
345 spin_lock_init(&hwlock->lock); 345 spin_lock_init(&hwlock->lock);
346 hwlock->bank = bank; 346 hwlock->bank = bank;
347 347
348 ret = hwspin_lock_register_single(hwlock, i); 348 ret = hwspin_lock_register_single(hwlock, base_id + i);
349 if (ret) 349 if (ret)
350 goto reg_failed; 350 goto reg_failed;
351 } 351 }
@@ -354,7 +354,7 @@ int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
354 354
355reg_failed: 355reg_failed:
356 while (--i >= 0) 356 while (--i >= 0)
357 hwspin_lock_unregister_single(i); 357 hwspin_lock_unregister_single(base_id + i);
358 return ret; 358 return ret;
359} 359}
360EXPORT_SYMBOL_GPL(hwspin_lock_register); 360EXPORT_SYMBOL_GPL(hwspin_lock_register);
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index d0f59c3f87ef..fe95d5464a02 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -96,6 +96,7 @@ static const struct idle_cpu *icpu;
96static struct cpuidle_device __percpu *intel_idle_cpuidle_devices; 96static struct cpuidle_device __percpu *intel_idle_cpuidle_devices;
97static int intel_idle(struct cpuidle_device *dev, 97static int intel_idle(struct cpuidle_device *dev,
98 struct cpuidle_driver *drv, int index); 98 struct cpuidle_driver *drv, int index);
99static int intel_idle_cpu_init(int cpu);
99 100
100static struct cpuidle_state *cpuidle_state_table; 101static struct cpuidle_state *cpuidle_state_table;
101 102
@@ -302,22 +303,35 @@ static void __setup_broadcast_timer(void *arg)
302 clockevents_notify(reason, &cpu); 303 clockevents_notify(reason, &cpu);
303} 304}
304 305
305static int setup_broadcast_cpuhp_notify(struct notifier_block *n, 306static int cpu_hotplug_notify(struct notifier_block *n,
306 unsigned long action, void *hcpu) 307 unsigned long action, void *hcpu)
307{ 308{
308 int hotcpu = (unsigned long)hcpu; 309 int hotcpu = (unsigned long)hcpu;
310 struct cpuidle_device *dev;
309 311
310 switch (action & 0xf) { 312 switch (action & 0xf) {
311 case CPU_ONLINE: 313 case CPU_ONLINE:
312 smp_call_function_single(hotcpu, __setup_broadcast_timer, 314
313 (void *)true, 1); 315 if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE)
316 smp_call_function_single(hotcpu, __setup_broadcast_timer,
317 (void *)true, 1);
318
319 /*
320 * Some systems can hotplug a cpu at runtime after
321 * the kernel has booted, we have to initialize the
322 * driver in this case
323 */
324 dev = per_cpu_ptr(intel_idle_cpuidle_devices, hotcpu);
325 if (!dev->registered)
326 intel_idle_cpu_init(hotcpu);
327
314 break; 328 break;
315 } 329 }
316 return NOTIFY_OK; 330 return NOTIFY_OK;
317} 331}
318 332
319static struct notifier_block setup_broadcast_notifier = { 333static struct notifier_block cpu_hotplug_notifier = {
320 .notifier_call = setup_broadcast_cpuhp_notify, 334 .notifier_call = cpu_hotplug_notify,
321}; 335};
322 336
323static void auto_demotion_disable(void *dummy) 337static void auto_demotion_disable(void *dummy)
@@ -405,10 +419,10 @@ static int intel_idle_probe(void)
405 419
406 if (boot_cpu_has(X86_FEATURE_ARAT)) /* Always Reliable APIC Timer */ 420 if (boot_cpu_has(X86_FEATURE_ARAT)) /* Always Reliable APIC Timer */
407 lapic_timer_reliable_states = LAPIC_TIMER_ALWAYS_RELIABLE; 421 lapic_timer_reliable_states = LAPIC_TIMER_ALWAYS_RELIABLE;
408 else { 422 else
409 on_each_cpu(__setup_broadcast_timer, (void *)true, 1); 423 on_each_cpu(__setup_broadcast_timer, (void *)true, 1);
410 register_cpu_notifier(&setup_broadcast_notifier); 424
411 } 425 register_cpu_notifier(&cpu_hotplug_notifier);
412 426
413 pr_debug(PREFIX "v" INTEL_IDLE_VERSION 427 pr_debug(PREFIX "v" INTEL_IDLE_VERSION
414 " model 0x%X\n", boot_cpu_data.x86_model); 428 " model 0x%X\n", boot_cpu_data.x86_model);
@@ -494,7 +508,7 @@ static int intel_idle_cpuidle_driver_init(void)
494 * allocate, initialize, register cpuidle_devices 508 * allocate, initialize, register cpuidle_devices
495 * @cpu: cpu/core to initialize 509 * @cpu: cpu/core to initialize
496 */ 510 */
497int intel_idle_cpu_init(int cpu) 511static int intel_idle_cpu_init(int cpu)
498{ 512{
499 int cstate; 513 int cstate;
500 struct cpuidle_device *dev; 514 struct cpuidle_device *dev;
@@ -539,7 +553,6 @@ int intel_idle_cpu_init(int cpu)
539 553
540 return 0; 554 return 0;
541} 555}
542EXPORT_SYMBOL_GPL(intel_idle_cpu_init);
543 556
544static int __init intel_idle_init(void) 557static int __init intel_idle_init(void)
545{ 558{
@@ -581,10 +594,10 @@ static void __exit intel_idle_exit(void)
581 intel_idle_cpuidle_devices_uninit(); 594 intel_idle_cpuidle_devices_uninit();
582 cpuidle_unregister_driver(&intel_idle_driver); 595 cpuidle_unregister_driver(&intel_idle_driver);
583 596
584 if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) { 597
598 if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE)
585 on_each_cpu(__setup_broadcast_timer, (void *)false, 1); 599 on_each_cpu(__setup_broadcast_timer, (void *)false, 1);
586 unregister_cpu_notifier(&setup_broadcast_notifier); 600 unregister_cpu_notifier(&cpu_hotplug_notifier);
587 }
588 601
589 return; 602 return;
590} 603}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 5c1bc995e560..f10221f40803 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -123,7 +123,7 @@ static void ipoib_ud_skb_put_frags(struct ipoib_dev_priv *priv,
123 123
124 skb_frag_size_set(frag, size); 124 skb_frag_size_set(frag, size);
125 skb->data_len += size; 125 skb->data_len += size;
126 skb->truesize += size; 126 skb->truesize += PAGE_SIZE;
127 } else 127 } else
128 skb_put(skb, length); 128 skb_put(skb, length);
129 129
@@ -156,14 +156,18 @@ static struct sk_buff *ipoib_alloc_rx_skb(struct net_device *dev, int id)
156 struct ipoib_dev_priv *priv = netdev_priv(dev); 156 struct ipoib_dev_priv *priv = netdev_priv(dev);
157 struct sk_buff *skb; 157 struct sk_buff *skb;
158 int buf_size; 158 int buf_size;
159 int tailroom;
159 u64 *mapping; 160 u64 *mapping;
160 161
161 if (ipoib_ud_need_sg(priv->max_ib_mtu)) 162 if (ipoib_ud_need_sg(priv->max_ib_mtu)) {
162 buf_size = IPOIB_UD_HEAD_SIZE; 163 buf_size = IPOIB_UD_HEAD_SIZE;
163 else 164 tailroom = 128; /* reserve some tailroom for IP/TCP headers */
165 } else {
164 buf_size = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu); 166 buf_size = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu);
167 tailroom = 0;
168 }
165 169
166 skb = dev_alloc_skb(buf_size + 4); 170 skb = dev_alloc_skb(buf_size + tailroom + 4);
167 if (unlikely(!skb)) 171 if (unlikely(!skb))
168 return NULL; 172 return NULL;
169 173
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 5f6b7f63cdef..7a0ce8d42887 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -1377,10 +1377,14 @@ static int srpt_abort_cmd(struct srpt_send_ioctx *ioctx)
1377 break; 1377 break;
1378 case SRPT_STATE_NEED_DATA: 1378 case SRPT_STATE_NEED_DATA:
1379 /* DMA_TO_DEVICE (write) - RDMA read error. */ 1379 /* DMA_TO_DEVICE (write) - RDMA read error. */
1380
1381 /* XXX(hch): this is a horrible layering violation.. */
1380 spin_lock_irqsave(&ioctx->cmd.t_state_lock, flags); 1382 spin_lock_irqsave(&ioctx->cmd.t_state_lock, flags);
1381 ioctx->cmd.transport_state |= CMD_T_LUN_STOP; 1383 ioctx->cmd.transport_state |= CMD_T_LUN_STOP;
1384 ioctx->cmd.transport_state &= ~CMD_T_ACTIVE;
1382 spin_unlock_irqrestore(&ioctx->cmd.t_state_lock, flags); 1385 spin_unlock_irqrestore(&ioctx->cmd.t_state_lock, flags);
1383 transport_generic_handle_data(&ioctx->cmd); 1386
1387 complete(&ioctx->cmd.transport_lun_stop_comp);
1384 break; 1388 break;
1385 case SRPT_STATE_CMD_RSP_SENT: 1389 case SRPT_STATE_CMD_RSP_SENT:
1386 /* 1390 /*
@@ -1463,9 +1467,10 @@ static void srpt_handle_send_comp(struct srpt_rdma_ch *ch,
1463/** 1467/**
1464 * srpt_handle_rdma_comp() - Process an IB RDMA completion notification. 1468 * srpt_handle_rdma_comp() - Process an IB RDMA completion notification.
1465 * 1469 *
1466 * Note: transport_generic_handle_data() is asynchronous so unmapping the 1470 * XXX: what is now target_execute_cmd used to be asynchronous, and unmapping
1467 * data that has been transferred via IB RDMA must be postponed until the 1471 * the data that has been transferred via IB RDMA had to be postponed until the
1468 * check_stop_free() callback. 1472 * check_stop_free() callback. None of this is nessecary anymore and needs to
1473 * be cleaned up.
1469 */ 1474 */
1470static void srpt_handle_rdma_comp(struct srpt_rdma_ch *ch, 1475static void srpt_handle_rdma_comp(struct srpt_rdma_ch *ch,
1471 struct srpt_send_ioctx *ioctx, 1476 struct srpt_send_ioctx *ioctx,
@@ -1477,7 +1482,7 @@ static void srpt_handle_rdma_comp(struct srpt_rdma_ch *ch,
1477 if (opcode == SRPT_RDMA_READ_LAST) { 1482 if (opcode == SRPT_RDMA_READ_LAST) {
1478 if (srpt_test_and_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA, 1483 if (srpt_test_and_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA,
1479 SRPT_STATE_DATA_IN)) 1484 SRPT_STATE_DATA_IN))
1480 transport_generic_handle_data(&ioctx->cmd); 1485 target_execute_cmd(&ioctx->cmd);
1481 else 1486 else
1482 printk(KERN_ERR "%s[%d]: wrong state = %d\n", __func__, 1487 printk(KERN_ERR "%s[%d]: wrong state = %d\n", __func__,
1483 __LINE__, srpt_get_cmd_state(ioctx)); 1488 __LINE__, srpt_get_cmd_state(ioctx));
diff --git a/drivers/input/joystick/as5011.c b/drivers/input/joystick/as5011.c
index 57d19d4e0a2d..c96653b58867 100644
--- a/drivers/input/joystick/as5011.c
+++ b/drivers/input/joystick/as5011.c
@@ -282,7 +282,8 @@ static int __devinit as5011_probe(struct i2c_client *client,
282 282
283 error = request_threaded_irq(as5011->button_irq, 283 error = request_threaded_irq(as5011->button_irq,
284 NULL, as5011_button_interrupt, 284 NULL, as5011_button_interrupt,
285 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, 285 IRQF_TRIGGER_RISING |
286 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
286 "as5011_button", as5011); 287 "as5011_button", as5011);
287 if (error < 0) { 288 if (error < 0) {
288 dev_err(&client->dev, 289 dev_err(&client->dev,
@@ -296,7 +297,7 @@ static int __devinit as5011_probe(struct i2c_client *client,
296 297
297 error = request_threaded_irq(as5011->axis_irq, NULL, 298 error = request_threaded_irq(as5011->axis_irq, NULL,
298 as5011_axis_interrupt, 299 as5011_axis_interrupt,
299 plat_data->axis_irqflags, 300 plat_data->axis_irqflags | IRQF_ONESHOT,
300 "as5011_joystick", as5011); 301 "as5011_joystick", as5011);
301 if (error) { 302 if (error) {
302 dev_err(&client->dev, 303 dev_err(&client->dev,
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index ee16fb67b7ae..83811e45d633 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -142,6 +142,7 @@ static const struct xpad_device {
142 { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX }, 142 { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX },
143 { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX }, 143 { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
144 { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX }, 144 { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX },
145 { 0x0d2f, 0x0002, "Andamiro Pump It Up pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
145 { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX }, 146 { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX },
146 { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX }, 147 { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX },
147 { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX }, 148 { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX },
@@ -164,6 +165,7 @@ static const struct xpad_device {
164 { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, 165 { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
165 { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 166 { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
166 { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 167 { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
168 { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
167 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, 169 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
168 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } 170 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
169}; 171};
@@ -238,12 +240,14 @@ static struct usb_device_id xpad_table [] = {
238 XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */ 240 XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */
239 XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */ 241 XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */
240 XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */ 242 XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */
243 { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */
241 XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ 244 XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */
242 XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */ 245 XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */
243 XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */ 246 XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */
244 XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */ 247 XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */
245 XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */ 248 XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */
246 XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ 249 XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
250 XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */
247 { } 251 { }
248}; 252};
249 253
diff --git a/drivers/input/keyboard/mcs_touchkey.c b/drivers/input/keyboard/mcs_touchkey.c
index 64a0ca4c92f3..0d77f6c84950 100644
--- a/drivers/input/keyboard/mcs_touchkey.c
+++ b/drivers/input/keyboard/mcs_touchkey.c
@@ -178,7 +178,8 @@ static int __devinit mcs_touchkey_probe(struct i2c_client *client,
178 } 178 }
179 179
180 error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt, 180 error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt,
181 IRQF_TRIGGER_FALLING, client->dev.driver->name, data); 181 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
182 client->dev.driver->name, data);
182 if (error) { 183 if (error) {
183 dev_err(&client->dev, "Failed to register interrupt\n"); 184 dev_err(&client->dev, "Failed to register interrupt\n");
184 goto err_free_mem; 185 goto err_free_mem;
diff --git a/drivers/input/keyboard/mpr121_touchkey.c b/drivers/input/keyboard/mpr121_touchkey.c
index caa218a51b5a..7613f1cac951 100644
--- a/drivers/input/keyboard/mpr121_touchkey.c
+++ b/drivers/input/keyboard/mpr121_touchkey.c
@@ -248,7 +248,7 @@ static int __devinit mpr_touchkey_probe(struct i2c_client *client,
248 248
249 error = request_threaded_irq(client->irq, NULL, 249 error = request_threaded_irq(client->irq, NULL,
250 mpr_touchkey_interrupt, 250 mpr_touchkey_interrupt,
251 IRQF_TRIGGER_FALLING, 251 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
252 client->dev.driver->name, mpr121); 252 client->dev.driver->name, mpr121);
253 if (error) { 253 if (error) {
254 dev_err(&client->dev, "Failed to register interrupt\n"); 254 dev_err(&client->dev, "Failed to register interrupt\n");
diff --git a/drivers/input/keyboard/qt1070.c b/drivers/input/keyboard/qt1070.c
index 0b7b2f891752..ca68f2992d72 100644
--- a/drivers/input/keyboard/qt1070.c
+++ b/drivers/input/keyboard/qt1070.c
@@ -201,7 +201,8 @@ static int __devinit qt1070_probe(struct i2c_client *client,
201 msleep(QT1070_RESET_TIME); 201 msleep(QT1070_RESET_TIME);
202 202
203 err = request_threaded_irq(client->irq, NULL, qt1070_interrupt, 203 err = request_threaded_irq(client->irq, NULL, qt1070_interrupt,
204 IRQF_TRIGGER_NONE, client->dev.driver->name, data); 204 IRQF_TRIGGER_NONE | IRQF_ONESHOT,
205 client->dev.driver->name, data);
205 if (err) { 206 if (err) {
206 dev_err(&client->dev, "fail to request irq\n"); 207 dev_err(&client->dev, "fail to request irq\n");
207 goto err_free_mem; 208 goto err_free_mem;
diff --git a/drivers/input/keyboard/tca6416-keypad.c b/drivers/input/keyboard/tca6416-keypad.c
index 3afea3f89718..c355cdde8d22 100644
--- a/drivers/input/keyboard/tca6416-keypad.c
+++ b/drivers/input/keyboard/tca6416-keypad.c
@@ -278,7 +278,8 @@ static int __devinit tca6416_keypad_probe(struct i2c_client *client,
278 278
279 error = request_threaded_irq(chip->irqnum, NULL, 279 error = request_threaded_irq(chip->irqnum, NULL,
280 tca6416_keys_isr, 280 tca6416_keys_isr,
281 IRQF_TRIGGER_FALLING, 281 IRQF_TRIGGER_FALLING |
282 IRQF_ONESHOT,
282 "tca6416-keypad", chip); 283 "tca6416-keypad", chip);
283 if (error) { 284 if (error) {
284 dev_dbg(&client->dev, 285 dev_dbg(&client->dev,
diff --git a/drivers/input/keyboard/tca8418_keypad.c b/drivers/input/keyboard/tca8418_keypad.c
index 5f87b28b3192..893869b29ed9 100644
--- a/drivers/input/keyboard/tca8418_keypad.c
+++ b/drivers/input/keyboard/tca8418_keypad.c
@@ -360,7 +360,7 @@ static int __devinit tca8418_keypad_probe(struct i2c_client *client,
360 client->irq = gpio_to_irq(client->irq); 360 client->irq = gpio_to_irq(client->irq);
361 361
362 error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler, 362 error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler,
363 IRQF_TRIGGER_FALLING, 363 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
364 client->name, keypad_data); 364 client->name, keypad_data);
365 if (error) { 365 if (error) {
366 dev_dbg(&client->dev, 366 dev_dbg(&client->dev,
diff --git a/drivers/input/keyboard/tnetv107x-keypad.c b/drivers/input/keyboard/tnetv107x-keypad.c
index a4a445fb7020..4c34f21fbe2d 100644
--- a/drivers/input/keyboard/tnetv107x-keypad.c
+++ b/drivers/input/keyboard/tnetv107x-keypad.c
@@ -227,15 +227,15 @@ static int __devinit keypad_probe(struct platform_device *pdev)
227 goto error_clk; 227 goto error_clk;
228 } 228 }
229 229
230 error = request_threaded_irq(kp->irq_press, NULL, keypad_irq, 0, 230 error = request_threaded_irq(kp->irq_press, NULL, keypad_irq,
231 dev_name(dev), kp); 231 IRQF_ONESHOT, dev_name(dev), kp);
232 if (error < 0) { 232 if (error < 0) {
233 dev_err(kp->dev, "Could not allocate keypad press key irq\n"); 233 dev_err(kp->dev, "Could not allocate keypad press key irq\n");
234 goto error_irq_press; 234 goto error_irq_press;
235 } 235 }
236 236
237 error = request_threaded_irq(kp->irq_release, NULL, keypad_irq, 0, 237 error = request_threaded_irq(kp->irq_release, NULL, keypad_irq,
238 dev_name(dev), kp); 238 IRQF_ONESHOT, dev_name(dev), kp);
239 if (error < 0) { 239 if (error < 0) {
240 dev_err(kp->dev, "Could not allocate keypad release key irq\n"); 240 dev_err(kp->dev, "Could not allocate keypad release key irq\n");
241 goto error_irq_release; 241 goto error_irq_release;
diff --git a/drivers/input/misc/ad714x.c b/drivers/input/misc/ad714x.c
index 0ac75bbad4d6..2e5d5e1de647 100644
--- a/drivers/input/misc/ad714x.c
+++ b/drivers/input/misc/ad714x.c
@@ -972,6 +972,7 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq,
972 struct ad714x_platform_data *plat_data = dev->platform_data; 972 struct ad714x_platform_data *plat_data = dev->platform_data;
973 struct ad714x_chip *ad714x; 973 struct ad714x_chip *ad714x;
974 void *drv_mem; 974 void *drv_mem;
975 unsigned long irqflags;
975 976
976 struct ad714x_button_drv *bt_drv; 977 struct ad714x_button_drv *bt_drv;
977 struct ad714x_slider_drv *sd_drv; 978 struct ad714x_slider_drv *sd_drv;
@@ -1162,10 +1163,11 @@ struct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq,
1162 alloc_idx++; 1163 alloc_idx++;
1163 } 1164 }
1164 1165
1166 irqflags = plat_data->irqflags ?: IRQF_TRIGGER_FALLING;
1167 irqflags |= IRQF_ONESHOT;
1168
1165 error = request_threaded_irq(ad714x->irq, NULL, ad714x_interrupt_thread, 1169 error = request_threaded_irq(ad714x->irq, NULL, ad714x_interrupt_thread,
1166 plat_data->irqflags ? 1170 irqflags, "ad714x_captouch", ad714x);
1167 plat_data->irqflags : IRQF_TRIGGER_FALLING,
1168 "ad714x_captouch", ad714x);
1169 if (error) { 1171 if (error) {
1170 dev_err(dev, "can't allocate irq %d\n", ad714x->irq); 1172 dev_err(dev, "can't allocate irq %d\n", ad714x->irq);
1171 goto err_unreg_dev; 1173 goto err_unreg_dev;
diff --git a/drivers/input/misc/dm355evm_keys.c b/drivers/input/misc/dm355evm_keys.c
index 35083c6836c3..c1313d8535c3 100644
--- a/drivers/input/misc/dm355evm_keys.c
+++ b/drivers/input/misc/dm355evm_keys.c
@@ -213,7 +213,8 @@ static int __devinit dm355evm_keys_probe(struct platform_device *pdev)
213 /* REVISIT: flush the event queue? */ 213 /* REVISIT: flush the event queue? */
214 214
215 status = request_threaded_irq(keys->irq, NULL, dm355evm_keys_irq, 215 status = request_threaded_irq(keys->irq, NULL, dm355evm_keys_irq,
216 IRQF_TRIGGER_FALLING, dev_name(&pdev->dev), keys); 216 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
217 dev_name(&pdev->dev), keys);
217 if (status < 0) 218 if (status < 0)
218 goto fail2; 219 goto fail2;
219 220
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index 2cf681d98c0d..d528c23e194f 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -79,6 +79,10 @@
79#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252 79#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252
80#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253 80#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253
81#define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254 81#define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254
82/* MacbookPro10,1 (unibody, June 2012) */
83#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262
84#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263
85#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264
82 86
83#define BCM5974_DEVICE(prod) { \ 87#define BCM5974_DEVICE(prod) { \
84 .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ 88 .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
@@ -128,6 +132,10 @@ static const struct usb_device_id bcm5974_table[] = {
128 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI), 132 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI),
129 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO), 133 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO),
130 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS), 134 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS),
135 /* MacbookPro10,1 */
136 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI),
137 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_ISO),
138 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS),
131 /* Terminating entry */ 139 /* Terminating entry */
132 {} 140 {}
133}; 141};
@@ -354,6 +362,18 @@ static const struct bcm5974_config bcm5974_config_table[] = {
354 { DIM_X, DIM_X / SN_COORD, -4620, 5140 }, 362 { DIM_X, DIM_X / SN_COORD, -4620, 5140 },
355 { DIM_Y, DIM_Y / SN_COORD, -150, 6600 } 363 { DIM_Y, DIM_Y / SN_COORD, -150, 6600 }
356 }, 364 },
365 {
366 USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI,
367 USB_DEVICE_ID_APPLE_WELLSPRING7_ISO,
368 USB_DEVICE_ID_APPLE_WELLSPRING7_JIS,
369 HAS_INTEGRATED_BUTTON,
370 0x84, sizeof(struct bt_data),
371 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
372 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
373 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
374 { DIM_X, DIM_X / SN_COORD, -4750, 5280 },
375 { DIM_Y, DIM_Y / SN_COORD, -150, 6730 }
376 },
357 {} 377 {}
358}; 378};
359 379
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
index cad5602d3ce4..8b31473a81fe 100644
--- a/drivers/input/tablet/wacom_sys.c
+++ b/drivers/input/tablet/wacom_sys.c
@@ -216,7 +216,7 @@ static void wacom_retrieve_report_data(struct usb_interface *intf,
216 216
217 rep_data[0] = 12; 217 rep_data[0] = 12;
218 result = wacom_get_report(intf, WAC_HID_FEATURE_REPORT, 218 result = wacom_get_report(intf, WAC_HID_FEATURE_REPORT,
219 rep_data[0], &rep_data, 2, 219 rep_data[0], rep_data, 2,
220 WAC_MSG_RETRIES); 220 WAC_MSG_RETRIES);
221 221
222 if (result >= 0 && rep_data[1] > 2) 222 if (result >= 0 && rep_data[1] > 2)
@@ -401,7 +401,9 @@ static int wacom_parse_hid(struct usb_interface *intf,
401 break; 401 break;
402 402
403 case HID_USAGE_CONTACTMAX: 403 case HID_USAGE_CONTACTMAX:
404 wacom_retrieve_report_data(intf, features); 404 /* leave touch_max as is if predefined */
405 if (!features->touch_max)
406 wacom_retrieve_report_data(intf, features);
405 i++; 407 i++;
406 break; 408 break;
407 } 409 }
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index e2482b40da51..bd4eb4277697 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -597,7 +597,7 @@ struct ad7879 *ad7879_probe(struct device *dev, u8 devid, unsigned int irq,
597 AD7879_TMR(ts->pen_down_acc_interval); 597 AD7879_TMR(ts->pen_down_acc_interval);
598 598
599 err = request_threaded_irq(ts->irq, NULL, ad7879_irq, 599 err = request_threaded_irq(ts->irq, NULL, ad7879_irq,
600 IRQF_TRIGGER_FALLING, 600 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
601 dev_name(dev), ts); 601 dev_name(dev), ts);
602 if (err) { 602 if (err) {
603 dev_err(dev, "irq %d busy?\n", ts->irq); 603 dev_err(dev, "irq %d busy?\n", ts->irq);
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 42e645062c20..25fd0561a17d 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -1149,7 +1149,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
1149 goto err_free_object; 1149 goto err_free_object;
1150 1150
1151 error = request_threaded_irq(client->irq, NULL, mxt_interrupt, 1151 error = request_threaded_irq(client->irq, NULL, mxt_interrupt,
1152 pdata->irqflags, client->dev.driver->name, data); 1152 pdata->irqflags | IRQF_ONESHOT,
1153 client->dev.driver->name, data);
1153 if (error) { 1154 if (error) {
1154 dev_err(&client->dev, "Failed to register interrupt\n"); 1155 dev_err(&client->dev, "Failed to register interrupt\n");
1155 goto err_free_object; 1156 goto err_free_object;
diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c
index f2d03c06c2da..5c487d23f11c 100644
--- a/drivers/input/touchscreen/bu21013_ts.c
+++ b/drivers/input/touchscreen/bu21013_ts.c
@@ -509,7 +509,8 @@ static int __devinit bu21013_probe(struct i2c_client *client,
509 input_set_drvdata(in_dev, bu21013_data); 509 input_set_drvdata(in_dev, bu21013_data);
510 510
511 error = request_threaded_irq(pdata->irq, NULL, bu21013_gpio_irq, 511 error = request_threaded_irq(pdata->irq, NULL, bu21013_gpio_irq,
512 IRQF_TRIGGER_FALLING | IRQF_SHARED, 512 IRQF_TRIGGER_FALLING | IRQF_SHARED |
513 IRQF_ONESHOT,
513 DRIVER_TP, bu21013_data); 514 DRIVER_TP, bu21013_data);
514 if (error) { 515 if (error) {
515 dev_err(&client->dev, "request irq %d failed\n", pdata->irq); 516 dev_err(&client->dev, "request irq %d failed\n", pdata->irq);
diff --git a/drivers/input/touchscreen/cy8ctmg110_ts.c b/drivers/input/touchscreen/cy8ctmg110_ts.c
index 237753ad1031..464f1bf4b61d 100644
--- a/drivers/input/touchscreen/cy8ctmg110_ts.c
+++ b/drivers/input/touchscreen/cy8ctmg110_ts.c
@@ -251,7 +251,8 @@ static int __devinit cy8ctmg110_probe(struct i2c_client *client,
251 } 251 }
252 252
253 err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread, 253 err = request_threaded_irq(client->irq, NULL, cy8ctmg110_irq_thread,
254 IRQF_TRIGGER_RISING, "touch_reset_key", ts); 254 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
255 "touch_reset_key", ts);
255 if (err < 0) { 256 if (err < 0) {
256 dev_err(&client->dev, 257 dev_err(&client->dev,
257 "irq %d busy? error %d\n", client->irq, err); 258 "irq %d busy? error %d\n", client->irq, err);
diff --git a/drivers/input/touchscreen/intel-mid-touch.c b/drivers/input/touchscreen/intel-mid-touch.c
index 3cd7a837f82b..cf299377fc49 100644
--- a/drivers/input/touchscreen/intel-mid-touch.c
+++ b/drivers/input/touchscreen/intel-mid-touch.c
@@ -620,7 +620,7 @@ static int __devinit mrstouch_probe(struct platform_device *pdev)
620 MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0); 620 MRST_PRESSURE_MIN, MRST_PRESSURE_MAX, 0, 0);
621 621
622 err = request_threaded_irq(tsdev->irq, NULL, mrstouch_pendet_irq, 622 err = request_threaded_irq(tsdev->irq, NULL, mrstouch_pendet_irq,
623 0, "mrstouch", tsdev); 623 IRQF_ONESHOT, "mrstouch", tsdev);
624 if (err) { 624 if (err) {
625 dev_err(tsdev->dev, "unable to allocate irq\n"); 625 dev_err(tsdev->dev, "unable to allocate irq\n");
626 goto err_free_mem; 626 goto err_free_mem;
diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
index 72f6ba3a4709..953b4c105cad 100644
--- a/drivers/input/touchscreen/pixcir_i2c_ts.c
+++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
@@ -165,7 +165,7 @@ static int __devinit pixcir_i2c_ts_probe(struct i2c_client *client,
165 input_set_drvdata(input, tsdata); 165 input_set_drvdata(input, tsdata);
166 166
167 error = request_threaded_irq(client->irq, NULL, pixcir_ts_isr, 167 error = request_threaded_irq(client->irq, NULL, pixcir_ts_isr,
168 IRQF_TRIGGER_FALLING, 168 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
169 client->name, tsdata); 169 client->name, tsdata);
170 if (error) { 170 if (error) {
171 dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); 171 dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
diff --git a/drivers/input/touchscreen/tnetv107x-ts.c b/drivers/input/touchscreen/tnetv107x-ts.c
index 7e7488097359..368d2c6cf780 100644
--- a/drivers/input/touchscreen/tnetv107x-ts.c
+++ b/drivers/input/touchscreen/tnetv107x-ts.c
@@ -297,7 +297,7 @@ static int __devinit tsc_probe(struct platform_device *pdev)
297 goto error_clk; 297 goto error_clk;
298 } 298 }
299 299
300 error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, 0, 300 error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, IRQF_ONESHOT,
301 dev_name(dev), ts); 301 dev_name(dev), ts);
302 if (error < 0) { 302 if (error < 0) {
303 dev_err(ts->dev, "Could not allocate ts irq\n"); 303 dev_err(ts->dev, "Could not allocate ts irq\n");
diff --git a/drivers/input/touchscreen/tsc2005.c b/drivers/input/touchscreen/tsc2005.c
index b6adeaee9cc5..5ce3fa8ce646 100644
--- a/drivers/input/touchscreen/tsc2005.c
+++ b/drivers/input/touchscreen/tsc2005.c
@@ -650,7 +650,8 @@ static int __devinit tsc2005_probe(struct spi_device *spi)
650 tsc2005_stop_scan(ts); 650 tsc2005_stop_scan(ts);
651 651
652 error = request_threaded_irq(spi->irq, NULL, tsc2005_irq_thread, 652 error = request_threaded_irq(spi->irq, NULL, tsc2005_irq_thread,
653 IRQF_TRIGGER_RISING, "tsc2005", ts); 653 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
654 "tsc2005", ts);
654 if (error) { 655 if (error) {
655 dev_err(&spi->dev, "Failed to request irq, err: %d\n", error); 656 dev_err(&spi->dev, "Failed to request irq, err: %d\n", error);
656 goto err_free_mem; 657 goto err_free_mem;
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index a2e418cba0ff..625626391f2d 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -83,6 +83,8 @@ static struct iommu_ops amd_iommu_ops;
83static ATOMIC_NOTIFIER_HEAD(ppr_notifier); 83static ATOMIC_NOTIFIER_HEAD(ppr_notifier);
84int amd_iommu_max_glx_val = -1; 84int amd_iommu_max_glx_val = -1;
85 85
86static struct dma_map_ops amd_iommu_dma_ops;
87
86/* 88/*
87 * general struct to manage commands send to an IOMMU 89 * general struct to manage commands send to an IOMMU
88 */ 90 */
@@ -402,7 +404,7 @@ static void amd_iommu_stats_init(void)
402 return; 404 return;
403 405
404 de_fflush = debugfs_create_bool("fullflush", 0444, stats_dir, 406 de_fflush = debugfs_create_bool("fullflush", 0444, stats_dir,
405 (u32 *)&amd_iommu_unmap_flush); 407 &amd_iommu_unmap_flush);
406 408
407 amd_iommu_stats_add(&compl_wait); 409 amd_iommu_stats_add(&compl_wait);
408 amd_iommu_stats_add(&cnt_map_single); 410 amd_iommu_stats_add(&cnt_map_single);
@@ -2267,6 +2269,13 @@ static int device_change_notifier(struct notifier_block *nb,
2267 list_add_tail(&dma_domain->list, &iommu_pd_list); 2269 list_add_tail(&dma_domain->list, &iommu_pd_list);
2268 spin_unlock_irqrestore(&iommu_pd_list_lock, flags); 2270 spin_unlock_irqrestore(&iommu_pd_list_lock, flags);
2269 2271
2272 dev_data = get_dev_data(dev);
2273
2274 if (!dev_data->passthrough)
2275 dev->archdata.dma_ops = &amd_iommu_dma_ops;
2276 else
2277 dev->archdata.dma_ops = &nommu_dma_ops;
2278
2270 break; 2279 break;
2271 case BUS_NOTIFY_DEL_DEVICE: 2280 case BUS_NOTIFY_DEL_DEVICE:
2272 2281
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 542024ba6dba..a33612f3206f 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -129,7 +129,7 @@ u16 amd_iommu_last_bdf; /* largest PCI device id we have
129 to handle */ 129 to handle */
130LIST_HEAD(amd_iommu_unity_map); /* a list of required unity mappings 130LIST_HEAD(amd_iommu_unity_map); /* a list of required unity mappings
131 we find in ACPI */ 131 we find in ACPI */
132bool amd_iommu_unmap_flush; /* if true, flush on every unmap */ 132u32 amd_iommu_unmap_flush; /* if true, flush on every unmap */
133 133
134LIST_HEAD(amd_iommu_list); /* list of all AMD IOMMUs in the 134LIST_HEAD(amd_iommu_list); /* list of all AMD IOMMUs in the
135 system */ 135 system */
@@ -1641,6 +1641,8 @@ static int __init amd_iommu_init(void)
1641 1641
1642 amd_iommu_init_api(); 1642 amd_iommu_init_api();
1643 1643
1644 x86_platform.iommu_shutdown = disable_iommus;
1645
1644 if (iommu_pass_through) 1646 if (iommu_pass_through)
1645 goto out; 1647 goto out;
1646 1648
@@ -1649,8 +1651,6 @@ static int __init amd_iommu_init(void)
1649 else 1651 else
1650 printk(KERN_INFO "AMD-Vi: Lazy IO/TLB flushing enabled\n"); 1652 printk(KERN_INFO "AMD-Vi: Lazy IO/TLB flushing enabled\n");
1651 1653
1652 x86_platform.iommu_shutdown = disable_iommus;
1653
1654out: 1654out:
1655 return ret; 1655 return ret;
1656 1656
diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
index 24355559a2ad..c1b1d489817e 100644
--- a/drivers/iommu/amd_iommu_types.h
+++ b/drivers/iommu/amd_iommu_types.h
@@ -652,7 +652,7 @@ extern unsigned long *amd_iommu_pd_alloc_bitmap;
652 * If true, the addresses will be flushed on unmap time, not when 652 * If true, the addresses will be flushed on unmap time, not when
653 * they are reused 653 * they are reused
654 */ 654 */
655extern bool amd_iommu_unmap_flush; 655extern u32 amd_iommu_unmap_flush;
656 656
657/* Smallest number of PASIDs supported by any IOMMU in the system */ 657/* Smallest number of PASIDs supported by any IOMMU in the system */
658extern u32 amd_iommu_max_pasids; 658extern u32 amd_iommu_max_pasids;
diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
index 3a74e4410fc0..86e2f4a62b9a 100644
--- a/drivers/iommu/dmar.c
+++ b/drivers/iommu/dmar.c
@@ -26,6 +26,8 @@
26 * These routines are used by both DMA-remapping and Interrupt-remapping 26 * These routines are used by both DMA-remapping and Interrupt-remapping
27 */ 27 */
28 28
29#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt /* has to precede printk.h */
30
29#include <linux/pci.h> 31#include <linux/pci.h>
30#include <linux/dmar.h> 32#include <linux/dmar.h>
31#include <linux/iova.h> 33#include <linux/iova.h>
@@ -39,8 +41,6 @@
39#include <asm/irq_remapping.h> 41#include <asm/irq_remapping.h>
40#include <asm/iommu_table.h> 42#include <asm/iommu_table.h>
41 43
42#define PREFIX "DMAR: "
43
44/* No locks are needed as DMA remapping hardware unit 44/* No locks are needed as DMA remapping hardware unit
45 * list is constructed at boot time and hotplug of 45 * list is constructed at boot time and hotplug of
46 * these units are not supported by the architecture. 46 * these units are not supported by the architecture.
@@ -83,16 +83,12 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
83 * ignore it 83 * ignore it
84 */ 84 */
85 if (!bus) { 85 if (!bus) {
86 printk(KERN_WARNING 86 pr_warn("Device scope bus [%d] not found\n", scope->bus);
87 PREFIX "Device scope bus [%d] not found\n",
88 scope->bus);
89 break; 87 break;
90 } 88 }
91 pdev = pci_get_slot(bus, PCI_DEVFN(path->dev, path->fn)); 89 pdev = pci_get_slot(bus, PCI_DEVFN(path->dev, path->fn));
92 if (!pdev) { 90 if (!pdev) {
93 printk(KERN_WARNING PREFIX 91 /* warning will be printed below */
94 "Device scope device [%04x:%02x:%02x.%02x] not found\n",
95 segment, bus->number, path->dev, path->fn);
96 break; 92 break;
97 } 93 }
98 path ++; 94 path ++;
@@ -100,9 +96,8 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
100 bus = pdev->subordinate; 96 bus = pdev->subordinate;
101 } 97 }
102 if (!pdev) { 98 if (!pdev) {
103 printk(KERN_WARNING PREFIX 99 pr_warn("Device scope device [%04x:%02x:%02x.%02x] not found\n",
104 "Device scope device [%04x:%02x:%02x.%02x] not found\n", 100 segment, scope->bus, path->dev, path->fn);
105 segment, scope->bus, path->dev, path->fn);
106 *dev = NULL; 101 *dev = NULL;
107 return 0; 102 return 0;
108 } 103 }
@@ -110,9 +105,8 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
110 pdev->subordinate) || (scope->entry_type == \ 105 pdev->subordinate) || (scope->entry_type == \
111 ACPI_DMAR_SCOPE_TYPE_BRIDGE && !pdev->subordinate)) { 106 ACPI_DMAR_SCOPE_TYPE_BRIDGE && !pdev->subordinate)) {
112 pci_dev_put(pdev); 107 pci_dev_put(pdev);
113 printk(KERN_WARNING PREFIX 108 pr_warn("Device scope type does not match for %s\n",
114 "Device scope type does not match for %s\n", 109 pci_name(pdev));
115 pci_name(pdev));
116 return -EINVAL; 110 return -EINVAL;
117 } 111 }
118 *dev = pdev; 112 *dev = pdev;
@@ -134,8 +128,7 @@ int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
134 scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE) 128 scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)
135 (*cnt)++; 129 (*cnt)++;
136 else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC) { 130 else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC) {
137 printk(KERN_WARNING PREFIX 131 pr_warn("Unsupported device scope\n");
138 "Unsupported device scope\n");
139 } 132 }
140 start += scope->length; 133 start += scope->length;
141 } 134 }
@@ -261,25 +254,23 @@ dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
261 case ACPI_DMAR_TYPE_HARDWARE_UNIT: 254 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
262 drhd = container_of(header, struct acpi_dmar_hardware_unit, 255 drhd = container_of(header, struct acpi_dmar_hardware_unit,
263 header); 256 header);
264 printk (KERN_INFO PREFIX 257 pr_info("DRHD base: %#016Lx flags: %#x\n",
265 "DRHD base: %#016Lx flags: %#x\n",
266 (unsigned long long)drhd->address, drhd->flags); 258 (unsigned long long)drhd->address, drhd->flags);
267 break; 259 break;
268 case ACPI_DMAR_TYPE_RESERVED_MEMORY: 260 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
269 rmrr = container_of(header, struct acpi_dmar_reserved_memory, 261 rmrr = container_of(header, struct acpi_dmar_reserved_memory,
270 header); 262 header);
271 printk (KERN_INFO PREFIX 263 pr_info("RMRR base: %#016Lx end: %#016Lx\n",
272 "RMRR base: %#016Lx end: %#016Lx\n",
273 (unsigned long long)rmrr->base_address, 264 (unsigned long long)rmrr->base_address,
274 (unsigned long long)rmrr->end_address); 265 (unsigned long long)rmrr->end_address);
275 break; 266 break;
276 case ACPI_DMAR_TYPE_ATSR: 267 case ACPI_DMAR_TYPE_ATSR:
277 atsr = container_of(header, struct acpi_dmar_atsr, header); 268 atsr = container_of(header, struct acpi_dmar_atsr, header);
278 printk(KERN_INFO PREFIX "ATSR flags: %#x\n", atsr->flags); 269 pr_info("ATSR flags: %#x\n", atsr->flags);
279 break; 270 break;
280 case ACPI_DMAR_HARDWARE_AFFINITY: 271 case ACPI_DMAR_HARDWARE_AFFINITY:
281 rhsa = container_of(header, struct acpi_dmar_rhsa, header); 272 rhsa = container_of(header, struct acpi_dmar_rhsa, header);
282 printk(KERN_INFO PREFIX "RHSA base: %#016Lx proximity domain: %#x\n", 273 pr_info("RHSA base: %#016Lx proximity domain: %#x\n",
283 (unsigned long long)rhsa->base_address, 274 (unsigned long long)rhsa->base_address,
284 rhsa->proximity_domain); 275 rhsa->proximity_domain);
285 break; 276 break;
@@ -299,7 +290,7 @@ static int __init dmar_table_detect(void)
299 &dmar_tbl_size); 290 &dmar_tbl_size);
300 291
301 if (ACPI_SUCCESS(status) && !dmar_tbl) { 292 if (ACPI_SUCCESS(status) && !dmar_tbl) {
302 printk (KERN_WARNING PREFIX "Unable to map DMAR\n"); 293 pr_warn("Unable to map DMAR\n");
303 status = AE_NOT_FOUND; 294 status = AE_NOT_FOUND;
304 } 295 }
305 296
@@ -333,20 +324,18 @@ parse_dmar_table(void)
333 return -ENODEV; 324 return -ENODEV;
334 325
335 if (dmar->width < PAGE_SHIFT - 1) { 326 if (dmar->width < PAGE_SHIFT - 1) {
336 printk(KERN_WARNING PREFIX "Invalid DMAR haw\n"); 327 pr_warn("Invalid DMAR haw\n");
337 return -EINVAL; 328 return -EINVAL;
338 } 329 }
339 330
340 printk (KERN_INFO PREFIX "Host address width %d\n", 331 pr_info("Host address width %d\n", dmar->width + 1);
341 dmar->width + 1);
342 332
343 entry_header = (struct acpi_dmar_header *)(dmar + 1); 333 entry_header = (struct acpi_dmar_header *)(dmar + 1);
344 while (((unsigned long)entry_header) < 334 while (((unsigned long)entry_header) <
345 (((unsigned long)dmar) + dmar_tbl->length)) { 335 (((unsigned long)dmar) + dmar_tbl->length)) {
346 /* Avoid looping forever on bad ACPI tables */ 336 /* Avoid looping forever on bad ACPI tables */
347 if (entry_header->length == 0) { 337 if (entry_header->length == 0) {
348 printk(KERN_WARNING PREFIX 338 pr_warn("Invalid 0-length structure\n");
349 "Invalid 0-length structure\n");
350 ret = -EINVAL; 339 ret = -EINVAL;
351 break; 340 break;
352 } 341 }
@@ -369,8 +358,7 @@ parse_dmar_table(void)
369#endif 358#endif
370 break; 359 break;
371 default: 360 default:
372 printk(KERN_WARNING PREFIX 361 pr_warn("Unknown DMAR structure type %d\n",
373 "Unknown DMAR structure type %d\n",
374 entry_header->type); 362 entry_header->type);
375 ret = 0; /* for forward compatibility */ 363 ret = 0; /* for forward compatibility */
376 break; 364 break;
@@ -469,12 +457,12 @@ int __init dmar_table_init(void)
469 ret = parse_dmar_table(); 457 ret = parse_dmar_table();
470 if (ret) { 458 if (ret) {
471 if (ret != -ENODEV) 459 if (ret != -ENODEV)
472 printk(KERN_INFO PREFIX "parse DMAR table failure.\n"); 460 pr_info("parse DMAR table failure.\n");
473 return ret; 461 return ret;
474 } 462 }
475 463
476 if (list_empty(&dmar_drhd_units)) { 464 if (list_empty(&dmar_drhd_units)) {
477 printk(KERN_INFO PREFIX "No DMAR devices found\n"); 465 pr_info("No DMAR devices found\n");
478 return -ENODEV; 466 return -ENODEV;
479 } 467 }
480 468
@@ -506,8 +494,7 @@ int __init check_zero_address(void)
506 (((unsigned long)dmar) + dmar_tbl->length)) { 494 (((unsigned long)dmar) + dmar_tbl->length)) {
507 /* Avoid looping forever on bad ACPI tables */ 495 /* Avoid looping forever on bad ACPI tables */
508 if (entry_header->length == 0) { 496 if (entry_header->length == 0) {
509 printk(KERN_WARNING PREFIX 497 pr_warn("Invalid 0-length structure\n");
510 "Invalid 0-length structure\n");
511 return 0; 498 return 0;
512 } 499 }
513 500
@@ -558,8 +545,7 @@ int __init detect_intel_iommu(void)
558 545
559 if (ret && irq_remapping_enabled && cpu_has_x2apic && 546 if (ret && irq_remapping_enabled && cpu_has_x2apic &&
560 dmar->flags & 0x1) 547 dmar->flags & 0x1)
561 printk(KERN_INFO 548 pr_info("Queued invalidation will be enabled to support x2apic and Intr-remapping.\n");
562 "Queued invalidation will be enabled to support x2apic and Intr-remapping.\n");
563 549
564 if (ret && !no_iommu && !iommu_detected && !dmar_disabled) { 550 if (ret && !no_iommu && !iommu_detected && !dmar_disabled) {
565 iommu_detected = 1; 551 iommu_detected = 1;
@@ -579,14 +565,89 @@ int __init detect_intel_iommu(void)
579} 565}
580 566
581 567
568static void unmap_iommu(struct intel_iommu *iommu)
569{
570 iounmap(iommu->reg);
571 release_mem_region(iommu->reg_phys, iommu->reg_size);
572}
573
574/**
575 * map_iommu: map the iommu's registers
576 * @iommu: the iommu to map
577 * @phys_addr: the physical address of the base resgister
578 *
579 * Memory map the iommu's registers. Start w/ a single page, and
580 * possibly expand if that turns out to be insufficent.
581 */
582static int map_iommu(struct intel_iommu *iommu, u64 phys_addr)
583{
584 int map_size, err=0;
585
586 iommu->reg_phys = phys_addr;
587 iommu->reg_size = VTD_PAGE_SIZE;
588
589 if (!request_mem_region(iommu->reg_phys, iommu->reg_size, iommu->name)) {
590 pr_err("IOMMU: can't reserve memory\n");
591 err = -EBUSY;
592 goto out;
593 }
594
595 iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
596 if (!iommu->reg) {
597 pr_err("IOMMU: can't map the region\n");
598 err = -ENOMEM;
599 goto release;
600 }
601
602 iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
603 iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
604
605 if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) {
606 err = -EINVAL;
607 warn_invalid_dmar(phys_addr, " returns all ones");
608 goto unmap;
609 }
610
611 /* the registers might be more than one page */
612 map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
613 cap_max_fault_reg_offset(iommu->cap));
614 map_size = VTD_PAGE_ALIGN(map_size);
615 if (map_size > iommu->reg_size) {
616 iounmap(iommu->reg);
617 release_mem_region(iommu->reg_phys, iommu->reg_size);
618 iommu->reg_size = map_size;
619 if (!request_mem_region(iommu->reg_phys, iommu->reg_size,
620 iommu->name)) {
621 pr_err("IOMMU: can't reserve memory\n");
622 err = -EBUSY;
623 goto out;
624 }
625 iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
626 if (!iommu->reg) {
627 pr_err("IOMMU: can't map the region\n");
628 err = -ENOMEM;
629 goto release;
630 }
631 }
632 err = 0;
633 goto out;
634
635unmap:
636 iounmap(iommu->reg);
637release:
638 release_mem_region(iommu->reg_phys, iommu->reg_size);
639out:
640 return err;
641}
642
582int alloc_iommu(struct dmar_drhd_unit *drhd) 643int alloc_iommu(struct dmar_drhd_unit *drhd)
583{ 644{
584 struct intel_iommu *iommu; 645 struct intel_iommu *iommu;
585 int map_size;
586 u32 ver; 646 u32 ver;
587 static int iommu_allocated = 0; 647 static int iommu_allocated = 0;
588 int agaw = 0; 648 int agaw = 0;
589 int msagaw = 0; 649 int msagaw = 0;
650 int err;
590 651
591 if (!drhd->reg_base_addr) { 652 if (!drhd->reg_base_addr) {
592 warn_invalid_dmar(0, ""); 653 warn_invalid_dmar(0, "");
@@ -600,30 +661,22 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
600 iommu->seq_id = iommu_allocated++; 661 iommu->seq_id = iommu_allocated++;
601 sprintf (iommu->name, "dmar%d", iommu->seq_id); 662 sprintf (iommu->name, "dmar%d", iommu->seq_id);
602 663
603 iommu->reg = ioremap(drhd->reg_base_addr, VTD_PAGE_SIZE); 664 err = map_iommu(iommu, drhd->reg_base_addr);
604 if (!iommu->reg) { 665 if (err) {
605 printk(KERN_ERR "IOMMU: can't map the region\n"); 666 pr_err("IOMMU: failed to map %s\n", iommu->name);
606 goto error; 667 goto error;
607 } 668 }
608 iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
609 iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
610
611 if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) {
612 warn_invalid_dmar(drhd->reg_base_addr, " returns all ones");
613 goto err_unmap;
614 }
615 669
670 err = -EINVAL;
616 agaw = iommu_calculate_agaw(iommu); 671 agaw = iommu_calculate_agaw(iommu);
617 if (agaw < 0) { 672 if (agaw < 0) {
618 printk(KERN_ERR 673 pr_err("Cannot get a valid agaw for iommu (seq_id = %d)\n",
619 "Cannot get a valid agaw for iommu (seq_id = %d)\n", 674 iommu->seq_id);
620 iommu->seq_id);
621 goto err_unmap; 675 goto err_unmap;
622 } 676 }
623 msagaw = iommu_calculate_max_sagaw(iommu); 677 msagaw = iommu_calculate_max_sagaw(iommu);
624 if (msagaw < 0) { 678 if (msagaw < 0) {
625 printk(KERN_ERR 679 pr_err("Cannot get a valid max agaw for iommu (seq_id = %d)\n",
626 "Cannot get a valid max agaw for iommu (seq_id = %d)\n",
627 iommu->seq_id); 680 iommu->seq_id);
628 goto err_unmap; 681 goto err_unmap;
629 } 682 }
@@ -632,19 +685,6 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
632 685
633 iommu->node = -1; 686 iommu->node = -1;
634 687
635 /* the registers might be more than one page */
636 map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
637 cap_max_fault_reg_offset(iommu->cap));
638 map_size = VTD_PAGE_ALIGN(map_size);
639 if (map_size > VTD_PAGE_SIZE) {
640 iounmap(iommu->reg);
641 iommu->reg = ioremap(drhd->reg_base_addr, map_size);
642 if (!iommu->reg) {
643 printk(KERN_ERR "IOMMU: can't map the region\n");
644 goto error;
645 }
646 }
647
648 ver = readl(iommu->reg + DMAR_VER_REG); 688 ver = readl(iommu->reg + DMAR_VER_REG);
649 pr_info("IOMMU %d: reg_base_addr %llx ver %d:%d cap %llx ecap %llx\n", 689 pr_info("IOMMU %d: reg_base_addr %llx ver %d:%d cap %llx ecap %llx\n",
650 iommu->seq_id, 690 iommu->seq_id,
@@ -659,10 +699,10 @@ int alloc_iommu(struct dmar_drhd_unit *drhd)
659 return 0; 699 return 0;
660 700
661 err_unmap: 701 err_unmap:
662 iounmap(iommu->reg); 702 unmap_iommu(iommu);
663 error: 703 error:
664 kfree(iommu); 704 kfree(iommu);
665 return -1; 705 return err;
666} 706}
667 707
668void free_iommu(struct intel_iommu *iommu) 708void free_iommu(struct intel_iommu *iommu)
@@ -673,7 +713,8 @@ void free_iommu(struct intel_iommu *iommu)
673 free_dmar_iommu(iommu); 713 free_dmar_iommu(iommu);
674 714
675 if (iommu->reg) 715 if (iommu->reg)
676 iounmap(iommu->reg); 716 unmap_iommu(iommu);
717
677 kfree(iommu); 718 kfree(iommu);
678} 719}
679 720
@@ -710,7 +751,7 @@ static int qi_check_fault(struct intel_iommu *iommu, int index)
710 if (fault & DMA_FSTS_IQE) { 751 if (fault & DMA_FSTS_IQE) {
711 head = readl(iommu->reg + DMAR_IQH_REG); 752 head = readl(iommu->reg + DMAR_IQH_REG);
712 if ((head >> DMAR_IQ_SHIFT) == index) { 753 if ((head >> DMAR_IQ_SHIFT) == index) {
713 printk(KERN_ERR "VT-d detected invalid descriptor: " 754 pr_err("VT-d detected invalid descriptor: "
714 "low=%llx, high=%llx\n", 755 "low=%llx, high=%llx\n",
715 (unsigned long long)qi->desc[index].low, 756 (unsigned long long)qi->desc[index].low,
716 (unsigned long long)qi->desc[index].high); 757 (unsigned long long)qi->desc[index].high);
@@ -1129,15 +1170,14 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
1129 reason = dmar_get_fault_reason(fault_reason, &fault_type); 1170 reason = dmar_get_fault_reason(fault_reason, &fault_type);
1130 1171
1131 if (fault_type == INTR_REMAP) 1172 if (fault_type == INTR_REMAP)
1132 printk(KERN_ERR "INTR-REMAP: Request device [[%02x:%02x.%d] " 1173 pr_err("INTR-REMAP: Request device [[%02x:%02x.%d] "
1133 "fault index %llx\n" 1174 "fault index %llx\n"
1134 "INTR-REMAP:[fault reason %02d] %s\n", 1175 "INTR-REMAP:[fault reason %02d] %s\n",
1135 (source_id >> 8), PCI_SLOT(source_id & 0xFF), 1176 (source_id >> 8), PCI_SLOT(source_id & 0xFF),
1136 PCI_FUNC(source_id & 0xFF), addr >> 48, 1177 PCI_FUNC(source_id & 0xFF), addr >> 48,
1137 fault_reason, reason); 1178 fault_reason, reason);
1138 else 1179 else
1139 printk(KERN_ERR 1180 pr_err("DMAR:[%s] Request device [%02x:%02x.%d] "
1140 "DMAR:[%s] Request device [%02x:%02x.%d] "
1141 "fault addr %llx \n" 1181 "fault addr %llx \n"
1142 "DMAR:[fault reason %02d] %s\n", 1182 "DMAR:[fault reason %02d] %s\n",
1143 (type ? "DMA Read" : "DMA Write"), 1183 (type ? "DMA Read" : "DMA Write"),
@@ -1157,8 +1197,7 @@ irqreturn_t dmar_fault(int irq, void *dev_id)
1157 raw_spin_lock_irqsave(&iommu->register_lock, flag); 1197 raw_spin_lock_irqsave(&iommu->register_lock, flag);
1158 fault_status = readl(iommu->reg + DMAR_FSTS_REG); 1198 fault_status = readl(iommu->reg + DMAR_FSTS_REG);
1159 if (fault_status) 1199 if (fault_status)
1160 printk(KERN_ERR "DRHD: handling fault status reg %x\n", 1200 pr_err("DRHD: handling fault status reg %x\n", fault_status);
1161 fault_status);
1162 1201
1163 /* TBD: ignore advanced fault log currently */ 1202 /* TBD: ignore advanced fault log currently */
1164 if (!(fault_status & DMA_FSTS_PPF)) 1203 if (!(fault_status & DMA_FSTS_PPF))
@@ -1224,7 +1263,7 @@ int dmar_set_interrupt(struct intel_iommu *iommu)
1224 1263
1225 irq = create_irq(); 1264 irq = create_irq();
1226 if (!irq) { 1265 if (!irq) {
1227 printk(KERN_ERR "IOMMU: no free vectors\n"); 1266 pr_err("IOMMU: no free vectors\n");
1228 return -EINVAL; 1267 return -EINVAL;
1229 } 1268 }
1230 1269
@@ -1241,7 +1280,7 @@ int dmar_set_interrupt(struct intel_iommu *iommu)
1241 1280
1242 ret = request_irq(irq, dmar_fault, IRQF_NO_THREAD, iommu->name, iommu); 1281 ret = request_irq(irq, dmar_fault, IRQF_NO_THREAD, iommu->name, iommu);
1243 if (ret) 1282 if (ret)
1244 printk(KERN_ERR "IOMMU: can't request irq\n"); 1283 pr_err("IOMMU: can't request irq\n");
1245 return ret; 1284 return ret;
1246} 1285}
1247 1286
@@ -1258,8 +1297,7 @@ int __init enable_drhd_fault_handling(void)
1258 ret = dmar_set_interrupt(iommu); 1297 ret = dmar_set_interrupt(iommu);
1259 1298
1260 if (ret) { 1299 if (ret) {
1261 printk(KERN_ERR "DRHD %Lx: failed to enable fault, " 1300 pr_err("DRHD %Lx: failed to enable fault, interrupt, ret %d\n",
1262 " interrupt, ret %d\n",
1263 (unsigned long long)drhd->reg_base_addr, ret); 1301 (unsigned long long)drhd->reg_base_addr, ret);
1264 return -1; 1302 return -1;
1265 } 1303 }
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 6d347064b8b0..e0b18f3ae9a8 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -902,7 +902,6 @@ static int intel_setup_ioapic_entry(int irq,
902 return 0; 902 return 0;
903} 903}
904 904
905#ifdef CONFIG_SMP
906/* 905/*
907 * Migrate the IO-APIC irq in the presence of intr-remapping. 906 * Migrate the IO-APIC irq in the presence of intr-remapping.
908 * 907 *
@@ -924,6 +923,10 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,
924 struct irq_cfg *cfg = data->chip_data; 923 struct irq_cfg *cfg = data->chip_data;
925 unsigned int dest, irq = data->irq; 924 unsigned int dest, irq = data->irq;
926 struct irte irte; 925 struct irte irte;
926 int err;
927
928 if (!config_enabled(CONFIG_SMP))
929 return -EINVAL;
927 930
928 if (!cpumask_intersects(mask, cpu_online_mask)) 931 if (!cpumask_intersects(mask, cpu_online_mask))
929 return -EINVAL; 932 return -EINVAL;
@@ -931,10 +934,16 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,
931 if (get_irte(irq, &irte)) 934 if (get_irte(irq, &irte))
932 return -EBUSY; 935 return -EBUSY;
933 936
934 if (assign_irq_vector(irq, cfg, mask)) 937 err = assign_irq_vector(irq, cfg, mask);
935 return -EBUSY; 938 if (err)
939 return err;
936 940
937 dest = apic->cpu_mask_to_apicid_and(cfg->domain, mask); 941 err = apic->cpu_mask_to_apicid_and(cfg->domain, mask, &dest);
942 if (err) {
943 if (assign_irq_vector(irq, cfg, data->affinity))
944 pr_err("Failed to recover vector for irq %d\n", irq);
945 return err;
946 }
938 947
939 irte.vector = cfg->vector; 948 irte.vector = cfg->vector;
940 irte.dest_id = IRTE_DEST(dest); 949 irte.dest_id = IRTE_DEST(dest);
@@ -956,7 +965,6 @@ intel_ioapic_set_affinity(struct irq_data *data, const struct cpumask *mask,
956 cpumask_copy(data->affinity, mask); 965 cpumask_copy(data->affinity, mask);
957 return 0; 966 return 0;
958} 967}
959#endif
960 968
961static void intel_compose_msi_msg(struct pci_dev *pdev, 969static void intel_compose_msi_msg(struct pci_dev *pdev,
962 unsigned int irq, unsigned int dest, 970 unsigned int irq, unsigned int dest,
@@ -1058,9 +1066,7 @@ struct irq_remap_ops intel_irq_remap_ops = {
1058 .reenable = reenable_irq_remapping, 1066 .reenable = reenable_irq_remapping,
1059 .enable_faulting = enable_drhd_fault_handling, 1067 .enable_faulting = enable_drhd_fault_handling,
1060 .setup_ioapic_entry = intel_setup_ioapic_entry, 1068 .setup_ioapic_entry = intel_setup_ioapic_entry,
1061#ifdef CONFIG_SMP
1062 .set_affinity = intel_ioapic_set_affinity, 1069 .set_affinity = intel_ioapic_set_affinity,
1063#endif
1064 .free_irq = free_irte, 1070 .free_irq = free_irte,
1065 .compose_msi_msg = intel_compose_msi_msg, 1071 .compose_msi_msg = intel_compose_msi_msg,
1066 .msi_alloc_irq = intel_msi_alloc_irq, 1072 .msi_alloc_irq = intel_msi_alloc_irq,
diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
index 40cda8e98d87..1d29b1c66e72 100644
--- a/drivers/iommu/irq_remapping.c
+++ b/drivers/iommu/irq_remapping.c
@@ -111,16 +111,15 @@ int setup_ioapic_remapped_entry(int irq,
111 vector, attr); 111 vector, attr);
112} 112}
113 113
114#ifdef CONFIG_SMP
115int set_remapped_irq_affinity(struct irq_data *data, const struct cpumask *mask, 114int set_remapped_irq_affinity(struct irq_data *data, const struct cpumask *mask,
116 bool force) 115 bool force)
117{ 116{
118 if (!remap_ops || !remap_ops->set_affinity) 117 if (!config_enabled(CONFIG_SMP) || !remap_ops ||
118 !remap_ops->set_affinity)
119 return 0; 119 return 0;
120 120
121 return remap_ops->set_affinity(data, mask, force); 121 return remap_ops->set_affinity(data, mask, force);
122} 122}
123#endif
124 123
125void free_remapped_irq(int irq) 124void free_remapped_irq(int irq)
126{ 125{
diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h
index be9d72950c51..b12974cc1dfe 100644
--- a/drivers/iommu/irq_remapping.h
+++ b/drivers/iommu/irq_remapping.h
@@ -59,11 +59,9 @@ struct irq_remap_ops {
59 unsigned int, int, 59 unsigned int, int,
60 struct io_apic_irq_attr *); 60 struct io_apic_irq_attr *);
61 61
62#ifdef CONFIG_SMP
63 /* Set the CPU affinity of a remapped interrupt */ 62 /* Set the CPU affinity of a remapped interrupt */
64 int (*set_affinity)(struct irq_data *data, const struct cpumask *mask, 63 int (*set_affinity)(struct irq_data *data, const struct cpumask *mask,
65 bool force); 64 bool force);
66#endif
67 65
68 /* Free an IRQ */ 66 /* Free an IRQ */
69 int (*free_irq)(int); 67 int (*free_irq)(int);
diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
index ecd679043d77..3f3d09d560ea 100644
--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -550,13 +550,13 @@ static int alloc_pdir(struct smmu_as *as)
550 return 0; 550 return 0;
551 551
552 as->pte_count = devm_kzalloc(smmu->dev, 552 as->pte_count = devm_kzalloc(smmu->dev,
553 sizeof(as->pte_count[0]) * SMMU_PDIR_COUNT, GFP_KERNEL); 553 sizeof(as->pte_count[0]) * SMMU_PDIR_COUNT, GFP_ATOMIC);
554 if (!as->pte_count) { 554 if (!as->pte_count) {
555 dev_err(smmu->dev, 555 dev_err(smmu->dev,
556 "failed to allocate smmu_device PTE cunters\n"); 556 "failed to allocate smmu_device PTE cunters\n");
557 return -ENOMEM; 557 return -ENOMEM;
558 } 558 }
559 as->pdir_page = alloc_page(GFP_KERNEL | __GFP_DMA); 559 as->pdir_page = alloc_page(GFP_ATOMIC | __GFP_DMA);
560 if (!as->pdir_page) { 560 if (!as->pdir_page) {
561 dev_err(smmu->dev, 561 dev_err(smmu->dev,
562 "failed to allocate smmu_device page directory\n"); 562 "failed to allocate smmu_device page directory\n");
diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c
index 1a0ae4445ff2..5f21f629b7ae 100644
--- a/drivers/isdn/mISDN/stack.c
+++ b/drivers/isdn/mISDN/stack.c
@@ -135,8 +135,8 @@ send_layer2(struct mISDNstack *st, struct sk_buff *skb)
135 skb = NULL; 135 skb = NULL;
136 else if (*debug & DEBUG_SEND_ERR) 136 else if (*debug & DEBUG_SEND_ERR)
137 printk(KERN_DEBUG 137 printk(KERN_DEBUG
138 "%s ch%d mgr prim(%x) addr(%x) err %d\n", 138 "%s mgr prim(%x) err %d\n",
139 __func__, ch->nr, hh->prim, ch->addr, ret); 139 __func__, hh->prim, ret);
140 } 140 }
141out: 141out:
142 mutex_unlock(&st->lmutex); 142 mutex_unlock(&st->lmutex);
diff --git a/drivers/leds/ledtrig-heartbeat.c b/drivers/leds/ledtrig-heartbeat.c
index 41dc76db4311..a019fbb70880 100644
--- a/drivers/leds/ledtrig-heartbeat.c
+++ b/drivers/leds/ledtrig-heartbeat.c
@@ -21,6 +21,8 @@
21#include <linux/reboot.h> 21#include <linux/reboot.h>
22#include "leds.h" 22#include "leds.h"
23 23
24static int panic_heartbeats;
25
24struct heartbeat_trig_data { 26struct heartbeat_trig_data {
25 unsigned int phase; 27 unsigned int phase;
26 unsigned int period; 28 unsigned int period;
@@ -34,6 +36,11 @@ static void led_heartbeat_function(unsigned long data)
34 unsigned long brightness = LED_OFF; 36 unsigned long brightness = LED_OFF;
35 unsigned long delay = 0; 37 unsigned long delay = 0;
36 38
39 if (unlikely(panic_heartbeats)) {
40 led_set_brightness(led_cdev, LED_OFF);
41 return;
42 }
43
37 /* acts like an actual heart beat -- ie thump-thump-pause... */ 44 /* acts like an actual heart beat -- ie thump-thump-pause... */
38 switch (heartbeat_data->phase) { 45 switch (heartbeat_data->phase) {
39 case 0: 46 case 0:
@@ -111,12 +118,19 @@ static int heartbeat_reboot_notifier(struct notifier_block *nb,
111 return NOTIFY_DONE; 118 return NOTIFY_DONE;
112} 119}
113 120
121static int heartbeat_panic_notifier(struct notifier_block *nb,
122 unsigned long code, void *unused)
123{
124 panic_heartbeats = 1;
125 return NOTIFY_DONE;
126}
127
114static struct notifier_block heartbeat_reboot_nb = { 128static struct notifier_block heartbeat_reboot_nb = {
115 .notifier_call = heartbeat_reboot_notifier, 129 .notifier_call = heartbeat_reboot_notifier,
116}; 130};
117 131
118static struct notifier_block heartbeat_panic_nb = { 132static struct notifier_block heartbeat_panic_nb = {
119 .notifier_call = heartbeat_reboot_notifier, 133 .notifier_call = heartbeat_panic_notifier,
120}; 134};
121 135
122static int __init heartbeat_trig_init(void) 136static int __init heartbeat_trig_init(void)
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index d039de8322f0..b58b7a33914a 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -1084,6 +1084,7 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1084 ti->split_io = dm_rh_get_region_size(ms->rh); 1084 ti->split_io = dm_rh_get_region_size(ms->rh);
1085 ti->num_flush_requests = 1; 1085 ti->num_flush_requests = 1;
1086 ti->num_discard_requests = 1; 1086 ti->num_discard_requests = 1;
1087 ti->discard_zeroes_data_unsupported = 1;
1087 1088
1088 ms->kmirrord_wq = alloc_workqueue("kmirrord", 1089 ms->kmirrord_wq = alloc_workqueue("kmirrord",
1089 WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0); 1090 WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
@@ -1214,7 +1215,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
1214 * We need to dec pending if this was a write. 1215 * We need to dec pending if this was a write.
1215 */ 1216 */
1216 if (rw == WRITE) { 1217 if (rw == WRITE) {
1217 if (!(bio->bi_rw & REQ_FLUSH)) 1218 if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD)))
1218 dm_rh_dec(ms->rh, map_context->ll); 1219 dm_rh_dec(ms->rh, map_context->ll);
1219 return error; 1220 return error;
1220 } 1221 }
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
index 7771ed212182..69732e03eb34 100644
--- a/drivers/md/dm-region-hash.c
+++ b/drivers/md/dm-region-hash.c
@@ -404,6 +404,9 @@ void dm_rh_mark_nosync(struct dm_region_hash *rh, struct bio *bio)
404 return; 404 return;
405 } 405 }
406 406
407 if (bio->bi_rw & REQ_DISCARD)
408 return;
409
407 /* We must inform the log that the sync count has changed. */ 410 /* We must inform the log that the sync count has changed. */
408 log->type->set_region_sync(log, region, 0); 411 log->type->set_region_sync(log, region, 0);
409 412
@@ -524,7 +527,7 @@ void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios)
524 struct bio *bio; 527 struct bio *bio;
525 528
526 for (bio = bios->head; bio; bio = bio->bi_next) { 529 for (bio = bios->head; bio; bio = bio->bi_next) {
527 if (bio->bi_rw & REQ_FLUSH) 530 if (bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))
528 continue; 531 continue;
529 rh_inc(rh, dm_rh_bio_to_region(rh, bio)); 532 rh_inc(rh, dm_rh_bio_to_region(rh, bio));
530 } 533 }
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 37fdaf81bd1f..68694da0d21d 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1245,7 +1245,10 @@ static void process_discard(struct thin_c *tc, struct bio *bio)
1245 1245
1246 cell_release_singleton(cell, bio); 1246 cell_release_singleton(cell, bio);
1247 cell_release_singleton(cell2, bio); 1247 cell_release_singleton(cell2, bio);
1248 remap_and_issue(tc, bio, lookup_result.block); 1248 if ((!lookup_result.shared) && pool->pf.discard_passdown)
1249 remap_and_issue(tc, bio, lookup_result.block);
1250 else
1251 bio_endio(bio, 0);
1249 } 1252 }
1250 break; 1253 break;
1251 1254
@@ -2292,6 +2295,13 @@ static int process_reserve_metadata_snap_mesg(unsigned argc, char **argv, struct
2292 if (r) 2295 if (r)
2293 return r; 2296 return r;
2294 2297
2298 r = dm_pool_commit_metadata(pool->pmd);
2299 if (r) {
2300 DMERR("%s: dm_pool_commit_metadata() failed, error = %d",
2301 __func__, r);
2302 return r;
2303 }
2304
2295 r = dm_pool_reserve_metadata_snap(pool->pmd); 2305 r = dm_pool_reserve_metadata_snap(pool->pmd);
2296 if (r) 2306 if (r)
2297 DMWARN("reserve_metadata_snap message failed."); 2307 DMWARN("reserve_metadata_snap message failed.");
@@ -2621,6 +2631,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
2621 if (tc->pool->pf.discard_enabled) { 2631 if (tc->pool->pf.discard_enabled) {
2622 ti->discards_supported = 1; 2632 ti->discards_supported = 1;
2623 ti->num_discard_requests = 1; 2633 ti->num_discard_requests = 1;
2634 ti->discard_zeroes_data_unsupported = 1;
2624 } 2635 }
2625 2636
2626 dm_put(pool_md); 2637 dm_put(pool_md);
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 1c2f9048e1ae..d5ab4493c8be 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2931,6 +2931,7 @@ offset_store(struct md_rdev *rdev, const char *buf, size_t len)
2931 * can be sane */ 2931 * can be sane */
2932 return -EBUSY; 2932 return -EBUSY;
2933 rdev->data_offset = offset; 2933 rdev->data_offset = offset;
2934 rdev->new_data_offset = offset;
2934 return len; 2935 return len;
2935} 2936}
2936 2937
@@ -3926,8 +3927,8 @@ array_state_show(struct mddev *mddev, char *page)
3926 return sprintf(page, "%s\n", array_states[st]); 3927 return sprintf(page, "%s\n", array_states[st]);
3927} 3928}
3928 3929
3929static int do_md_stop(struct mddev * mddev, int ro, int is_open); 3930static int do_md_stop(struct mddev * mddev, int ro, struct block_device *bdev);
3930static int md_set_readonly(struct mddev * mddev, int is_open); 3931static int md_set_readonly(struct mddev * mddev, struct block_device *bdev);
3931static int do_md_run(struct mddev * mddev); 3932static int do_md_run(struct mddev * mddev);
3932static int restart_array(struct mddev *mddev); 3933static int restart_array(struct mddev *mddev);
3933 3934
@@ -3943,14 +3944,14 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
3943 /* stopping an active array */ 3944 /* stopping an active array */
3944 if (atomic_read(&mddev->openers) > 0) 3945 if (atomic_read(&mddev->openers) > 0)
3945 return -EBUSY; 3946 return -EBUSY;
3946 err = do_md_stop(mddev, 0, 0); 3947 err = do_md_stop(mddev, 0, NULL);
3947 break; 3948 break;
3948 case inactive: 3949 case inactive:
3949 /* stopping an active array */ 3950 /* stopping an active array */
3950 if (mddev->pers) { 3951 if (mddev->pers) {
3951 if (atomic_read(&mddev->openers) > 0) 3952 if (atomic_read(&mddev->openers) > 0)
3952 return -EBUSY; 3953 return -EBUSY;
3953 err = do_md_stop(mddev, 2, 0); 3954 err = do_md_stop(mddev, 2, NULL);
3954 } else 3955 } else
3955 err = 0; /* already inactive */ 3956 err = 0; /* already inactive */
3956 break; 3957 break;
@@ -3958,7 +3959,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
3958 break; /* not supported yet */ 3959 break; /* not supported yet */
3959 case readonly: 3960 case readonly:
3960 if (mddev->pers) 3961 if (mddev->pers)
3961 err = md_set_readonly(mddev, 0); 3962 err = md_set_readonly(mddev, NULL);
3962 else { 3963 else {
3963 mddev->ro = 1; 3964 mddev->ro = 1;
3964 set_disk_ro(mddev->gendisk, 1); 3965 set_disk_ro(mddev->gendisk, 1);
@@ -3968,7 +3969,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
3968 case read_auto: 3969 case read_auto:
3969 if (mddev->pers) { 3970 if (mddev->pers) {
3970 if (mddev->ro == 0) 3971 if (mddev->ro == 0)
3971 err = md_set_readonly(mddev, 0); 3972 err = md_set_readonly(mddev, NULL);
3972 else if (mddev->ro == 1) 3973 else if (mddev->ro == 1)
3973 err = restart_array(mddev); 3974 err = restart_array(mddev);
3974 if (err == 0) { 3975 if (err == 0) {
@@ -5351,15 +5352,17 @@ void md_stop(struct mddev *mddev)
5351} 5352}
5352EXPORT_SYMBOL_GPL(md_stop); 5353EXPORT_SYMBOL_GPL(md_stop);
5353 5354
5354static int md_set_readonly(struct mddev *mddev, int is_open) 5355static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
5355{ 5356{
5356 int err = 0; 5357 int err = 0;
5357 mutex_lock(&mddev->open_mutex); 5358 mutex_lock(&mddev->open_mutex);
5358 if (atomic_read(&mddev->openers) > is_open) { 5359 if (atomic_read(&mddev->openers) > !!bdev) {
5359 printk("md: %s still in use.\n",mdname(mddev)); 5360 printk("md: %s still in use.\n",mdname(mddev));
5360 err = -EBUSY; 5361 err = -EBUSY;
5361 goto out; 5362 goto out;
5362 } 5363 }
5364 if (bdev)
5365 sync_blockdev(bdev);
5363 if (mddev->pers) { 5366 if (mddev->pers) {
5364 __md_stop_writes(mddev); 5367 __md_stop_writes(mddev);
5365 5368
@@ -5381,18 +5384,26 @@ out:
5381 * 0 - completely stop and dis-assemble array 5384 * 0 - completely stop and dis-assemble array
5382 * 2 - stop but do not disassemble array 5385 * 2 - stop but do not disassemble array
5383 */ 5386 */
5384static int do_md_stop(struct mddev * mddev, int mode, int is_open) 5387static int do_md_stop(struct mddev * mddev, int mode,
5388 struct block_device *bdev)
5385{ 5389{
5386 struct gendisk *disk = mddev->gendisk; 5390 struct gendisk *disk = mddev->gendisk;
5387 struct md_rdev *rdev; 5391 struct md_rdev *rdev;
5388 5392
5389 mutex_lock(&mddev->open_mutex); 5393 mutex_lock(&mddev->open_mutex);
5390 if (atomic_read(&mddev->openers) > is_open || 5394 if (atomic_read(&mddev->openers) > !!bdev ||
5391 mddev->sysfs_active) { 5395 mddev->sysfs_active) {
5392 printk("md: %s still in use.\n",mdname(mddev)); 5396 printk("md: %s still in use.\n",mdname(mddev));
5393 mutex_unlock(&mddev->open_mutex); 5397 mutex_unlock(&mddev->open_mutex);
5394 return -EBUSY; 5398 return -EBUSY;
5395 } 5399 }
5400 if (bdev)
5401 /* It is possible IO was issued on some other
5402 * open file which was closed before we took ->open_mutex.
5403 * As that was not the last close __blkdev_put will not
5404 * have called sync_blockdev, so we must.
5405 */
5406 sync_blockdev(bdev);
5396 5407
5397 if (mddev->pers) { 5408 if (mddev->pers) {
5398 if (mddev->ro) 5409 if (mddev->ro)
@@ -5466,7 +5477,7 @@ static void autorun_array(struct mddev *mddev)
5466 err = do_md_run(mddev); 5477 err = do_md_run(mddev);
5467 if (err) { 5478 if (err) {
5468 printk(KERN_WARNING "md: do_md_run() returned %d\n", err); 5479 printk(KERN_WARNING "md: do_md_run() returned %d\n", err);
5469 do_md_stop(mddev, 0, 0); 5480 do_md_stop(mddev, 0, NULL);
5470 } 5481 }
5471} 5482}
5472 5483
@@ -5784,8 +5795,7 @@ static int add_new_disk(struct mddev * mddev, mdu_disk_info_t *info)
5784 super_types[mddev->major_version]. 5795 super_types[mddev->major_version].
5785 validate_super(mddev, rdev); 5796 validate_super(mddev, rdev);
5786 if ((info->state & (1<<MD_DISK_SYNC)) && 5797 if ((info->state & (1<<MD_DISK_SYNC)) &&
5787 (!test_bit(In_sync, &rdev->flags) || 5798 rdev->raid_disk != info->raid_disk) {
5788 rdev->raid_disk != info->raid_disk)) {
5789 /* This was a hot-add request, but events doesn't 5799 /* This was a hot-add request, but events doesn't
5790 * match, so reject it. 5800 * match, so reject it.
5791 */ 5801 */
@@ -6482,11 +6492,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
6482 goto done_unlock; 6492 goto done_unlock;
6483 6493
6484 case STOP_ARRAY: 6494 case STOP_ARRAY:
6485 err = do_md_stop(mddev, 0, 1); 6495 err = do_md_stop(mddev, 0, bdev);
6486 goto done_unlock; 6496 goto done_unlock;
6487 6497
6488 case STOP_ARRAY_RO: 6498 case STOP_ARRAY_RO:
6489 err = md_set_readonly(mddev, 1); 6499 err = md_set_readonly(mddev, bdev);
6490 goto done_unlock; 6500 goto done_unlock;
6491 6501
6492 case BLKROSET: 6502 case BLKROSET:
@@ -6751,7 +6761,7 @@ struct md_thread *md_register_thread(void (*run) (struct mddev *), struct mddev
6751 thread->tsk = kthread_run(md_thread, thread, 6761 thread->tsk = kthread_run(md_thread, thread,
6752 "%s_%s", 6762 "%s_%s",
6753 mdname(thread->mddev), 6763 mdname(thread->mddev),
6754 name ?: mddev->pers->name); 6764 name);
6755 if (IS_ERR(thread->tsk)) { 6765 if (IS_ERR(thread->tsk)) {
6756 kfree(thread); 6766 kfree(thread);
6757 return NULL; 6767 return NULL;
@@ -7298,6 +7308,7 @@ void md_do_sync(struct mddev *mddev)
7298 int skipped = 0; 7308 int skipped = 0;
7299 struct md_rdev *rdev; 7309 struct md_rdev *rdev;
7300 char *desc; 7310 char *desc;
7311 struct blk_plug plug;
7301 7312
7302 /* just incase thread restarts... */ 7313 /* just incase thread restarts... */
7303 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery)) 7314 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
@@ -7447,6 +7458,7 @@ void md_do_sync(struct mddev *mddev)
7447 } 7458 }
7448 mddev->curr_resync_completed = j; 7459 mddev->curr_resync_completed = j;
7449 7460
7461 blk_start_plug(&plug);
7450 while (j < max_sectors) { 7462 while (j < max_sectors) {
7451 sector_t sectors; 7463 sector_t sectors;
7452 7464
@@ -7552,6 +7564,7 @@ void md_do_sync(struct mddev *mddev)
7552 * this also signals 'finished resyncing' to md_stop 7564 * this also signals 'finished resyncing' to md_stop
7553 */ 7565 */
7554 out: 7566 out:
7567 blk_finish_plug(&plug);
7555 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active)); 7568 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active));
7556 7569
7557 /* tell personality that we are finished */ 7570 /* tell personality that we are finished */
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
index 9339e67fcc79..61a1833ebaf3 100644
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -474,7 +474,8 @@ static int multipath_run (struct mddev *mddev)
474 } 474 }
475 475
476 { 476 {
477 mddev->thread = md_register_thread(multipathd, mddev, NULL); 477 mddev->thread = md_register_thread(multipathd, mddev,
478 "multipath");
478 if (!mddev->thread) { 479 if (!mddev->thread) {
479 printk(KERN_ERR "multipath: couldn't allocate thread" 480 printk(KERN_ERR "multipath: couldn't allocate thread"
480 " for %s\n", mdname(mddev)); 481 " for %s\n", mdname(mddev));
diff --git a/drivers/md/persistent-data/dm-space-map-checker.c b/drivers/md/persistent-data/dm-space-map-checker.c
index 50ed53bf4aa2..fc90c11620ad 100644
--- a/drivers/md/persistent-data/dm-space-map-checker.c
+++ b/drivers/md/persistent-data/dm-space-map-checker.c
@@ -8,6 +8,7 @@
8 8
9#include <linux/device-mapper.h> 9#include <linux/device-mapper.h>
10#include <linux/export.h> 10#include <linux/export.h>
11#include <linux/vmalloc.h>
11 12
12#ifdef CONFIG_DM_DEBUG_SPACE_MAPS 13#ifdef CONFIG_DM_DEBUG_SPACE_MAPS
13 14
@@ -89,13 +90,23 @@ static int ca_create(struct count_array *ca, struct dm_space_map *sm)
89 90
90 ca->nr = nr_blocks; 91 ca->nr = nr_blocks;
91 ca->nr_free = nr_blocks; 92 ca->nr_free = nr_blocks;
92 ca->counts = kzalloc(sizeof(*ca->counts) * nr_blocks, GFP_KERNEL); 93
93 if (!ca->counts) 94 if (!nr_blocks)
94 return -ENOMEM; 95 ca->counts = NULL;
96 else {
97 ca->counts = vzalloc(sizeof(*ca->counts) * nr_blocks);
98 if (!ca->counts)
99 return -ENOMEM;
100 }
95 101
96 return 0; 102 return 0;
97} 103}
98 104
105static void ca_destroy(struct count_array *ca)
106{
107 vfree(ca->counts);
108}
109
99static int ca_load(struct count_array *ca, struct dm_space_map *sm) 110static int ca_load(struct count_array *ca, struct dm_space_map *sm)
100{ 111{
101 int r; 112 int r;
@@ -126,12 +137,14 @@ static int ca_load(struct count_array *ca, struct dm_space_map *sm)
126static int ca_extend(struct count_array *ca, dm_block_t extra_blocks) 137static int ca_extend(struct count_array *ca, dm_block_t extra_blocks)
127{ 138{
128 dm_block_t nr_blocks = ca->nr + extra_blocks; 139 dm_block_t nr_blocks = ca->nr + extra_blocks;
129 uint32_t *counts = kzalloc(sizeof(*counts) * nr_blocks, GFP_KERNEL); 140 uint32_t *counts = vzalloc(sizeof(*counts) * nr_blocks);
130 if (!counts) 141 if (!counts)
131 return -ENOMEM; 142 return -ENOMEM;
132 143
133 memcpy(counts, ca->counts, sizeof(*counts) * ca->nr); 144 if (ca->counts) {
134 kfree(ca->counts); 145 memcpy(counts, ca->counts, sizeof(*counts) * ca->nr);
146 ca_destroy(ca);
147 }
135 ca->nr = nr_blocks; 148 ca->nr = nr_blocks;
136 ca->nr_free += extra_blocks; 149 ca->nr_free += extra_blocks;
137 ca->counts = counts; 150 ca->counts = counts;
@@ -151,11 +164,6 @@ static int ca_commit(struct count_array *old, struct count_array *new)
151 return 0; 164 return 0;
152} 165}
153 166
154static void ca_destroy(struct count_array *ca)
155{
156 kfree(ca->counts);
157}
158
159/*----------------------------------------------------------------*/ 167/*----------------------------------------------------------------*/
160 168
161struct sm_checker { 169struct sm_checker {
@@ -343,25 +351,25 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
343 int r; 351 int r;
344 struct sm_checker *smc; 352 struct sm_checker *smc;
345 353
346 if (!sm) 354 if (IS_ERR_OR_NULL(sm))
347 return NULL; 355 return ERR_PTR(-EINVAL);
348 356
349 smc = kmalloc(sizeof(*smc), GFP_KERNEL); 357 smc = kmalloc(sizeof(*smc), GFP_KERNEL);
350 if (!smc) 358 if (!smc)
351 return NULL; 359 return ERR_PTR(-ENOMEM);
352 360
353 memcpy(&smc->sm, &ops_, sizeof(smc->sm)); 361 memcpy(&smc->sm, &ops_, sizeof(smc->sm));
354 r = ca_create(&smc->old_counts, sm); 362 r = ca_create(&smc->old_counts, sm);
355 if (r) { 363 if (r) {
356 kfree(smc); 364 kfree(smc);
357 return NULL; 365 return ERR_PTR(r);
358 } 366 }
359 367
360 r = ca_create(&smc->counts, sm); 368 r = ca_create(&smc->counts, sm);
361 if (r) { 369 if (r) {
362 ca_destroy(&smc->old_counts); 370 ca_destroy(&smc->old_counts);
363 kfree(smc); 371 kfree(smc);
364 return NULL; 372 return ERR_PTR(r);
365 } 373 }
366 374
367 smc->real_sm = sm; 375 smc->real_sm = sm;
@@ -371,7 +379,7 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
371 ca_destroy(&smc->counts); 379 ca_destroy(&smc->counts);
372 ca_destroy(&smc->old_counts); 380 ca_destroy(&smc->old_counts);
373 kfree(smc); 381 kfree(smc);
374 return NULL; 382 return ERR_PTR(r);
375 } 383 }
376 384
377 r = ca_commit(&smc->old_counts, &smc->counts); 385 r = ca_commit(&smc->old_counts, &smc->counts);
@@ -379,7 +387,7 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
379 ca_destroy(&smc->counts); 387 ca_destroy(&smc->counts);
380 ca_destroy(&smc->old_counts); 388 ca_destroy(&smc->old_counts);
381 kfree(smc); 389 kfree(smc);
382 return NULL; 390 return ERR_PTR(r);
383 } 391 }
384 392
385 return &smc->sm; 393 return &smc->sm;
@@ -391,25 +399,25 @@ struct dm_space_map *dm_sm_checker_create_fresh(struct dm_space_map *sm)
391 int r; 399 int r;
392 struct sm_checker *smc; 400 struct sm_checker *smc;
393 401
394 if (!sm) 402 if (IS_ERR_OR_NULL(sm))
395 return NULL; 403 return ERR_PTR(-EINVAL);
396 404
397 smc = kmalloc(sizeof(*smc), GFP_KERNEL); 405 smc = kmalloc(sizeof(*smc), GFP_KERNEL);
398 if (!smc) 406 if (!smc)
399 return NULL; 407 return ERR_PTR(-ENOMEM);
400 408
401 memcpy(&smc->sm, &ops_, sizeof(smc->sm)); 409 memcpy(&smc->sm, &ops_, sizeof(smc->sm));
402 r = ca_create(&smc->old_counts, sm); 410 r = ca_create(&smc->old_counts, sm);
403 if (r) { 411 if (r) {
404 kfree(smc); 412 kfree(smc);
405 return NULL; 413 return ERR_PTR(r);
406 } 414 }
407 415
408 r = ca_create(&smc->counts, sm); 416 r = ca_create(&smc->counts, sm);
409 if (r) { 417 if (r) {
410 ca_destroy(&smc->old_counts); 418 ca_destroy(&smc->old_counts);
411 kfree(smc); 419 kfree(smc);
412 return NULL; 420 return ERR_PTR(r);
413 } 421 }
414 422
415 smc->real_sm = sm; 423 smc->real_sm = sm;
diff --git a/drivers/md/persistent-data/dm-space-map-disk.c b/drivers/md/persistent-data/dm-space-map-disk.c
index fc469ba9f627..3d0ed5332883 100644
--- a/drivers/md/persistent-data/dm-space-map-disk.c
+++ b/drivers/md/persistent-data/dm-space-map-disk.c
@@ -290,7 +290,16 @@ struct dm_space_map *dm_sm_disk_create(struct dm_transaction_manager *tm,
290 dm_block_t nr_blocks) 290 dm_block_t nr_blocks)
291{ 291{
292 struct dm_space_map *sm = dm_sm_disk_create_real(tm, nr_blocks); 292 struct dm_space_map *sm = dm_sm_disk_create_real(tm, nr_blocks);
293 return dm_sm_checker_create_fresh(sm); 293 struct dm_space_map *smc;
294
295 if (IS_ERR_OR_NULL(sm))
296 return sm;
297
298 smc = dm_sm_checker_create_fresh(sm);
299 if (IS_ERR(smc))
300 dm_sm_destroy(sm);
301
302 return smc;
294} 303}
295EXPORT_SYMBOL_GPL(dm_sm_disk_create); 304EXPORT_SYMBOL_GPL(dm_sm_disk_create);
296 305
diff --git a/drivers/md/persistent-data/dm-transaction-manager.c b/drivers/md/persistent-data/dm-transaction-manager.c
index 400fe144c0cd..e5604b32d91f 100644
--- a/drivers/md/persistent-data/dm-transaction-manager.c
+++ b/drivers/md/persistent-data/dm-transaction-manager.c
@@ -138,6 +138,9 @@ EXPORT_SYMBOL_GPL(dm_tm_create_non_blocking_clone);
138 138
139void dm_tm_destroy(struct dm_transaction_manager *tm) 139void dm_tm_destroy(struct dm_transaction_manager *tm)
140{ 140{
141 if (!tm->is_clone)
142 wipe_shadow_table(tm);
143
141 kfree(tm); 144 kfree(tm);
142} 145}
143EXPORT_SYMBOL_GPL(dm_tm_destroy); 146EXPORT_SYMBOL_GPL(dm_tm_destroy);
@@ -344,8 +347,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm,
344 } 347 }
345 348
346 *sm = dm_sm_checker_create(inner); 349 *sm = dm_sm_checker_create(inner);
347 if (!*sm) 350 if (IS_ERR(*sm)) {
351 r = PTR_ERR(*sm);
348 goto bad2; 352 goto bad2;
353 }
349 354
350 } else { 355 } else {
351 r = dm_bm_write_lock(dm_tm_get_bm(*tm), sb_location, 356 r = dm_bm_write_lock(dm_tm_get_bm(*tm), sb_location,
@@ -364,8 +369,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm,
364 } 369 }
365 370
366 *sm = dm_sm_checker_create(inner); 371 *sm = dm_sm_checker_create(inner);
367 if (!*sm) 372 if (IS_ERR(*sm)) {
373 r = PTR_ERR(*sm);
368 goto bad2; 374 goto bad2;
375 }
369 } 376 }
370 377
371 return 0; 378 return 0;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index a9c7981ddd24..cacd008d6864 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -517,8 +517,8 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
517 int bad_sectors; 517 int bad_sectors;
518 518
519 int disk = start_disk + i; 519 int disk = start_disk + i;
520 if (disk >= conf->raid_disks) 520 if (disk >= conf->raid_disks * 2)
521 disk -= conf->raid_disks; 521 disk -= conf->raid_disks * 2;
522 522
523 rdev = rcu_dereference(conf->mirrors[disk].rdev); 523 rdev = rcu_dereference(conf->mirrors[disk].rdev);
524 if (r1_bio->bios[disk] == IO_BLOCKED 524 if (r1_bio->bios[disk] == IO_BLOCKED
@@ -883,7 +883,6 @@ static void make_request(struct mddev *mddev, struct bio * bio)
883 const unsigned long do_sync = (bio->bi_rw & REQ_SYNC); 883 const unsigned long do_sync = (bio->bi_rw & REQ_SYNC);
884 const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA)); 884 const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA));
885 struct md_rdev *blocked_rdev; 885 struct md_rdev *blocked_rdev;
886 int plugged;
887 int first_clone; 886 int first_clone;
888 int sectors_handled; 887 int sectors_handled;
889 int max_sectors; 888 int max_sectors;
@@ -1034,7 +1033,6 @@ read_again:
1034 * the bad blocks. Each set of writes gets it's own r1bio 1033 * the bad blocks. Each set of writes gets it's own r1bio
1035 * with a set of bios attached. 1034 * with a set of bios attached.
1036 */ 1035 */
1037 plugged = mddev_check_plugged(mddev);
1038 1036
1039 disks = conf->raid_disks * 2; 1037 disks = conf->raid_disks * 2;
1040 retry_write: 1038 retry_write:
@@ -1191,6 +1189,8 @@ read_again:
1191 bio_list_add(&conf->pending_bio_list, mbio); 1189 bio_list_add(&conf->pending_bio_list, mbio);
1192 conf->pending_count++; 1190 conf->pending_count++;
1193 spin_unlock_irqrestore(&conf->device_lock, flags); 1191 spin_unlock_irqrestore(&conf->device_lock, flags);
1192 if (!mddev_check_plugged(mddev))
1193 md_wakeup_thread(mddev->thread);
1194 } 1194 }
1195 /* Mustn't call r1_bio_write_done before this next test, 1195 /* Mustn't call r1_bio_write_done before this next test,
1196 * as it could result in the bio being freed. 1196 * as it could result in the bio being freed.
@@ -1213,9 +1213,6 @@ read_again:
1213 1213
1214 /* In case raid1d snuck in to freeze_array */ 1214 /* In case raid1d snuck in to freeze_array */
1215 wake_up(&conf->wait_barrier); 1215 wake_up(&conf->wait_barrier);
1216
1217 if (do_sync || !bitmap || !plugged)
1218 md_wakeup_thread(mddev->thread);
1219} 1216}
1220 1217
1221static void status(struct seq_file *seq, struct mddev *mddev) 1218static void status(struct seq_file *seq, struct mddev *mddev)
@@ -1821,8 +1818,14 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
1821 1818
1822 if (atomic_dec_and_test(&r1_bio->remaining)) { 1819 if (atomic_dec_and_test(&r1_bio->remaining)) {
1823 /* if we're here, all write(s) have completed, so clean up */ 1820 /* if we're here, all write(s) have completed, so clean up */
1824 md_done_sync(mddev, r1_bio->sectors, 1); 1821 int s = r1_bio->sectors;
1825 put_buf(r1_bio); 1822 if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
1823 test_bit(R1BIO_WriteError, &r1_bio->state))
1824 reschedule_retry(r1_bio);
1825 else {
1826 put_buf(r1_bio);
1827 md_done_sync(mddev, s, 1);
1828 }
1826 } 1829 }
1827} 1830}
1828 1831
@@ -2488,9 +2491,10 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2488 */ 2491 */
2489 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { 2492 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
2490 atomic_set(&r1_bio->remaining, read_targets); 2493 atomic_set(&r1_bio->remaining, read_targets);
2491 for (i = 0; i < conf->raid_disks * 2; i++) { 2494 for (i = 0; i < conf->raid_disks * 2 && read_targets; i++) {
2492 bio = r1_bio->bios[i]; 2495 bio = r1_bio->bios[i];
2493 if (bio->bi_end_io == end_sync_read) { 2496 if (bio->bi_end_io == end_sync_read) {
2497 read_targets--;
2494 md_sync_acct(bio->bi_bdev, nr_sectors); 2498 md_sync_acct(bio->bi_bdev, nr_sectors);
2495 generic_make_request(bio); 2499 generic_make_request(bio);
2496 } 2500 }
@@ -2621,7 +2625,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2621 goto abort; 2625 goto abort;
2622 } 2626 }
2623 err = -ENOMEM; 2627 err = -ENOMEM;
2624 conf->thread = md_register_thread(raid1d, mddev, NULL); 2628 conf->thread = md_register_thread(raid1d, mddev, "raid1");
2625 if (!conf->thread) { 2629 if (!conf->thread) {
2626 printk(KERN_ERR 2630 printk(KERN_ERR
2627 "md/raid1:%s: couldn't allocate thread\n", 2631 "md/raid1:%s: couldn't allocate thread\n",
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 99ae6068e456..8da6282254c3 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -1039,7 +1039,6 @@ static void make_request(struct mddev *mddev, struct bio * bio)
1039 const unsigned long do_fua = (bio->bi_rw & REQ_FUA); 1039 const unsigned long do_fua = (bio->bi_rw & REQ_FUA);
1040 unsigned long flags; 1040 unsigned long flags;
1041 struct md_rdev *blocked_rdev; 1041 struct md_rdev *blocked_rdev;
1042 int plugged;
1043 int sectors_handled; 1042 int sectors_handled;
1044 int max_sectors; 1043 int max_sectors;
1045 int sectors; 1044 int sectors;
@@ -1239,7 +1238,6 @@ read_again:
1239 * of r10_bios is recored in bio->bi_phys_segments just as with 1238 * of r10_bios is recored in bio->bi_phys_segments just as with
1240 * the read case. 1239 * the read case.
1241 */ 1240 */
1242 plugged = mddev_check_plugged(mddev);
1243 1241
1244 r10_bio->read_slot = -1; /* make sure repl_bio gets freed */ 1242 r10_bio->read_slot = -1; /* make sure repl_bio gets freed */
1245 raid10_find_phys(conf, r10_bio); 1243 raid10_find_phys(conf, r10_bio);
@@ -1396,6 +1394,8 @@ retry_write:
1396 bio_list_add(&conf->pending_bio_list, mbio); 1394 bio_list_add(&conf->pending_bio_list, mbio);
1397 conf->pending_count++; 1395 conf->pending_count++;
1398 spin_unlock_irqrestore(&conf->device_lock, flags); 1396 spin_unlock_irqrestore(&conf->device_lock, flags);
1397 if (!mddev_check_plugged(mddev))
1398 md_wakeup_thread(mddev->thread);
1399 1399
1400 if (!r10_bio->devs[i].repl_bio) 1400 if (!r10_bio->devs[i].repl_bio)
1401 continue; 1401 continue;
@@ -1423,6 +1423,8 @@ retry_write:
1423 bio_list_add(&conf->pending_bio_list, mbio); 1423 bio_list_add(&conf->pending_bio_list, mbio);
1424 conf->pending_count++; 1424 conf->pending_count++;
1425 spin_unlock_irqrestore(&conf->device_lock, flags); 1425 spin_unlock_irqrestore(&conf->device_lock, flags);
1426 if (!mddev_check_plugged(mddev))
1427 md_wakeup_thread(mddev->thread);
1426 } 1428 }
1427 1429
1428 /* Don't remove the bias on 'remaining' (one_write_done) until 1430 /* Don't remove the bias on 'remaining' (one_write_done) until
@@ -1448,9 +1450,6 @@ retry_write:
1448 1450
1449 /* In case raid10d snuck in to freeze_array */ 1451 /* In case raid10d snuck in to freeze_array */
1450 wake_up(&conf->wait_barrier); 1452 wake_up(&conf->wait_barrier);
1451
1452 if (do_sync || !mddev->bitmap || !plugged)
1453 md_wakeup_thread(mddev->thread);
1454} 1453}
1455 1454
1456static void status(struct seq_file *seq, struct mddev *mddev) 1455static void status(struct seq_file *seq, struct mddev *mddev)
@@ -2310,7 +2309,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
2310 if (r10_sync_page_io(rdev, 2309 if (r10_sync_page_io(rdev,
2311 r10_bio->devs[sl].addr + 2310 r10_bio->devs[sl].addr +
2312 sect, 2311 sect,
2313 s<<9, conf->tmppage, WRITE) 2312 s, conf->tmppage, WRITE)
2314 == 0) { 2313 == 0) {
2315 /* Well, this device is dead */ 2314 /* Well, this device is dead */
2316 printk(KERN_NOTICE 2315 printk(KERN_NOTICE
@@ -2349,7 +2348,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
2349 switch (r10_sync_page_io(rdev, 2348 switch (r10_sync_page_io(rdev,
2350 r10_bio->devs[sl].addr + 2349 r10_bio->devs[sl].addr +
2351 sect, 2350 sect,
2352 s<<9, conf->tmppage, 2351 s, conf->tmppage,
2353 READ)) { 2352 READ)) {
2354 case 0: 2353 case 0:
2355 /* Well, this device is dead */ 2354 /* Well, this device is dead */
@@ -2512,7 +2511,7 @@ read_more:
2512 slot = r10_bio->read_slot; 2511 slot = r10_bio->read_slot;
2513 printk_ratelimited( 2512 printk_ratelimited(
2514 KERN_ERR 2513 KERN_ERR
2515 "md/raid10:%s: %s: redirecting" 2514 "md/raid10:%s: %s: redirecting "
2516 "sector %llu to another mirror\n", 2515 "sector %llu to another mirror\n",
2517 mdname(mddev), 2516 mdname(mddev),
2518 bdevname(rdev->bdev, b), 2517 bdevname(rdev->bdev, b),
@@ -2661,7 +2660,8 @@ static void raid10d(struct mddev *mddev)
2661 blk_start_plug(&plug); 2660 blk_start_plug(&plug);
2662 for (;;) { 2661 for (;;) {
2663 2662
2664 flush_pending_writes(conf); 2663 if (atomic_read(&mddev->plug_cnt) == 0)
2664 flush_pending_writes(conf);
2665 2665
2666 spin_lock_irqsave(&conf->device_lock, flags); 2666 spin_lock_irqsave(&conf->device_lock, flags);
2667 if (list_empty(head)) { 2667 if (list_empty(head)) {
@@ -2890,6 +2890,12 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
2890 /* want to reconstruct this device */ 2890 /* want to reconstruct this device */
2891 rb2 = r10_bio; 2891 rb2 = r10_bio;
2892 sect = raid10_find_virt(conf, sector_nr, i); 2892 sect = raid10_find_virt(conf, sector_nr, i);
2893 if (sect >= mddev->resync_max_sectors) {
2894 /* last stripe is not complete - don't
2895 * try to recover this sector.
2896 */
2897 continue;
2898 }
2893 /* Unless we are doing a full sync, or a replacement 2899 /* Unless we are doing a full sync, or a replacement
2894 * we only need to recover the block if it is set in 2900 * we only need to recover the block if it is set in
2895 * the bitmap 2901 * the bitmap
@@ -3421,7 +3427,7 @@ static struct r10conf *setup_conf(struct mddev *mddev)
3421 spin_lock_init(&conf->resync_lock); 3427 spin_lock_init(&conf->resync_lock);
3422 init_waitqueue_head(&conf->wait_barrier); 3428 init_waitqueue_head(&conf->wait_barrier);
3423 3429
3424 conf->thread = md_register_thread(raid10d, mddev, NULL); 3430 conf->thread = md_register_thread(raid10d, mddev, "raid10");
3425 if (!conf->thread) 3431 if (!conf->thread)
3426 goto out; 3432 goto out;
3427 3433
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index d26767246d26..04348d76bb30 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -196,12 +196,14 @@ static void __release_stripe(struct r5conf *conf, struct stripe_head *sh)
196 BUG_ON(!list_empty(&sh->lru)); 196 BUG_ON(!list_empty(&sh->lru));
197 BUG_ON(atomic_read(&conf->active_stripes)==0); 197 BUG_ON(atomic_read(&conf->active_stripes)==0);
198 if (test_bit(STRIPE_HANDLE, &sh->state)) { 198 if (test_bit(STRIPE_HANDLE, &sh->state)) {
199 if (test_bit(STRIPE_DELAYED, &sh->state)) 199 if (test_bit(STRIPE_DELAYED, &sh->state) &&
200 !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
200 list_add_tail(&sh->lru, &conf->delayed_list); 201 list_add_tail(&sh->lru, &conf->delayed_list);
201 else if (test_bit(STRIPE_BIT_DELAY, &sh->state) && 202 else if (test_bit(STRIPE_BIT_DELAY, &sh->state) &&
202 sh->bm_seq - conf->seq_write > 0) 203 sh->bm_seq - conf->seq_write > 0)
203 list_add_tail(&sh->lru, &conf->bitmap_list); 204 list_add_tail(&sh->lru, &conf->bitmap_list);
204 else { 205 else {
206 clear_bit(STRIPE_DELAYED, &sh->state);
205 clear_bit(STRIPE_BIT_DELAY, &sh->state); 207 clear_bit(STRIPE_BIT_DELAY, &sh->state);
206 list_add_tail(&sh->lru, &conf->handle_list); 208 list_add_tail(&sh->lru, &conf->handle_list);
207 } 209 }
@@ -606,6 +608,12 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
606 * a chance*/ 608 * a chance*/
607 md_check_recovery(conf->mddev); 609 md_check_recovery(conf->mddev);
608 } 610 }
611 /*
612 * Because md_wait_for_blocked_rdev
613 * will dec nr_pending, we must
614 * increment it first.
615 */
616 atomic_inc(&rdev->nr_pending);
609 md_wait_for_blocked_rdev(rdev, conf->mddev); 617 md_wait_for_blocked_rdev(rdev, conf->mddev);
610 } else { 618 } else {
611 /* Acknowledged bad block - skip the write */ 619 /* Acknowledged bad block - skip the write */
@@ -1737,6 +1745,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
1737 } else { 1745 } else {
1738 const char *bdn = bdevname(rdev->bdev, b); 1746 const char *bdn = bdevname(rdev->bdev, b);
1739 int retry = 0; 1747 int retry = 0;
1748 int set_bad = 0;
1740 1749
1741 clear_bit(R5_UPTODATE, &sh->dev[i].flags); 1750 clear_bit(R5_UPTODATE, &sh->dev[i].flags);
1742 atomic_inc(&rdev->read_errors); 1751 atomic_inc(&rdev->read_errors);
@@ -1748,7 +1757,8 @@ static void raid5_end_read_request(struct bio * bi, int error)
1748 mdname(conf->mddev), 1757 mdname(conf->mddev),
1749 (unsigned long long)s, 1758 (unsigned long long)s,
1750 bdn); 1759 bdn);
1751 else if (conf->mddev->degraded >= conf->max_degraded) 1760 else if (conf->mddev->degraded >= conf->max_degraded) {
1761 set_bad = 1;
1752 printk_ratelimited( 1762 printk_ratelimited(
1753 KERN_WARNING 1763 KERN_WARNING
1754 "md/raid:%s: read error not correctable " 1764 "md/raid:%s: read error not correctable "
@@ -1756,8 +1766,9 @@ static void raid5_end_read_request(struct bio * bi, int error)
1756 mdname(conf->mddev), 1766 mdname(conf->mddev),
1757 (unsigned long long)s, 1767 (unsigned long long)s,
1758 bdn); 1768 bdn);
1759 else if (test_bit(R5_ReWrite, &sh->dev[i].flags)) 1769 } else if (test_bit(R5_ReWrite, &sh->dev[i].flags)) {
1760 /* Oh, no!!! */ 1770 /* Oh, no!!! */
1771 set_bad = 1;
1761 printk_ratelimited( 1772 printk_ratelimited(
1762 KERN_WARNING 1773 KERN_WARNING
1763 "md/raid:%s: read error NOT corrected!! " 1774 "md/raid:%s: read error NOT corrected!! "
@@ -1765,7 +1776,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
1765 mdname(conf->mddev), 1776 mdname(conf->mddev),
1766 (unsigned long long)s, 1777 (unsigned long long)s,
1767 bdn); 1778 bdn);
1768 else if (atomic_read(&rdev->read_errors) 1779 } else if (atomic_read(&rdev->read_errors)
1769 > conf->max_nr_stripes) 1780 > conf->max_nr_stripes)
1770 printk(KERN_WARNING 1781 printk(KERN_WARNING
1771 "md/raid:%s: Too many read errors, failing device %s.\n", 1782 "md/raid:%s: Too many read errors, failing device %s.\n",
@@ -1777,7 +1788,11 @@ static void raid5_end_read_request(struct bio * bi, int error)
1777 else { 1788 else {
1778 clear_bit(R5_ReadError, &sh->dev[i].flags); 1789 clear_bit(R5_ReadError, &sh->dev[i].flags);
1779 clear_bit(R5_ReWrite, &sh->dev[i].flags); 1790 clear_bit(R5_ReWrite, &sh->dev[i].flags);
1780 md_error(conf->mddev, rdev); 1791 if (!(set_bad
1792 && test_bit(In_sync, &rdev->flags)
1793 && rdev_set_badblocks(
1794 rdev, sh->sector, STRIPE_SECTORS, 0)))
1795 md_error(conf->mddev, rdev);
1781 } 1796 }
1782 } 1797 }
1783 rdev_dec_pending(rdev, conf->mddev); 1798 rdev_dec_pending(rdev, conf->mddev);
@@ -3582,8 +3597,18 @@ static void handle_stripe(struct stripe_head *sh)
3582 3597
3583finish: 3598finish:
3584 /* wait for this device to become unblocked */ 3599 /* wait for this device to become unblocked */
3585 if (conf->mddev->external && unlikely(s.blocked_rdev)) 3600 if (unlikely(s.blocked_rdev)) {
3586 md_wait_for_blocked_rdev(s.blocked_rdev, conf->mddev); 3601 if (conf->mddev->external)
3602 md_wait_for_blocked_rdev(s.blocked_rdev,
3603 conf->mddev);
3604 else
3605 /* Internal metadata will immediately
3606 * be written by raid5d, so we don't
3607 * need to wait here.
3608 */
3609 rdev_dec_pending(s.blocked_rdev,
3610 conf->mddev);
3611 }
3587 3612
3588 if (s.handle_bad_blocks) 3613 if (s.handle_bad_blocks)
3589 for (i = disks; i--; ) { 3614 for (i = disks; i--; ) {
@@ -3881,8 +3906,6 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio)
3881 raid_bio->bi_next = (void*)rdev; 3906 raid_bio->bi_next = (void*)rdev;
3882 align_bi->bi_bdev = rdev->bdev; 3907 align_bi->bi_bdev = rdev->bdev;
3883 align_bi->bi_flags &= ~(1 << BIO_SEG_VALID); 3908 align_bi->bi_flags &= ~(1 << BIO_SEG_VALID);
3884 /* No reshape active, so we can trust rdev->data_offset */
3885 align_bi->bi_sector += rdev->data_offset;
3886 3909
3887 if (!bio_fits_rdev(align_bi) || 3910 if (!bio_fits_rdev(align_bi) ||
3888 is_badblock(rdev, align_bi->bi_sector, align_bi->bi_size>>9, 3911 is_badblock(rdev, align_bi->bi_sector, align_bi->bi_size>>9,
@@ -3893,6 +3916,9 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio)
3893 return 0; 3916 return 0;
3894 } 3917 }
3895 3918
3919 /* No reshape active, so we can trust rdev->data_offset */
3920 align_bi->bi_sector += rdev->data_offset;
3921
3896 spin_lock_irq(&conf->device_lock); 3922 spin_lock_irq(&conf->device_lock);
3897 wait_event_lock_irq(conf->wait_for_stripe, 3923 wait_event_lock_irq(conf->wait_for_stripe,
3898 conf->quiesce == 0, 3924 conf->quiesce == 0,
@@ -3971,7 +3997,6 @@ static void make_request(struct mddev *mddev, struct bio * bi)
3971 struct stripe_head *sh; 3997 struct stripe_head *sh;
3972 const int rw = bio_data_dir(bi); 3998 const int rw = bio_data_dir(bi);
3973 int remaining; 3999 int remaining;
3974 int plugged;
3975 4000
3976 if (unlikely(bi->bi_rw & REQ_FLUSH)) { 4001 if (unlikely(bi->bi_rw & REQ_FLUSH)) {
3977 md_flush_request(mddev, bi); 4002 md_flush_request(mddev, bi);
@@ -3990,7 +4015,6 @@ static void make_request(struct mddev *mddev, struct bio * bi)
3990 bi->bi_next = NULL; 4015 bi->bi_next = NULL;
3991 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */ 4016 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */
3992 4017
3993 plugged = mddev_check_plugged(mddev);
3994 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) { 4018 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) {
3995 DEFINE_WAIT(w); 4019 DEFINE_WAIT(w);
3996 int previous; 4020 int previous;
@@ -4092,6 +4116,7 @@ static void make_request(struct mddev *mddev, struct bio * bi)
4092 if ((bi->bi_rw & REQ_SYNC) && 4116 if ((bi->bi_rw & REQ_SYNC) &&
4093 !test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) 4117 !test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
4094 atomic_inc(&conf->preread_active_stripes); 4118 atomic_inc(&conf->preread_active_stripes);
4119 mddev_check_plugged(mddev);
4095 release_stripe(sh); 4120 release_stripe(sh);
4096 } else { 4121 } else {
4097 /* cannot get stripe for read-ahead, just give-up */ 4122 /* cannot get stripe for read-ahead, just give-up */
@@ -4099,10 +4124,7 @@ static void make_request(struct mddev *mddev, struct bio * bi)
4099 finish_wait(&conf->wait_for_overlap, &w); 4124 finish_wait(&conf->wait_for_overlap, &w);
4100 break; 4125 break;
4101 } 4126 }
4102
4103 } 4127 }
4104 if (!plugged)
4105 md_wakeup_thread(mddev->thread);
4106 4128
4107 spin_lock_irq(&conf->device_lock); 4129 spin_lock_irq(&conf->device_lock);
4108 remaining = raid5_dec_bi_phys_segments(bi); 4130 remaining = raid5_dec_bi_phys_segments(bi);
@@ -4823,6 +4845,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
4823 int raid_disk, memory, max_disks; 4845 int raid_disk, memory, max_disks;
4824 struct md_rdev *rdev; 4846 struct md_rdev *rdev;
4825 struct disk_info *disk; 4847 struct disk_info *disk;
4848 char pers_name[6];
4826 4849
4827 if (mddev->new_level != 5 4850 if (mddev->new_level != 5
4828 && mddev->new_level != 4 4851 && mddev->new_level != 4
@@ -4946,7 +4969,8 @@ static struct r5conf *setup_conf(struct mddev *mddev)
4946 printk(KERN_INFO "md/raid:%s: allocated %dkB\n", 4969 printk(KERN_INFO "md/raid:%s: allocated %dkB\n",
4947 mdname(mddev), memory); 4970 mdname(mddev), memory);
4948 4971
4949 conf->thread = md_register_thread(raid5d, mddev, NULL); 4972 sprintf(pers_name, "raid%d", mddev->new_level);
4973 conf->thread = md_register_thread(raid5d, mddev, pers_name);
4950 if (!conf->thread) { 4974 if (!conf->thread) {
4951 printk(KERN_ERR 4975 printk(KERN_ERR
4952 "md/raid:%s: couldn't allocate thread.\n", 4976 "md/raid:%s: couldn't allocate thread.\n",
@@ -5465,10 +5489,9 @@ static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)
5465 if (rdev->saved_raid_disk >= 0 && 5489 if (rdev->saved_raid_disk >= 0 &&
5466 rdev->saved_raid_disk >= first && 5490 rdev->saved_raid_disk >= first &&
5467 conf->disks[rdev->saved_raid_disk].rdev == NULL) 5491 conf->disks[rdev->saved_raid_disk].rdev == NULL)
5468 disk = rdev->saved_raid_disk; 5492 first = rdev->saved_raid_disk;
5469 else 5493
5470 disk = first; 5494 for (disk = first; disk <= last; disk++) {
5471 for ( ; disk <= last ; disk++) {
5472 p = conf->disks + disk; 5495 p = conf->disks + disk;
5473 if (p->rdev == NULL) { 5496 if (p->rdev == NULL) {
5474 clear_bit(In_sync, &rdev->flags); 5497 clear_bit(In_sync, &rdev->flags);
@@ -5477,8 +5500,11 @@ static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)
5477 if (rdev->saved_raid_disk != disk) 5500 if (rdev->saved_raid_disk != disk)
5478 conf->fullsync = 1; 5501 conf->fullsync = 1;
5479 rcu_assign_pointer(p->rdev, rdev); 5502 rcu_assign_pointer(p->rdev, rdev);
5480 break; 5503 goto out;
5481 } 5504 }
5505 }
5506 for (disk = first; disk <= last; disk++) {
5507 p = conf->disks + disk;
5482 if (test_bit(WantReplacement, &p->rdev->flags) && 5508 if (test_bit(WantReplacement, &p->rdev->flags) &&
5483 p->replacement == NULL) { 5509 p->replacement == NULL) {
5484 clear_bit(In_sync, &rdev->flags); 5510 clear_bit(In_sync, &rdev->flags);
@@ -5490,6 +5516,7 @@ static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)
5490 break; 5516 break;
5491 } 5517 }
5492 } 5518 }
5519out:
5493 print_raid5_conf(conf); 5520 print_raid5_conf(conf);
5494 return err; 5521 return err;
5495} 5522}
diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c
index 00a67326c193..39eab73b01ae 100644
--- a/drivers/media/dvb/dvb-core/dvbdev.c
+++ b/drivers/media/dvb/dvb-core/dvbdev.c
@@ -243,6 +243,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
243 if (minor == MAX_DVB_MINORS) { 243 if (minor == MAX_DVB_MINORS) {
244 kfree(dvbdevfops); 244 kfree(dvbdevfops);
245 kfree(dvbdev); 245 kfree(dvbdev);
246 up_write(&minor_rwsem);
246 mutex_unlock(&dvbdev_register_lock); 247 mutex_unlock(&dvbdev_register_lock);
247 return -EINVAL; 248 return -EINVAL;
248 } 249 }
diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c
index 342c2c8c1ddf..54ee34872d14 100644
--- a/drivers/media/rc/winbond-cir.c
+++ b/drivers/media/rc/winbond-cir.c
@@ -232,7 +232,7 @@ MODULE_PARM_DESC(invert, "Invert the signal from the IR receiver");
232 232
233static bool txandrx; /* default = 0 */ 233static bool txandrx; /* default = 0 */
234module_param(txandrx, bool, 0444); 234module_param(txandrx, bool, 0444);
235MODULE_PARM_DESC(invert, "Allow simultaneous TX and RX"); 235MODULE_PARM_DESC(txandrx, "Allow simultaneous TX and RX");
236 236
237static unsigned int wake_sc = 0x800F040C; 237static unsigned int wake_sc = 0x800F040C;
238module_param(wake_sc, uint, 0644); 238module_param(wake_sc, uint, 0644);
@@ -1032,6 +1032,8 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id)
1032 data->dev->tx_ir = wbcir_tx; 1032 data->dev->tx_ir = wbcir_tx;
1033 data->dev->priv = data; 1033 data->dev->priv = data;
1034 data->dev->dev.parent = &device->dev; 1034 data->dev->dev.parent = &device->dev;
1035 data->dev->timeout = MS_TO_NS(100);
1036 data->dev->allowed_protos = RC_TYPE_ALL;
1035 1037
1036 if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) { 1038 if (!request_region(data->wbase, WAKEUP_IOMEM_LEN, DRVNAME)) {
1037 dev_err(dev, "Region 0x%lx-0x%lx already in use!\n", 1039 dev_err(dev, "Region 0x%lx-0x%lx already in use!\n",
diff --git a/drivers/media/video/cx231xx/cx231xx-audio.c b/drivers/media/video/cx231xx/cx231xx-audio.c
index 068f78dc5d13..b4c99c7270cf 100644
--- a/drivers/media/video/cx231xx/cx231xx-audio.c
+++ b/drivers/media/video/cx231xx/cx231xx-audio.c
@@ -307,7 +307,7 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
307 urb->context = dev; 307 urb->context = dev;
308 urb->pipe = usb_rcvisocpipe(dev->udev, 308 urb->pipe = usb_rcvisocpipe(dev->udev,
309 dev->adev.end_point_addr); 309 dev->adev.end_point_addr);
310 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; 310 urb->transfer_flags = URB_ISO_ASAP;
311 urb->transfer_buffer = dev->adev.transfer_buffer[i]; 311 urb->transfer_buffer = dev->adev.transfer_buffer[i];
312 urb->interval = 1; 312 urb->interval = 1;
313 urb->complete = cx231xx_audio_isocirq; 313 urb->complete = cx231xx_audio_isocirq;
@@ -368,7 +368,7 @@ static int cx231xx_init_audio_bulk(struct cx231xx *dev)
368 urb->context = dev; 368 urb->context = dev;
369 urb->pipe = usb_rcvbulkpipe(dev->udev, 369 urb->pipe = usb_rcvbulkpipe(dev->udev,
370 dev->adev.end_point_addr); 370 dev->adev.end_point_addr);
371 urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 371 urb->transfer_flags = 0;
372 urb->transfer_buffer = dev->adev.transfer_buffer[i]; 372 urb->transfer_buffer = dev->adev.transfer_buffer[i];
373 urb->complete = cx231xx_audio_bulkirq; 373 urb->complete = cx231xx_audio_bulkirq;
374 urb->transfer_buffer_length = sb_size; 374 urb->transfer_buffer_length = sb_size;
diff --git a/drivers/media/video/cx231xx/cx231xx-vbi.c b/drivers/media/video/cx231xx/cx231xx-vbi.c
index 3d15314e1f88..ac7db52f404f 100644
--- a/drivers/media/video/cx231xx/cx231xx-vbi.c
+++ b/drivers/media/video/cx231xx/cx231xx-vbi.c
@@ -448,7 +448,7 @@ int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,
448 return -ENOMEM; 448 return -ENOMEM;
449 } 449 }
450 dev->vbi_mode.bulk_ctl.urb[i] = urb; 450 dev->vbi_mode.bulk_ctl.urb[i] = urb;
451 urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; 451 urb->transfer_flags = 0;
452 452
453 dev->vbi_mode.bulk_ctl.transfer_buffer[i] = 453 dev->vbi_mode.bulk_ctl.transfer_buffer[i] =
454 kzalloc(sb_size, GFP_KERNEL); 454 kzalloc(sb_size, GFP_KERNEL);
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index 13739e002a63..080e11157e5f 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -127,22 +127,37 @@ struct cx23885_board cx23885_boards[] = {
127 }, 127 },
128 [CX23885_BOARD_HAUPPAUGE_HVR1250] = { 128 [CX23885_BOARD_HAUPPAUGE_HVR1250] = {
129 .name = "Hauppauge WinTV-HVR1250", 129 .name = "Hauppauge WinTV-HVR1250",
130 .porta = CX23885_ANALOG_VIDEO,
130 .portc = CX23885_MPEG_DVB, 131 .portc = CX23885_MPEG_DVB,
132#ifdef MT2131_NO_ANALOG_SUPPORT_YET
133 .tuner_type = TUNER_PHILIPS_TDA8290,
134 .tuner_addr = 0x42, /* 0x84 >> 1 */
135 .tuner_bus = 1,
136#endif
137 .force_bff = 1,
131 .input = {{ 138 .input = {{
139#ifdef MT2131_NO_ANALOG_SUPPORT_YET
132 .type = CX23885_VMUX_TELEVISION, 140 .type = CX23885_VMUX_TELEVISION,
133 .vmux = 0, 141 .vmux = CX25840_VIN7_CH3 |
142 CX25840_VIN5_CH2 |
143 CX25840_VIN2_CH1,
144 .amux = CX25840_AUDIO8,
134 .gpio0 = 0xff00, 145 .gpio0 = 0xff00,
135 }, { 146 }, {
136 .type = CX23885_VMUX_DEBUG, 147#endif
137 .vmux = 0,
138 .gpio0 = 0xff01,
139 }, {
140 .type = CX23885_VMUX_COMPOSITE1, 148 .type = CX23885_VMUX_COMPOSITE1,
141 .vmux = 1, 149 .vmux = CX25840_VIN7_CH3 |
150 CX25840_VIN4_CH2 |
151 CX25840_VIN6_CH1,
152 .amux = CX25840_AUDIO7,
142 .gpio0 = 0xff02, 153 .gpio0 = 0xff02,
143 }, { 154 }, {
144 .type = CX23885_VMUX_SVIDEO, 155 .type = CX23885_VMUX_SVIDEO,
145 .vmux = 2, 156 .vmux = CX25840_VIN7_CH3 |
157 CX25840_VIN4_CH2 |
158 CX25840_VIN8_CH1 |
159 CX25840_SVIDEO_ON,
160 .amux = CX25840_AUDIO7,
146 .gpio0 = 0xff02, 161 .gpio0 = 0xff02,
147 } }, 162 } },
148 }, 163 },
@@ -267,7 +282,55 @@ struct cx23885_board cx23885_boards[] = {
267 }, 282 },
268 [CX23885_BOARD_HAUPPAUGE_HVR1255] = { 283 [CX23885_BOARD_HAUPPAUGE_HVR1255] = {
269 .name = "Hauppauge WinTV-HVR1255", 284 .name = "Hauppauge WinTV-HVR1255",
285 .porta = CX23885_ANALOG_VIDEO,
286 .portc = CX23885_MPEG_DVB,
287 .tuner_type = TUNER_ABSENT,
288 .tuner_addr = 0x42, /* 0x84 >> 1 */
289 .force_bff = 1,
290 .input = {{
291 .type = CX23885_VMUX_TELEVISION,
292 .vmux = CX25840_VIN7_CH3 |
293 CX25840_VIN5_CH2 |
294 CX25840_VIN2_CH1 |
295 CX25840_DIF_ON,
296 .amux = CX25840_AUDIO8,
297 }, {
298 .type = CX23885_VMUX_COMPOSITE1,
299 .vmux = CX25840_VIN7_CH3 |
300 CX25840_VIN4_CH2 |
301 CX25840_VIN6_CH1,
302 .amux = CX25840_AUDIO7,
303 }, {
304 .type = CX23885_VMUX_SVIDEO,
305 .vmux = CX25840_VIN7_CH3 |
306 CX25840_VIN4_CH2 |
307 CX25840_VIN8_CH1 |
308 CX25840_SVIDEO_ON,
309 .amux = CX25840_AUDIO7,
310 } },
311 },
312 [CX23885_BOARD_HAUPPAUGE_HVR1255_22111] = {
313 .name = "Hauppauge WinTV-HVR1255",
314 .porta = CX23885_ANALOG_VIDEO,
270 .portc = CX23885_MPEG_DVB, 315 .portc = CX23885_MPEG_DVB,
316 .tuner_type = TUNER_ABSENT,
317 .tuner_addr = 0x42, /* 0x84 >> 1 */
318 .force_bff = 1,
319 .input = {{
320 .type = CX23885_VMUX_TELEVISION,
321 .vmux = CX25840_VIN7_CH3 |
322 CX25840_VIN5_CH2 |
323 CX25840_VIN2_CH1 |
324 CX25840_DIF_ON,
325 .amux = CX25840_AUDIO8,
326 }, {
327 .type = CX23885_VMUX_SVIDEO,
328 .vmux = CX25840_VIN7_CH3 |
329 CX25840_VIN4_CH2 |
330 CX25840_VIN8_CH1 |
331 CX25840_SVIDEO_ON,
332 .amux = CX25840_AUDIO7,
333 } },
271 }, 334 },
272 [CX23885_BOARD_HAUPPAUGE_HVR1210] = { 335 [CX23885_BOARD_HAUPPAUGE_HVR1210] = {
273 .name = "Hauppauge WinTV-HVR1210", 336 .name = "Hauppauge WinTV-HVR1210",
@@ -624,7 +687,7 @@ struct cx23885_subid cx23885_subids[] = {
624 }, { 687 }, {
625 .subvendor = 0x0070, 688 .subvendor = 0x0070,
626 .subdevice = 0x2259, 689 .subdevice = 0x2259,
627 .card = CX23885_BOARD_HAUPPAUGE_HVR1255, 690 .card = CX23885_BOARD_HAUPPAUGE_HVR1255_22111,
628 }, { 691 }, {
629 .subvendor = 0x0070, 692 .subvendor = 0x0070,
630 .subdevice = 0x2291, 693 .subdevice = 0x2291,
@@ -900,7 +963,7 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg)
900 struct cx23885_dev *dev = port->dev; 963 struct cx23885_dev *dev = port->dev;
901 u32 bitmask = 0; 964 u32 bitmask = 0;
902 965
903 if (command == XC2028_RESET_CLK) 966 if ((command == XC2028_RESET_CLK) || (command == XC2028_I2C_FLUSH))
904 return 0; 967 return 0;
905 968
906 if (command != 0) { 969 if (command != 0) {
@@ -1130,6 +1193,7 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
1130 case CX23885_BOARD_HAUPPAUGE_HVR1270: 1193 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1131 case CX23885_BOARD_HAUPPAUGE_HVR1275: 1194 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1132 case CX23885_BOARD_HAUPPAUGE_HVR1255: 1195 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1196 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1133 case CX23885_BOARD_HAUPPAUGE_HVR1210: 1197 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1134 /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */ 1198 /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */
1135 /* GPIO-6 I2C Gate which can isolate the demod from the bus */ 1199 /* GPIO-6 I2C Gate which can isolate the demod from the bus */
@@ -1267,6 +1331,7 @@ int cx23885_ir_init(struct cx23885_dev *dev)
1267 case CX23885_BOARD_HAUPPAUGE_HVR1400: 1331 case CX23885_BOARD_HAUPPAUGE_HVR1400:
1268 case CX23885_BOARD_HAUPPAUGE_HVR1275: 1332 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1269 case CX23885_BOARD_HAUPPAUGE_HVR1255: 1333 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1334 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1270 case CX23885_BOARD_HAUPPAUGE_HVR1210: 1335 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1271 /* FIXME: Implement me */ 1336 /* FIXME: Implement me */
1272 break; 1337 break;
@@ -1424,6 +1489,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1424 case CX23885_BOARD_HAUPPAUGE_HVR1270: 1489 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1425 case CX23885_BOARD_HAUPPAUGE_HVR1275: 1490 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1426 case CX23885_BOARD_HAUPPAUGE_HVR1255: 1491 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1492 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1427 case CX23885_BOARD_HAUPPAUGE_HVR1210: 1493 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1428 case CX23885_BOARD_HAUPPAUGE_HVR1850: 1494 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1429 case CX23885_BOARD_HAUPPAUGE_HVR1290: 1495 case CX23885_BOARD_HAUPPAUGE_HVR1290:
@@ -1511,6 +1577,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1511 case CX23885_BOARD_HAUPPAUGE_HVR1270: 1577 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1512 case CX23885_BOARD_HAUPPAUGE_HVR1275: 1578 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1513 case CX23885_BOARD_HAUPPAUGE_HVR1255: 1579 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1580 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1514 case CX23885_BOARD_HAUPPAUGE_HVR1210: 1581 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1515 case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 1582 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
1516 case CX23885_BOARD_HAUPPAUGE_HVR1290: 1583 case CX23885_BOARD_HAUPPAUGE_HVR1290:
@@ -1526,10 +1593,10 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1526 */ 1593 */
1527 switch (dev->board) { 1594 switch (dev->board) {
1528 case CX23885_BOARD_TEVII_S470: 1595 case CX23885_BOARD_TEVII_S470:
1529 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1530 /* Currently only enabled for the integrated IR controller */ 1596 /* Currently only enabled for the integrated IR controller */
1531 if (!enable_885_ir) 1597 if (!enable_885_ir)
1532 break; 1598 break;
1599 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1533 case CX23885_BOARD_HAUPPAUGE_HVR1800: 1600 case CX23885_BOARD_HAUPPAUGE_HVR1800:
1534 case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 1601 case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
1535 case CX23885_BOARD_HAUPPAUGE_HVR1700: 1602 case CX23885_BOARD_HAUPPAUGE_HVR1700:
@@ -1539,6 +1606,8 @@ void cx23885_card_setup(struct cx23885_dev *dev)
1539 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 1606 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
1540 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 1607 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
1541 case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 1608 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
1609 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1610 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1542 case CX23885_BOARD_HAUPPAUGE_HVR1270: 1611 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1543 case CX23885_BOARD_HAUPPAUGE_HVR1850: 1612 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1544 case CX23885_BOARD_MYGICA_X8506: 1613 case CX23885_BOARD_MYGICA_X8506:
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index a80a92c47455..cd542684ba02 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -712,6 +712,7 @@ static int dvb_register(struct cx23885_tsport *port)
712 } 712 }
713 break; 713 break;
714 case CX23885_BOARD_HAUPPAUGE_HVR1255: 714 case CX23885_BOARD_HAUPPAUGE_HVR1255:
715 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
715 i2c_bus = &dev->i2c_bus[0]; 716 i2c_bus = &dev->i2c_bus[0];
716 fe0->dvb.frontend = dvb_attach(s5h1411_attach, 717 fe0->dvb.frontend = dvb_attach(s5h1411_attach,
717 &hcw_s5h1411_config, 718 &hcw_s5h1411_config,
@@ -721,6 +722,11 @@ static int dvb_register(struct cx23885_tsport *port)
721 0x60, &dev->i2c_bus[1].i2c_adap, 722 0x60, &dev->i2c_bus[1].i2c_adap,
722 &hauppauge_tda18271_config); 723 &hauppauge_tda18271_config);
723 } 724 }
725
726 tda18271_attach(&dev->ts1.analog_fe,
727 0x60, &dev->i2c_bus[1].i2c_adap,
728 &hauppauge_tda18271_config);
729
724 break; 730 break;
725 case CX23885_BOARD_HAUPPAUGE_HVR1800: 731 case CX23885_BOARD_HAUPPAUGE_HVR1800:
726 i2c_bus = &dev->i2c_bus[0]; 732 i2c_bus = &dev->i2c_bus[0];
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c
index c654bdc7ccb2..22f8e7fbd665 100644
--- a/drivers/media/video/cx23885/cx23885-video.c
+++ b/drivers/media/video/cx23885/cx23885-video.c
@@ -505,6 +505,9 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
505 505
506 if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1800) || 506 if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1800) ||
507 (dev->board == CX23885_BOARD_MPX885) || 507 (dev->board == CX23885_BOARD_MPX885) ||
508 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1250) ||
509 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) ||
510 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) ||
508 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850)) { 511 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850)) {
509 /* Configure audio routing */ 512 /* Configure audio routing */
510 v4l2_subdev_call(dev->sd_cx25840, audio, s_routing, 513 v4l2_subdev_call(dev->sd_cx25840, audio, s_routing,
@@ -1578,7 +1581,9 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
1578 1581
1579 fe = vfe->dvb.frontend; 1582 fe = vfe->dvb.frontend;
1580 1583
1581 if (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) 1584 if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) ||
1585 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) ||
1586 (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111))
1582 fe = &dev->ts1.analog_fe; 1587 fe = &dev->ts1.analog_fe;
1583 1588
1584 if (fe && fe->ops.tuner_ops.set_analog_params) { 1589 if (fe && fe->ops.tuner_ops.set_analog_params) {
@@ -1608,6 +1613,8 @@ int cx23885_set_frequency(struct file *file, void *priv,
1608 int ret; 1613 int ret;
1609 1614
1610 switch (dev->board) { 1615 switch (dev->board) {
1616 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1617 case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
1611 case CX23885_BOARD_HAUPPAUGE_HVR1850: 1618 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1612 ret = cx23885_set_freq_via_ops(dev, f); 1619 ret = cx23885_set_freq_via_ops(dev, f);
1613 break; 1620 break;
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index d884784a1c85..13c37ec07ae7 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -90,6 +90,7 @@
90#define CX23885_BOARD_MYGICA_X8507 33 90#define CX23885_BOARD_MYGICA_X8507 33
91#define CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL 34 91#define CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL 34
92#define CX23885_BOARD_TEVII_S471 35 92#define CX23885_BOARD_TEVII_S471 35
93#define CX23885_BOARD_HAUPPAUGE_HVR1255_22111 36
93 94
94#define GPIO_0 0x00000001 95#define GPIO_0 0x00000001
95#define GPIO_1 0x00000002 96#define GPIO_1 0x00000002
diff --git a/drivers/media/video/cx25821/cx25821-core.c b/drivers/media/video/cx25821/cx25821-core.c
index 83c1aa6b2e6c..f11f6f07e915 100644
--- a/drivers/media/video/cx25821/cx25821-core.c
+++ b/drivers/media/video/cx25821/cx25821-core.c
@@ -904,9 +904,6 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
904 list_add_tail(&dev->devlist, &cx25821_devlist); 904 list_add_tail(&dev->devlist, &cx25821_devlist);
905 mutex_unlock(&cx25821_devlist_mutex); 905 mutex_unlock(&cx25821_devlist_mutex);
906 906
907 strcpy(cx25821_boards[UNKNOWN_BOARD].name, "unknown");
908 strcpy(cx25821_boards[CX25821_BOARD].name, "cx25821");
909
910 if (dev->pci->device != 0x8210) { 907 if (dev->pci->device != 0x8210) {
911 pr_info("%s(): Exiting. Incorrect Hardware device = 0x%02x\n", 908 pr_info("%s(): Exiting. Incorrect Hardware device = 0x%02x\n",
912 __func__, dev->pci->device); 909 __func__, dev->pci->device);
diff --git a/drivers/media/video/cx25821/cx25821.h b/drivers/media/video/cx25821/cx25821.h
index b9aa801b00a7..029f2934a6d8 100644
--- a/drivers/media/video/cx25821/cx25821.h
+++ b/drivers/media/video/cx25821/cx25821.h
@@ -187,7 +187,7 @@ enum port {
187}; 187};
188 188
189struct cx25821_board { 189struct cx25821_board {
190 char *name; 190 const char *name;
191 enum port porta; 191 enum port porta;
192 enum port portb; 192 enum port portb;
193 enum port portc; 193 enum port portc;
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index fc1ff69cffd0..d8eac3e30a7e 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -84,7 +84,7 @@ MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
84 84
85 85
86/* ----------------------------------------------------------------------- */ 86/* ----------------------------------------------------------------------- */
87static void cx23885_std_setup(struct i2c_client *client); 87static void cx23888_std_setup(struct i2c_client *client);
88 88
89int cx25840_write(struct i2c_client *client, u16 addr, u8 value) 89int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
90{ 90{
@@ -638,10 +638,13 @@ static void cx23885_initialize(struct i2c_client *client)
638 finish_wait(&state->fw_wait, &wait); 638 finish_wait(&state->fw_wait, &wait);
639 destroy_workqueue(q); 639 destroy_workqueue(q);
640 640
641 /* Call the cx23885 specific std setup func, we no longer rely on 641 /* Call the cx23888 specific std setup func, we no longer rely on
642 * the generic cx24840 func. 642 * the generic cx24840 func.
643 */ 643 */
644 cx23885_std_setup(client); 644 if (is_cx23888(state))
645 cx23888_std_setup(client);
646 else
647 cx25840_std_setup(client);
645 648
646 /* (re)set input */ 649 /* (re)set input */
647 set_input(client, state->vid_input, state->aud_input); 650 set_input(client, state->vid_input, state->aud_input);
@@ -1103,9 +1106,23 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
1103 1106
1104 cx25840_write4(client, 0x410, 0xffff0dbf); 1107 cx25840_write4(client, 0x410, 0xffff0dbf);
1105 cx25840_write4(client, 0x414, 0x00137d03); 1108 cx25840_write4(client, 0x414, 0x00137d03);
1106 cx25840_write4(client, 0x418, 0x01008080); 1109
1110 /* on the 887, 0x418 is HSCALE_CTRL, on the 888 it is
1111 CHROMA_CTRL */
1112 if (is_cx23888(state))
1113 cx25840_write4(client, 0x418, 0x01008080);
1114 else
1115 cx25840_write4(client, 0x418, 0x01000000);
1116
1107 cx25840_write4(client, 0x41c, 0x00000000); 1117 cx25840_write4(client, 0x41c, 0x00000000);
1108 cx25840_write4(client, 0x420, 0x001c3e0f); 1118
1119 /* on the 887, 0x420 is CHROMA_CTRL, on the 888 it is
1120 CRUSH_CTRL */
1121 if (is_cx23888(state))
1122 cx25840_write4(client, 0x420, 0x001c3e0f);
1123 else
1124 cx25840_write4(client, 0x420, 0x001c8282);
1125
1109 cx25840_write4(client, 0x42c, 0x42600000); 1126 cx25840_write4(client, 0x42c, 0x42600000);
1110 cx25840_write4(client, 0x430, 0x0000039b); 1127 cx25840_write4(client, 0x430, 0x0000039b);
1111 cx25840_write4(client, 0x438, 0x00000000); 1128 cx25840_write4(client, 0x438, 0x00000000);
@@ -1233,7 +1250,7 @@ static int set_input(struct i2c_client *client, enum cx25840_video_input vid_inp
1233 cx25840_write4(client, 0x8d0, 0x1f063870); 1250 cx25840_write4(client, 0x8d0, 0x1f063870);
1234 } 1251 }
1235 1252
1236 if (is_cx2388x(state)) { 1253 if (is_cx23888(state)) {
1237 /* HVR1850 */ 1254 /* HVR1850 */
1238 /* AUD_IO_CTRL - I2S Input, Parallel1*/ 1255 /* AUD_IO_CTRL - I2S Input, Parallel1*/
1239 /* - Channel 1 src - Parallel1 (Merlin out) */ 1256 /* - Channel 1 src - Parallel1 (Merlin out) */
@@ -1298,8 +1315,8 @@ static int set_v4lstd(struct i2c_client *client)
1298 } 1315 }
1299 cx25840_and_or(client, 0x400, ~0xf, fmt); 1316 cx25840_and_or(client, 0x400, ~0xf, fmt);
1300 cx25840_and_or(client, 0x403, ~0x3, pal_m); 1317 cx25840_and_or(client, 0x403, ~0x3, pal_m);
1301 if (is_cx2388x(state)) 1318 if (is_cx23888(state))
1302 cx23885_std_setup(client); 1319 cx23888_std_setup(client);
1303 else 1320 else
1304 cx25840_std_setup(client); 1321 cx25840_std_setup(client);
1305 if (!is_cx2583x(state)) 1322 if (!is_cx2583x(state))
@@ -1312,6 +1329,7 @@ static int set_v4lstd(struct i2c_client *client)
1312static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl) 1329static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
1313{ 1330{
1314 struct v4l2_subdev *sd = to_sd(ctrl); 1331 struct v4l2_subdev *sd = to_sd(ctrl);
1332 struct cx25840_state *state = to_state(sd);
1315 struct i2c_client *client = v4l2_get_subdevdata(sd); 1333 struct i2c_client *client = v4l2_get_subdevdata(sd);
1316 1334
1317 switch (ctrl->id) { 1335 switch (ctrl->id) {
@@ -1324,12 +1342,20 @@ static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
1324 break; 1342 break;
1325 1343
1326 case V4L2_CID_SATURATION: 1344 case V4L2_CID_SATURATION:
1327 cx25840_write(client, 0x420, ctrl->val << 1); 1345 if (is_cx23888(state)) {
1328 cx25840_write(client, 0x421, ctrl->val << 1); 1346 cx25840_write(client, 0x418, ctrl->val << 1);
1347 cx25840_write(client, 0x419, ctrl->val << 1);
1348 } else {
1349 cx25840_write(client, 0x420, ctrl->val << 1);
1350 cx25840_write(client, 0x421, ctrl->val << 1);
1351 }
1329 break; 1352 break;
1330 1353
1331 case V4L2_CID_HUE: 1354 case V4L2_CID_HUE:
1332 cx25840_write(client, 0x422, ctrl->val); 1355 if (is_cx23888(state))
1356 cx25840_write(client, 0x41a, ctrl->val);
1357 else
1358 cx25840_write(client, 0x422, ctrl->val);
1333 break; 1359 break;
1334 1360
1335 default: 1361 default:
@@ -1354,11 +1380,21 @@ static int cx25840_s_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt
1354 fmt->field = V4L2_FIELD_INTERLACED; 1380 fmt->field = V4L2_FIELD_INTERLACED;
1355 fmt->colorspace = V4L2_COLORSPACE_SMPTE170M; 1381 fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
1356 1382
1357 Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4; 1383 if (is_cx23888(state)) {
1358 Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4; 1384 Vsrc = (cx25840_read(client, 0x42a) & 0x3f) << 4;
1385 Vsrc |= (cx25840_read(client, 0x429) & 0xf0) >> 4;
1386 } else {
1387 Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4;
1388 Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4;
1389 }
1359 1390
1360 Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4; 1391 if (is_cx23888(state)) {
1361 Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4; 1392 Hsrc = (cx25840_read(client, 0x426) & 0x3f) << 4;
1393 Hsrc |= (cx25840_read(client, 0x425) & 0xf0) >> 4;
1394 } else {
1395 Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4;
1396 Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4;
1397 }
1362 1398
1363 Vlines = fmt->height + (is_50Hz ? 4 : 7); 1399 Vlines = fmt->height + (is_50Hz ? 4 : 7);
1364 1400
@@ -1782,8 +1818,8 @@ static int cx25840_s_video_routing(struct v4l2_subdev *sd,
1782 struct cx25840_state *state = to_state(sd); 1818 struct cx25840_state *state = to_state(sd);
1783 struct i2c_client *client = v4l2_get_subdevdata(sd); 1819 struct i2c_client *client = v4l2_get_subdevdata(sd);
1784 1820
1785 if (is_cx2388x(state)) 1821 if (is_cx23888(state))
1786 cx23885_std_setup(client); 1822 cx23888_std_setup(client);
1787 1823
1788 return set_input(client, input, state->aud_input); 1824 return set_input(client, input, state->aud_input);
1789} 1825}
@@ -1794,8 +1830,8 @@ static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
1794 struct cx25840_state *state = to_state(sd); 1830 struct cx25840_state *state = to_state(sd);
1795 struct i2c_client *client = v4l2_get_subdevdata(sd); 1831 struct i2c_client *client = v4l2_get_subdevdata(sd);
1796 1832
1797 if (is_cx2388x(state)) 1833 if (is_cx23888(state))
1798 cx23885_std_setup(client); 1834 cx23888_std_setup(client);
1799 return set_input(client, state->vid_input, input); 1835 return set_input(client, state->vid_input, input);
1800} 1836}
1801 1837
@@ -4939,7 +4975,7 @@ void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
4939 } 4975 }
4940} 4976}
4941 4977
4942static void cx23885_std_setup(struct i2c_client *client) 4978static void cx23888_std_setup(struct i2c_client *client)
4943{ 4979{
4944 struct cx25840_state *state = to_state(i2c_get_clientdata(client)); 4980 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
4945 v4l2_std_id std = state->std; 4981 v4l2_std_id std = state->std;
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 92da7c28b6f0..862c6575c557 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -2893,7 +2893,7 @@ static void request_module_async(struct work_struct *work)
2893 2893
2894 if (dev->board.has_dvb) 2894 if (dev->board.has_dvb)
2895 request_module("em28xx-dvb"); 2895 request_module("em28xx-dvb");
2896 if (dev->board.has_ir_i2c && !disable_ir) 2896 if (dev->board.ir_codes && !disable_ir)
2897 request_module("em28xx-rc"); 2897 request_module("em28xx-rc");
2898} 2898}
2899 2899
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c
index 6c31e46a1fd2..b9c6f17eabb2 100644
--- a/drivers/media/video/gspca/sn9c20x.c
+++ b/drivers/media/video/gspca/sn9c20x.c
@@ -2070,10 +2070,13 @@ static int sd_start(struct gspca_dev *gspca_dev)
2070 set_gamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma)); 2070 set_gamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
2071 set_redblue(gspca_dev, v4l2_ctrl_g_ctrl(sd->blue), 2071 set_redblue(gspca_dev, v4l2_ctrl_g_ctrl(sd->blue),
2072 v4l2_ctrl_g_ctrl(sd->red)); 2072 v4l2_ctrl_g_ctrl(sd->red));
2073 set_gain(gspca_dev, v4l2_ctrl_g_ctrl(sd->gain)); 2073 if (sd->gain)
2074 set_exposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure)); 2074 set_gain(gspca_dev, v4l2_ctrl_g_ctrl(sd->gain));
2075 set_hvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip), 2075 if (sd->exposure)
2076 v4l2_ctrl_g_ctrl(sd->vflip)); 2076 set_exposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure));
2077 if (sd->hflip)
2078 set_hvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip),
2079 v4l2_ctrl_g_ctrl(sd->vflip));
2077 2080
2078 reg_w1(gspca_dev, 0x1007, 0x20); 2081 reg_w1(gspca_dev, 0x1007, 0x20);
2079 reg_w1(gspca_dev, 0x1061, 0x03); 2082 reg_w1(gspca_dev, 0x1061, 0x03);
@@ -2176,7 +2179,7 @@ static void sd_dqcallback(struct gspca_dev *gspca_dev)
2176 struct sd *sd = (struct sd *) gspca_dev; 2179 struct sd *sd = (struct sd *) gspca_dev;
2177 int avg_lum; 2180 int avg_lum;
2178 2181
2179 if (!v4l2_ctrl_g_ctrl(sd->autogain)) 2182 if (sd->autogain == NULL || !v4l2_ctrl_g_ctrl(sd->autogain))
2180 return; 2183 return;
2181 2184
2182 avg_lum = atomic_read(&sd->avg_lum); 2185 avg_lum = atomic_read(&sd->avg_lum);
diff --git a/drivers/media/video/mx2_camera.c b/drivers/media/video/mx2_camera.c
index 41f9a254b245..637bde8aca28 100644
--- a/drivers/media/video/mx2_camera.c
+++ b/drivers/media/video/mx2_camera.c
@@ -83,6 +83,7 @@
83#define CSICR1_INV_DATA (1 << 3) 83#define CSICR1_INV_DATA (1 << 3)
84#define CSICR1_INV_PCLK (1 << 2) 84#define CSICR1_INV_PCLK (1 << 2)
85#define CSICR1_REDGE (1 << 1) 85#define CSICR1_REDGE (1 << 1)
86#define CSICR1_FMT_MASK (CSICR1_PACK_DIR | CSICR1_SWAP16_EN)
86 87
87#define SHIFT_STATFF_LEVEL 22 88#define SHIFT_STATFF_LEVEL 22
88#define SHIFT_RXFF_LEVEL 19 89#define SHIFT_RXFF_LEVEL 19
@@ -230,6 +231,7 @@ struct mx2_prp_cfg {
230 u32 src_pixel; 231 u32 src_pixel;
231 u32 ch1_pixel; 232 u32 ch1_pixel;
232 u32 irq_flags; 233 u32 irq_flags;
234 u32 csicr1;
233}; 235};
234 236
235/* prp resizing parameters */ 237/* prp resizing parameters */
@@ -330,6 +332,7 @@ static struct mx2_fmt_cfg mx27_emma_prp_table[] = {
330 .ch1_pixel = 0x2ca00565, /* RGB565 */ 332 .ch1_pixel = 0x2ca00565, /* RGB565 */
331 .irq_flags = PRP_INTR_RDERR | PRP_INTR_CH1WERR | 333 .irq_flags = PRP_INTR_RDERR | PRP_INTR_CH1WERR |
332 PRP_INTR_CH1FC | PRP_INTR_LBOVF, 334 PRP_INTR_CH1FC | PRP_INTR_LBOVF,
335 .csicr1 = 0,
333 } 336 }
334 }, 337 },
335 { 338 {
@@ -343,6 +346,21 @@ static struct mx2_fmt_cfg mx27_emma_prp_table[] = {
343 .irq_flags = PRP_INTR_RDERR | PRP_INTR_CH2WERR | 346 .irq_flags = PRP_INTR_RDERR | PRP_INTR_CH2WERR |
344 PRP_INTR_CH2FC | PRP_INTR_LBOVF | 347 PRP_INTR_CH2FC | PRP_INTR_LBOVF |
345 PRP_INTR_CH2OVF, 348 PRP_INTR_CH2OVF,
349 .csicr1 = CSICR1_PACK_DIR,
350 }
351 },
352 {
353 .in_fmt = V4L2_MBUS_FMT_UYVY8_2X8,
354 .out_fmt = V4L2_PIX_FMT_YUV420,
355 .cfg = {
356 .channel = 2,
357 .in_fmt = PRP_CNTL_DATA_IN_YUV422,
358 .out_fmt = PRP_CNTL_CH2_OUT_YUV420,
359 .src_pixel = 0x22000888, /* YUV422 (YUYV) */
360 .irq_flags = PRP_INTR_RDERR | PRP_INTR_CH2WERR |
361 PRP_INTR_CH2FC | PRP_INTR_LBOVF |
362 PRP_INTR_CH2OVF,
363 .csicr1 = CSICR1_SWAP16_EN,
346 } 364 }
347 }, 365 },
348}; 366};
@@ -1015,14 +1033,14 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)
1015 return ret; 1033 return ret;
1016 } 1034 }
1017 1035
1036 csicr1 = (csicr1 & ~CSICR1_FMT_MASK) | pcdev->emma_prp->cfg.csicr1;
1037
1018 if (common_flags & V4L2_MBUS_PCLK_SAMPLE_RISING) 1038 if (common_flags & V4L2_MBUS_PCLK_SAMPLE_RISING)
1019 csicr1 |= CSICR1_REDGE; 1039 csicr1 |= CSICR1_REDGE;
1020 if (common_flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH) 1040 if (common_flags & V4L2_MBUS_VSYNC_ACTIVE_HIGH)
1021 csicr1 |= CSICR1_SOF_POL; 1041 csicr1 |= CSICR1_SOF_POL;
1022 if (common_flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH) 1042 if (common_flags & V4L2_MBUS_HSYNC_ACTIVE_HIGH)
1023 csicr1 |= CSICR1_HSYNC_POL; 1043 csicr1 |= CSICR1_HSYNC_POL;
1024 if (pcdev->platform_flags & MX2_CAMERA_SWAP16)
1025 csicr1 |= CSICR1_SWAP16_EN;
1026 if (pcdev->platform_flags & MX2_CAMERA_EXT_VSYNC) 1044 if (pcdev->platform_flags & MX2_CAMERA_EXT_VSYNC)
1027 csicr1 |= CSICR1_EXT_VSYNC; 1045 csicr1 |= CSICR1_EXT_VSYNC;
1028 if (pcdev->platform_flags & MX2_CAMERA_CCIR) 1046 if (pcdev->platform_flags & MX2_CAMERA_CCIR)
@@ -1033,8 +1051,6 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)
1033 csicr1 |= CSICR1_GCLK_MODE; 1051 csicr1 |= CSICR1_GCLK_MODE;
1034 if (pcdev->platform_flags & MX2_CAMERA_INV_DATA) 1052 if (pcdev->platform_flags & MX2_CAMERA_INV_DATA)
1035 csicr1 |= CSICR1_INV_DATA; 1053 csicr1 |= CSICR1_INV_DATA;
1036 if (pcdev->platform_flags & MX2_CAMERA_PACK_DIR_MSB)
1037 csicr1 |= CSICR1_PACK_DIR;
1038 1054
1039 pcdev->csicr1 = csicr1; 1055 pcdev->csicr1 = csicr1;
1040 1056
@@ -1109,7 +1125,8 @@ static int mx2_camera_get_formats(struct soc_camera_device *icd,
1109 return 0; 1125 return 0;
1110 } 1126 }
1111 1127
1112 if (code == V4L2_MBUS_FMT_YUYV8_2X8) { 1128 if (code == V4L2_MBUS_FMT_YUYV8_2X8 ||
1129 code == V4L2_MBUS_FMT_UYVY8_2X8) {
1113 formats++; 1130 formats++;
1114 if (xlate) { 1131 if (xlate) {
1115 /* 1132 /*
diff --git a/drivers/media/video/omap3isp/isppreview.c b/drivers/media/video/omap3isp/isppreview.c
index 8a4935ecc655..dd91da26f1b0 100644
--- a/drivers/media/video/omap3isp/isppreview.c
+++ b/drivers/media/video/omap3isp/isppreview.c
@@ -888,12 +888,12 @@ static const struct preview_update update_attrs[] = {
888 preview_config_contrast, 888 preview_config_contrast,
889 NULL, 889 NULL,
890 offsetof(struct prev_params, contrast), 890 offsetof(struct prev_params, contrast),
891 0, true, 891 0, 0, true,
892 }, /* OMAP3ISP_PREV_BRIGHTNESS */ { 892 }, /* OMAP3ISP_PREV_BRIGHTNESS */ {
893 preview_config_brightness, 893 preview_config_brightness,
894 NULL, 894 NULL,
895 offsetof(struct prev_params, brightness), 895 offsetof(struct prev_params, brightness),
896 0, true, 896 0, 0, true,
897 }, 897 },
898}; 898};
899 899
@@ -1102,7 +1102,7 @@ static void preview_config_input_size(struct isp_prev_device *prev, u32 active)
1102 unsigned int elv = prev->crop.top + prev->crop.height - 1; 1102 unsigned int elv = prev->crop.top + prev->crop.height - 1;
1103 u32 features; 1103 u32 features;
1104 1104
1105 if (format->code == V4L2_MBUS_FMT_Y10_1X10) { 1105 if (format->code != V4L2_MBUS_FMT_Y10_1X10) {
1106 sph -= 2; 1106 sph -= 2;
1107 eph += 2; 1107 eph += 2;
1108 slv -= 2; 1108 slv -= 2;
diff --git a/drivers/media/video/pms.c b/drivers/media/video/pms.c
index c370c2d87c17..b4c679b3fb0f 100644
--- a/drivers/media/video/pms.c
+++ b/drivers/media/video/pms.c
@@ -26,6 +26,7 @@
26#include <linux/fs.h> 26#include <linux/fs.h>
27#include <linux/kernel.h> 27#include <linux/kernel.h>
28#include <linux/mm.h> 28#include <linux/mm.h>
29#include <linux/slab.h>
29#include <linux/ioport.h> 30#include <linux/ioport.h>
30#include <linux/init.h> 31#include <linux/init.h>
31#include <linux/mutex.h> 32#include <linux/mutex.h>
diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c
index 354574591908..725812aa0c30 100644
--- a/drivers/media/video/s5p-fimc/fimc-capture.c
+++ b/drivers/media/video/s5p-fimc/fimc-capture.c
@@ -350,7 +350,8 @@ static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *pfmt,
350 if (pixm) 350 if (pixm)
351 sizes[i] = max(size, pixm->plane_fmt[i].sizeimage); 351 sizes[i] = max(size, pixm->plane_fmt[i].sizeimage);
352 else 352 else
353 sizes[i] = size; 353 sizes[i] = max_t(u32, size, frame->payload[i]);
354
354 allocators[i] = ctx->fimc_dev->alloc_ctx; 355 allocators[i] = ctx->fimc_dev->alloc_ctx;
355 } 356 }
356 357
@@ -479,37 +480,39 @@ static int fimc_capture_set_default_format(struct fimc_dev *fimc);
479static int fimc_capture_open(struct file *file) 480static int fimc_capture_open(struct file *file)
480{ 481{
481 struct fimc_dev *fimc = video_drvdata(file); 482 struct fimc_dev *fimc = video_drvdata(file);
482 int ret = v4l2_fh_open(file); 483 int ret;
483
484 if (ret)
485 return ret;
486 484
487 dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state); 485 dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state);
488 486
489 /* Return if the corresponding video mem2mem node is already opened. */
490 if (fimc_m2m_active(fimc)) 487 if (fimc_m2m_active(fimc))
491 return -EBUSY; 488 return -EBUSY;
492 489
493 set_bit(ST_CAPT_BUSY, &fimc->state); 490 set_bit(ST_CAPT_BUSY, &fimc->state);
494 pm_runtime_get_sync(&fimc->pdev->dev); 491 ret = pm_runtime_get_sync(&fimc->pdev->dev);
492 if (ret < 0)
493 return ret;
495 494
496 if (++fimc->vid_cap.refcnt == 1) { 495 ret = v4l2_fh_open(file);
497 ret = fimc_pipeline_initialize(&fimc->pipeline, 496 if (ret)
498 &fimc->vid_cap.vfd->entity, true); 497 return ret;
499 if (ret < 0) {
500 dev_err(&fimc->pdev->dev,
501 "Video pipeline initialization failed\n");
502 pm_runtime_put_sync(&fimc->pdev->dev);
503 fimc->vid_cap.refcnt--;
504 v4l2_fh_release(file);
505 clear_bit(ST_CAPT_BUSY, &fimc->state);
506 return ret;
507 }
508 ret = fimc_capture_ctrls_create(fimc);
509 498
510 if (!ret && !fimc->vid_cap.user_subdev_api) 499 if (++fimc->vid_cap.refcnt != 1)
511 ret = fimc_capture_set_default_format(fimc); 500 return 0;
501
502 ret = fimc_pipeline_initialize(&fimc->pipeline,
503 &fimc->vid_cap.vfd->entity, true);
504 if (ret < 0) {
505 clear_bit(ST_CAPT_BUSY, &fimc->state);
506 pm_runtime_put_sync(&fimc->pdev->dev);
507 fimc->vid_cap.refcnt--;
508 v4l2_fh_release(file);
509 return ret;
512 } 510 }
511 ret = fimc_capture_ctrls_create(fimc);
512
513 if (!ret && !fimc->vid_cap.user_subdev_api)
514 ret = fimc_capture_set_default_format(fimc);
515
513 return ret; 516 return ret;
514} 517}
515 518
@@ -818,9 +821,6 @@ static int fimc_cap_g_fmt_mplane(struct file *file, void *fh,
818 struct fimc_dev *fimc = video_drvdata(file); 821 struct fimc_dev *fimc = video_drvdata(file);
819 struct fimc_ctx *ctx = fimc->vid_cap.ctx; 822 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
820 823
821 if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
822 return -EINVAL;
823
824 return fimc_fill_format(&ctx->d_frame, f); 824 return fimc_fill_format(&ctx->d_frame, f);
825} 825}
826 826
@@ -833,9 +833,6 @@ static int fimc_cap_try_fmt_mplane(struct file *file, void *fh,
833 struct v4l2_mbus_framefmt mf; 833 struct v4l2_mbus_framefmt mf;
834 struct fimc_fmt *ffmt = NULL; 834 struct fimc_fmt *ffmt = NULL;
835 835
836 if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
837 return -EINVAL;
838
839 if (pix->pixelformat == V4L2_PIX_FMT_JPEG) { 836 if (pix->pixelformat == V4L2_PIX_FMT_JPEG) {
840 fimc_capture_try_format(ctx, &pix->width, &pix->height, 837 fimc_capture_try_format(ctx, &pix->width, &pix->height,
841 NULL, &pix->pixelformat, 838 NULL, &pix->pixelformat,
@@ -887,8 +884,6 @@ static int fimc_capture_set_format(struct fimc_dev *fimc, struct v4l2_format *f)
887 struct fimc_fmt *s_fmt = NULL; 884 struct fimc_fmt *s_fmt = NULL;
888 int ret, i; 885 int ret, i;
889 886
890 if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
891 return -EINVAL;
892 if (vb2_is_busy(&fimc->vid_cap.vbq)) 887 if (vb2_is_busy(&fimc->vid_cap.vbq))
893 return -EBUSY; 888 return -EBUSY;
894 889
@@ -924,10 +919,10 @@ static int fimc_capture_set_format(struct fimc_dev *fimc, struct v4l2_format *f)
924 pix->width = mf->width; 919 pix->width = mf->width;
925 pix->height = mf->height; 920 pix->height = mf->height;
926 } 921 }
922
927 fimc_adjust_mplane_format(ff->fmt, pix->width, pix->height, pix); 923 fimc_adjust_mplane_format(ff->fmt, pix->width, pix->height, pix);
928 for (i = 0; i < ff->fmt->colplanes; i++) 924 for (i = 0; i < ff->fmt->colplanes; i++)
929 ff->payload[i] = 925 ff->payload[i] = pix->plane_fmt[i].sizeimage;
930 (pix->width * pix->height * ff->fmt->depth[i]) / 8;
931 926
932 set_frame_bounds(ff, pix->width, pix->height); 927 set_frame_bounds(ff, pix->width, pix->height);
933 /* Reset the composition rectangle if not yet configured */ 928 /* Reset the composition rectangle if not yet configured */
@@ -1045,18 +1040,22 @@ static int fimc_cap_streamon(struct file *file, void *priv,
1045{ 1040{
1046 struct fimc_dev *fimc = video_drvdata(file); 1041 struct fimc_dev *fimc = video_drvdata(file);
1047 struct fimc_pipeline *p = &fimc->pipeline; 1042 struct fimc_pipeline *p = &fimc->pipeline;
1043 struct v4l2_subdev *sd = p->subdevs[IDX_SENSOR];
1048 int ret; 1044 int ret;
1049 1045
1050 if (fimc_capture_active(fimc)) 1046 if (fimc_capture_active(fimc))
1051 return -EBUSY; 1047 return -EBUSY;
1052 1048
1053 media_entity_pipeline_start(&p->subdevs[IDX_SENSOR]->entity, 1049 ret = media_entity_pipeline_start(&sd->entity, p->m_pipeline);
1054 p->m_pipeline); 1050 if (ret < 0)
1051 return ret;
1055 1052
1056 if (fimc->vid_cap.user_subdev_api) { 1053 if (fimc->vid_cap.user_subdev_api) {
1057 ret = fimc_pipeline_validate(fimc); 1054 ret = fimc_pipeline_validate(fimc);
1058 if (ret) 1055 if (ret < 0) {
1056 media_entity_pipeline_stop(&sd->entity);
1059 return ret; 1057 return ret;
1058 }
1060 } 1059 }
1061 return vb2_streamon(&fimc->vid_cap.vbq, type); 1060 return vb2_streamon(&fimc->vid_cap.vbq, type);
1062} 1061}
diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c
index 92fc5a20fb76..a4646ca1d56f 100644
--- a/drivers/media/video/s5p-fimc/fimc-core.c
+++ b/drivers/media/video/s5p-fimc/fimc-core.c
@@ -153,7 +153,7 @@ static struct fimc_fmt fimc_formats[] = {
153 .colplanes = 2, 153 .colplanes = 2,
154 .flags = FMT_FLAGS_M2M, 154 .flags = FMT_FLAGS_M2M,
155 }, { 155 }, {
156 .name = "YUV 4:2:0 non-contiguous 2-planar, Y/CbCr", 156 .name = "YUV 4:2:0 non-contig. 2p, Y/CbCr",
157 .fourcc = V4L2_PIX_FMT_NV12M, 157 .fourcc = V4L2_PIX_FMT_NV12M,
158 .color = FIMC_FMT_YCBCR420, 158 .color = FIMC_FMT_YCBCR420,
159 .depth = { 8, 4 }, 159 .depth = { 8, 4 },
@@ -161,7 +161,7 @@ static struct fimc_fmt fimc_formats[] = {
161 .colplanes = 2, 161 .colplanes = 2,
162 .flags = FMT_FLAGS_M2M, 162 .flags = FMT_FLAGS_M2M,
163 }, { 163 }, {
164 .name = "YUV 4:2:0 non-contiguous 3-planar, Y/Cb/Cr", 164 .name = "YUV 4:2:0 non-contig. 3p, Y/Cb/Cr",
165 .fourcc = V4L2_PIX_FMT_YUV420M, 165 .fourcc = V4L2_PIX_FMT_YUV420M,
166 .color = FIMC_FMT_YCBCR420, 166 .color = FIMC_FMT_YCBCR420,
167 .depth = { 8, 2, 2 }, 167 .depth = { 8, 2, 2 },
@@ -169,7 +169,7 @@ static struct fimc_fmt fimc_formats[] = {
169 .colplanes = 3, 169 .colplanes = 3,
170 .flags = FMT_FLAGS_M2M, 170 .flags = FMT_FLAGS_M2M,
171 }, { 171 }, {
172 .name = "YUV 4:2:0 non-contiguous 2-planar, Y/CbCr, tiled", 172 .name = "YUV 4:2:0 non-contig. 2p, tiled",
173 .fourcc = V4L2_PIX_FMT_NV12MT, 173 .fourcc = V4L2_PIX_FMT_NV12MT,
174 .color = FIMC_FMT_YCBCR420, 174 .color = FIMC_FMT_YCBCR420,
175 .depth = { 8, 4 }, 175 .depth = { 8, 4 },
@@ -641,7 +641,7 @@ void fimc_ctrls_activate(struct fimc_ctx *ctx, bool active)
641 if (!ctrls->ready) 641 if (!ctrls->ready)
642 return; 642 return;
643 643
644 mutex_lock(&ctrls->handler.lock); 644 mutex_lock(ctrls->handler.lock);
645 v4l2_ctrl_activate(ctrls->rotate, active); 645 v4l2_ctrl_activate(ctrls->rotate, active);
646 v4l2_ctrl_activate(ctrls->hflip, active); 646 v4l2_ctrl_activate(ctrls->hflip, active);
647 v4l2_ctrl_activate(ctrls->vflip, active); 647 v4l2_ctrl_activate(ctrls->vflip, active);
@@ -660,7 +660,7 @@ void fimc_ctrls_activate(struct fimc_ctx *ctx, bool active)
660 ctx->hflip = 0; 660 ctx->hflip = 0;
661 ctx->vflip = 0; 661 ctx->vflip = 0;
662 } 662 }
663 mutex_unlock(&ctrls->handler.lock); 663 mutex_unlock(ctrls->handler.lock);
664} 664}
665 665
666/* Update maximum value of the alpha color control */ 666/* Update maximum value of the alpha color control */
@@ -741,8 +741,8 @@ void fimc_adjust_mplane_format(struct fimc_fmt *fmt, u32 width, u32 height,
741 pix->width = width; 741 pix->width = width;
742 742
743 for (i = 0; i < pix->num_planes; ++i) { 743 for (i = 0; i < pix->num_planes; ++i) {
744 u32 bpl = pix->plane_fmt[i].bytesperline; 744 struct v4l2_plane_pix_format *plane_fmt = &pix->plane_fmt[i];
745 u32 *sizeimage = &pix->plane_fmt[i].sizeimage; 745 u32 bpl = plane_fmt->bytesperline;
746 746
747 if (fmt->colplanes > 1 && (bpl == 0 || bpl < pix->width)) 747 if (fmt->colplanes > 1 && (bpl == 0 || bpl < pix->width))
748 bpl = pix->width; /* Planar */ 748 bpl = pix->width; /* Planar */
@@ -754,8 +754,9 @@ void fimc_adjust_mplane_format(struct fimc_fmt *fmt, u32 width, u32 height,
754 if (i == 0) /* Same bytesperline for each plane. */ 754 if (i == 0) /* Same bytesperline for each plane. */
755 bytesperline = bpl; 755 bytesperline = bpl;
756 756
757 pix->plane_fmt[i].bytesperline = bytesperline; 757 plane_fmt->bytesperline = bytesperline;
758 *sizeimage = (pix->width * pix->height * fmt->depth[i]) / 8; 758 plane_fmt->sizeimage = max((pix->width * pix->height *
759 fmt->depth[i]) / 8, plane_fmt->sizeimage);
759 } 760 }
760} 761}
761 762
diff --git a/drivers/media/video/s5p-fimc/fimc-lite.c b/drivers/media/video/s5p-fimc/fimc-lite.c
index 400d701aef04..74ff310db30c 100644
--- a/drivers/media/video/s5p-fimc/fimc-lite.c
+++ b/drivers/media/video/s5p-fimc/fimc-lite.c
@@ -451,34 +451,44 @@ static void fimc_lite_clear_event_counters(struct fimc_lite *fimc)
451static int fimc_lite_open(struct file *file) 451static int fimc_lite_open(struct file *file)
452{ 452{
453 struct fimc_lite *fimc = video_drvdata(file); 453 struct fimc_lite *fimc = video_drvdata(file);
454 int ret = v4l2_fh_open(file); 454 int ret;
455 455
456 if (ret) 456 if (mutex_lock_interruptible(&fimc->lock))
457 return ret; 457 return -ERESTARTSYS;
458 458
459 set_bit(ST_FLITE_IN_USE, &fimc->state); 459 set_bit(ST_FLITE_IN_USE, &fimc->state);
460 pm_runtime_get_sync(&fimc->pdev->dev); 460 ret = pm_runtime_get_sync(&fimc->pdev->dev);
461 if (ret < 0)
462 goto done;
461 463
462 if (++fimc->ref_count != 1 || fimc->out_path != FIMC_IO_DMA) 464 ret = v4l2_fh_open(file);
463 return ret; 465 if (ret < 0)
466 goto done;
464 467
465 ret = fimc_pipeline_initialize(&fimc->pipeline, &fimc->vfd->entity, 468 if (++fimc->ref_count == 1 && fimc->out_path == FIMC_IO_DMA) {
466 true); 469 ret = fimc_pipeline_initialize(&fimc->pipeline,
467 if (ret < 0) { 470 &fimc->vfd->entity, true);
468 v4l2_err(fimc->vfd, "Video pipeline initialization failed\n"); 471 if (ret < 0) {
469 pm_runtime_put_sync(&fimc->pdev->dev); 472 pm_runtime_put_sync(&fimc->pdev->dev);
470 fimc->ref_count--; 473 fimc->ref_count--;
471 v4l2_fh_release(file); 474 v4l2_fh_release(file);
472 clear_bit(ST_FLITE_IN_USE, &fimc->state); 475 clear_bit(ST_FLITE_IN_USE, &fimc->state);
473 } 476 }
474 477
475 fimc_lite_clear_event_counters(fimc); 478 fimc_lite_clear_event_counters(fimc);
479 }
480done:
481 mutex_unlock(&fimc->lock);
476 return ret; 482 return ret;
477} 483}
478 484
479static int fimc_lite_close(struct file *file) 485static int fimc_lite_close(struct file *file)
480{ 486{
481 struct fimc_lite *fimc = video_drvdata(file); 487 struct fimc_lite *fimc = video_drvdata(file);
488 int ret;
489
490 if (mutex_lock_interruptible(&fimc->lock))
491 return -ERESTARTSYS;
482 492
483 if (--fimc->ref_count == 0 && fimc->out_path == FIMC_IO_DMA) { 493 if (--fimc->ref_count == 0 && fimc->out_path == FIMC_IO_DMA) {
484 clear_bit(ST_FLITE_IN_USE, &fimc->state); 494 clear_bit(ST_FLITE_IN_USE, &fimc->state);
@@ -492,20 +502,39 @@ static int fimc_lite_close(struct file *file)
492 if (fimc->ref_count == 0) 502 if (fimc->ref_count == 0)
493 vb2_queue_release(&fimc->vb_queue); 503 vb2_queue_release(&fimc->vb_queue);
494 504
495 return v4l2_fh_release(file); 505 ret = v4l2_fh_release(file);
506
507 mutex_unlock(&fimc->lock);
508 return ret;
496} 509}
497 510
498static unsigned int fimc_lite_poll(struct file *file, 511static unsigned int fimc_lite_poll(struct file *file,
499 struct poll_table_struct *wait) 512 struct poll_table_struct *wait)
500{ 513{
501 struct fimc_lite *fimc = video_drvdata(file); 514 struct fimc_lite *fimc = video_drvdata(file);
502 return vb2_poll(&fimc->vb_queue, file, wait); 515 int ret;
516
517 if (mutex_lock_interruptible(&fimc->lock))
518 return POLL_ERR;
519
520 ret = vb2_poll(&fimc->vb_queue, file, wait);
521 mutex_unlock(&fimc->lock);
522
523 return ret;
503} 524}
504 525
505static int fimc_lite_mmap(struct file *file, struct vm_area_struct *vma) 526static int fimc_lite_mmap(struct file *file, struct vm_area_struct *vma)
506{ 527{
507 struct fimc_lite *fimc = video_drvdata(file); 528 struct fimc_lite *fimc = video_drvdata(file);
508 return vb2_mmap(&fimc->vb_queue, vma); 529 int ret;
530
531 if (mutex_lock_interruptible(&fimc->lock))
532 return -ERESTARTSYS;
533
534 ret = vb2_mmap(&fimc->vb_queue, vma);
535 mutex_unlock(&fimc->lock);
536
537 return ret;
509} 538}
510 539
511static const struct v4l2_file_operations fimc_lite_fops = { 540static const struct v4l2_file_operations fimc_lite_fops = {
@@ -762,7 +791,9 @@ static int fimc_lite_streamon(struct file *file, void *priv,
762 if (fimc_lite_active(fimc)) 791 if (fimc_lite_active(fimc))
763 return -EBUSY; 792 return -EBUSY;
764 793
765 media_entity_pipeline_start(&sensor->entity, p->m_pipeline); 794 ret = media_entity_pipeline_start(&sensor->entity, p->m_pipeline);
795 if (ret < 0)
796 return ret;
766 797
767 ret = fimc_pipeline_validate(fimc); 798 ret = fimc_pipeline_validate(fimc);
768 if (ret) { 799 if (ret) {
@@ -1508,7 +1539,7 @@ static int fimc_lite_suspend(struct device *dev)
1508 return 0; 1539 return 0;
1509 1540
1510 ret = fimc_lite_stop_capture(fimc, suspend); 1541 ret = fimc_lite_stop_capture(fimc, suspend);
1511 if (ret) 1542 if (ret < 0 || !fimc_lite_active(fimc))
1512 return ret; 1543 return ret;
1513 1544
1514 return fimc_pipeline_shutdown(&fimc->pipeline); 1545 return fimc_pipeline_shutdown(&fimc->pipeline);
diff --git a/drivers/media/video/s5p-fimc/fimc-mdevice.c b/drivers/media/video/s5p-fimc/fimc-mdevice.c
index 6753c45631b8..52cef4865423 100644
--- a/drivers/media/video/s5p-fimc/fimc-mdevice.c
+++ b/drivers/media/video/s5p-fimc/fimc-mdevice.c
@@ -193,9 +193,13 @@ int __fimc_pipeline_shutdown(struct fimc_pipeline *p)
193 193
194int fimc_pipeline_shutdown(struct fimc_pipeline *p) 194int fimc_pipeline_shutdown(struct fimc_pipeline *p)
195{ 195{
196 struct media_entity *me = &p->subdevs[IDX_SENSOR]->entity; 196 struct media_entity *me;
197 int ret; 197 int ret;
198 198
199 if (!p || !p->subdevs[IDX_SENSOR])
200 return -EINVAL;
201
202 me = &p->subdevs[IDX_SENSOR]->entity;
199 mutex_lock(&me->parent->graph_mutex); 203 mutex_lock(&me->parent->graph_mutex);
200 ret = __fimc_pipeline_shutdown(p); 204 ret = __fimc_pipeline_shutdown(p);
201 mutex_unlock(&me->parent->graph_mutex); 205 mutex_unlock(&me->parent->graph_mutex);
@@ -498,12 +502,12 @@ static void fimc_md_unregister_entities(struct fimc_md *fmd)
498 * @source: the source entity to create links to all fimc entities from 502 * @source: the source entity to create links to all fimc entities from
499 * @sensor: sensor subdev linked to FIMC[fimc_id] entity, may be null 503 * @sensor: sensor subdev linked to FIMC[fimc_id] entity, may be null
500 * @pad: the source entity pad index 504 * @pad: the source entity pad index
501 * @fimc_id: index of the fimc device for which link should be enabled 505 * @link_mask: bitmask of the fimc devices for which link should be enabled
502 */ 506 */
503static int __fimc_md_create_fimc_sink_links(struct fimc_md *fmd, 507static int __fimc_md_create_fimc_sink_links(struct fimc_md *fmd,
504 struct media_entity *source, 508 struct media_entity *source,
505 struct v4l2_subdev *sensor, 509 struct v4l2_subdev *sensor,
506 int pad, int fimc_id) 510 int pad, int link_mask)
507{ 511{
508 struct fimc_sensor_info *s_info; 512 struct fimc_sensor_info *s_info;
509 struct media_entity *sink; 513 struct media_entity *sink;
@@ -520,7 +524,7 @@ static int __fimc_md_create_fimc_sink_links(struct fimc_md *fmd,
520 if (!fmd->fimc[i]->variant->has_cam_if) 524 if (!fmd->fimc[i]->variant->has_cam_if)
521 continue; 525 continue;
522 526
523 flags = (i == fimc_id) ? MEDIA_LNK_FL_ENABLED : 0; 527 flags = ((1 << i) & link_mask) ? MEDIA_LNK_FL_ENABLED : 0;
524 528
525 sink = &fmd->fimc[i]->vid_cap.subdev.entity; 529 sink = &fmd->fimc[i]->vid_cap.subdev.entity;
526 ret = media_entity_create_link(source, pad, sink, 530 ret = media_entity_create_link(source, pad, sink,
@@ -552,7 +556,10 @@ static int __fimc_md_create_fimc_sink_links(struct fimc_md *fmd,
552 if (!fmd->fimc_lite[i]) 556 if (!fmd->fimc_lite[i])
553 continue; 557 continue;
554 558
555 flags = (i == fimc_id) ? MEDIA_LNK_FL_ENABLED : 0; 559 if (link_mask & (1 << (i + FIMC_MAX_DEVS)))
560 flags = MEDIA_LNK_FL_ENABLED;
561 else
562 flags = 0;
556 563
557 sink = &fmd->fimc_lite[i]->subdev.entity; 564 sink = &fmd->fimc_lite[i]->subdev.entity;
558 ret = media_entity_create_link(source, pad, sink, 565 ret = media_entity_create_link(source, pad, sink,
@@ -614,9 +621,8 @@ static int fimc_md_create_links(struct fimc_md *fmd)
614 struct s5p_fimc_isp_info *pdata; 621 struct s5p_fimc_isp_info *pdata;
615 struct fimc_sensor_info *s_info; 622 struct fimc_sensor_info *s_info;
616 struct media_entity *source, *sink; 623 struct media_entity *source, *sink;
617 int i, pad, fimc_id = 0; 624 int i, pad, fimc_id = 0, ret = 0;
618 int ret = 0; 625 u32 flags, link_mask = 0;
619 u32 flags;
620 626
621 for (i = 0; i < fmd->num_sensors; i++) { 627 for (i = 0; i < fmd->num_sensors; i++) {
622 if (fmd->sensor[i].subdev == NULL) 628 if (fmd->sensor[i].subdev == NULL)
@@ -668,19 +674,20 @@ static int fimc_md_create_links(struct fimc_md *fmd)
668 if (source == NULL) 674 if (source == NULL)
669 continue; 675 continue;
670 676
677 link_mask = 1 << fimc_id++;
671 ret = __fimc_md_create_fimc_sink_links(fmd, source, sensor, 678 ret = __fimc_md_create_fimc_sink_links(fmd, source, sensor,
672 pad, fimc_id++); 679 pad, link_mask);
673 } 680 }
674 681
675 fimc_id = 0;
676 for (i = 0; i < ARRAY_SIZE(fmd->csis); i++) { 682 for (i = 0; i < ARRAY_SIZE(fmd->csis); i++) {
677 if (fmd->csis[i].sd == NULL) 683 if (fmd->csis[i].sd == NULL)
678 continue; 684 continue;
679 source = &fmd->csis[i].sd->entity; 685 source = &fmd->csis[i].sd->entity;
680 pad = CSIS_PAD_SOURCE; 686 pad = CSIS_PAD_SOURCE;
681 687
688 link_mask = 1 << fimc_id++;
682 ret = __fimc_md_create_fimc_sink_links(fmd, source, NULL, 689 ret = __fimc_md_create_fimc_sink_links(fmd, source, NULL,
683 pad, fimc_id++); 690 pad, link_mask);
684 } 691 }
685 692
686 /* Create immutable links between each FIMC's subdev and video node */ 693 /* Create immutable links between each FIMC's subdev and video node */
@@ -734,8 +741,8 @@ static void fimc_md_put_clocks(struct fimc_md *fmd)
734} 741}
735 742
736static int __fimc_md_set_camclk(struct fimc_md *fmd, 743static int __fimc_md_set_camclk(struct fimc_md *fmd,
737 struct fimc_sensor_info *s_info, 744 struct fimc_sensor_info *s_info,
738 bool on) 745 bool on)
739{ 746{
740 struct s5p_fimc_isp_info *pdata = s_info->pdata; 747 struct s5p_fimc_isp_info *pdata = s_info->pdata;
741 struct fimc_camclk_info *camclk; 748 struct fimc_camclk_info *camclk;
@@ -744,12 +751,10 @@ static int __fimc_md_set_camclk(struct fimc_md *fmd,
744 if (WARN_ON(pdata->clk_id >= FIMC_MAX_CAMCLKS) || fmd == NULL) 751 if (WARN_ON(pdata->clk_id >= FIMC_MAX_CAMCLKS) || fmd == NULL)
745 return -EINVAL; 752 return -EINVAL;
746 753
747 if (s_info->clk_on == on)
748 return 0;
749 camclk = &fmd->camclk[pdata->clk_id]; 754 camclk = &fmd->camclk[pdata->clk_id];
750 755
751 dbg("camclk %d, f: %lu, clk: %p, on: %d", 756 dbg("camclk %d, f: %lu, use_count: %d, on: %d",
752 pdata->clk_id, pdata->clk_frequency, camclk, on); 757 pdata->clk_id, pdata->clk_frequency, camclk->use_count, on);
753 758
754 if (on) { 759 if (on) {
755 if (camclk->use_count > 0 && 760 if (camclk->use_count > 0 &&
@@ -760,11 +765,9 @@ static int __fimc_md_set_camclk(struct fimc_md *fmd,
760 clk_set_rate(camclk->clock, pdata->clk_frequency); 765 clk_set_rate(camclk->clock, pdata->clk_frequency);
761 camclk->frequency = pdata->clk_frequency; 766 camclk->frequency = pdata->clk_frequency;
762 ret = clk_enable(camclk->clock); 767 ret = clk_enable(camclk->clock);
768 dbg("Enabled camclk %d: f: %lu", pdata->clk_id,
769 clk_get_rate(camclk->clock));
763 } 770 }
764 s_info->clk_on = 1;
765 dbg("Enabled camclk %d: f: %lu", pdata->clk_id,
766 clk_get_rate(camclk->clock));
767
768 return ret; 771 return ret;
769 } 772 }
770 773
@@ -773,7 +776,6 @@ static int __fimc_md_set_camclk(struct fimc_md *fmd,
773 776
774 if (--camclk->use_count == 0) { 777 if (--camclk->use_count == 0) {
775 clk_disable(camclk->clock); 778 clk_disable(camclk->clock);
776 s_info->clk_on = 0;
777 dbg("Disabled camclk %d", pdata->clk_id); 779 dbg("Disabled camclk %d", pdata->clk_id);
778 } 780 }
779 return ret; 781 return ret;
@@ -789,8 +791,6 @@ static int __fimc_md_set_camclk(struct fimc_md *fmd,
789 * devices to which sensors can be attached, either directly or through 791 * devices to which sensors can be attached, either directly or through
790 * the MIPI CSI receiver. The clock is allowed here to be used by 792 * the MIPI CSI receiver. The clock is allowed here to be used by
791 * multiple sensors concurrently if they use same frequency. 793 * multiple sensors concurrently if they use same frequency.
792 * The per sensor subdev clk_on attribute helps to synchronize accesses
793 * to the sclk_cam clocks from the video and media device nodes.
794 * This function should only be called when the graph mutex is held. 794 * This function should only be called when the graph mutex is held.
795 */ 795 */
796int fimc_md_set_camclk(struct v4l2_subdev *sd, bool on) 796int fimc_md_set_camclk(struct v4l2_subdev *sd, bool on)
diff --git a/drivers/media/video/s5p-fimc/fimc-mdevice.h b/drivers/media/video/s5p-fimc/fimc-mdevice.h
index 3b8a3492a176..1f5dbaff5442 100644
--- a/drivers/media/video/s5p-fimc/fimc-mdevice.h
+++ b/drivers/media/video/s5p-fimc/fimc-mdevice.h
@@ -47,7 +47,6 @@ struct fimc_camclk_info {
47 * @pdata: sensor's atrributes passed as media device's platform data 47 * @pdata: sensor's atrributes passed as media device's platform data
48 * @subdev: image sensor v4l2 subdev 48 * @subdev: image sensor v4l2 subdev
49 * @host: fimc device the sensor is currently linked to 49 * @host: fimc device the sensor is currently linked to
50 * @clk_on: sclk_cam clock's state associated with this subdev
51 * 50 *
52 * This data structure applies to image sensor and the writeback subdevs. 51 * This data structure applies to image sensor and the writeback subdevs.
53 */ 52 */
@@ -55,7 +54,6 @@ struct fimc_sensor_info {
55 struct s5p_fimc_isp_info *pdata; 54 struct s5p_fimc_isp_info *pdata;
56 struct v4l2_subdev *subdev; 55 struct v4l2_subdev *subdev;
57 struct fimc_dev *host; 56 struct fimc_dev *host;
58 bool clk_on;
59}; 57};
60 58
61/** 59/**
diff --git a/drivers/media/video/s5p-mfc/s5p_mfc_dec.c b/drivers/media/video/s5p-mfc/s5p_mfc_dec.c
index 4dd32fc8fd82..feea867f318c 100644
--- a/drivers/media/video/s5p-mfc/s5p_mfc_dec.c
+++ b/drivers/media/video/s5p-mfc/s5p_mfc_dec.c
@@ -996,6 +996,7 @@ int s5p_mfc_dec_ctrls_setup(struct s5p_mfc_ctx *ctx)
996 996
997 for (i = 0; i < NUM_CTRLS; i++) { 997 for (i = 0; i < NUM_CTRLS; i++) {
998 if (IS_MFC51_PRIV(controls[i].id)) { 998 if (IS_MFC51_PRIV(controls[i].id)) {
999 memset(&cfg, 0, sizeof(struct v4l2_ctrl_config));
999 cfg.ops = &s5p_mfc_dec_ctrl_ops; 1000 cfg.ops = &s5p_mfc_dec_ctrl_ops;
1000 cfg.id = controls[i].id; 1001 cfg.id = controls[i].id;
1001 cfg.min = controls[i].minimum; 1002 cfg.min = controls[i].minimum;
diff --git a/drivers/media/video/s5p-mfc/s5p_mfc_enc.c b/drivers/media/video/s5p-mfc/s5p_mfc_enc.c
index 03d83340e7fb..158b78989b89 100644
--- a/drivers/media/video/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/video/s5p-mfc/s5p_mfc_enc.c
@@ -1773,6 +1773,7 @@ int s5p_mfc_enc_ctrls_setup(struct s5p_mfc_ctx *ctx)
1773 } 1773 }
1774 for (i = 0; i < NUM_CTRLS; i++) { 1774 for (i = 0; i < NUM_CTRLS; i++) {
1775 if (IS_MFC51_PRIV(controls[i].id)) { 1775 if (IS_MFC51_PRIV(controls[i].id)) {
1776 memset(&cfg, 0, sizeof(struct v4l2_ctrl_config));
1776 cfg.ops = &s5p_mfc_enc_ctrl_ops; 1777 cfg.ops = &s5p_mfc_enc_ctrl_ops;
1777 cfg.id = controls[i].id; 1778 cfg.id = controls[i].id;
1778 cfg.min = controls[i].minimum; 1779 cfg.min = controls[i].minimum;
diff --git a/drivers/media/video/smiapp/smiapp-core.c b/drivers/media/video/smiapp/smiapp-core.c
index e8c93c89265a..9cf5bda35fbe 100644
--- a/drivers/media/video/smiapp/smiapp-core.c
+++ b/drivers/media/video/smiapp/smiapp-core.c
@@ -31,6 +31,7 @@
31#include <linux/device.h> 31#include <linux/device.h>
32#include <linux/gpio.h> 32#include <linux/gpio.h>
33#include <linux/module.h> 33#include <linux/module.h>
34#include <linux/slab.h>
34#include <linux/regulator/consumer.h> 35#include <linux/regulator/consumer.h>
35#include <linux/slab.h> 36#include <linux/slab.h>
36#include <linux/v4l2-mediabus.h> 37#include <linux/v4l2-mediabus.h>
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
index 83dbb2ddff10..0cbada18f6f5 100644
--- a/drivers/media/video/v4l2-dev.c
+++ b/drivers/media/video/v4l2-dev.c
@@ -681,6 +681,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
681 SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings); 681 SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
682 SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings); 682 SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
683 SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings); 683 SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
684 SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
684 /* yes, really vidioc_subscribe_event */ 685 /* yes, really vidioc_subscribe_event */
685 SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event); 686 SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
686 SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event); 687 SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
diff --git a/drivers/media/video/zoran/zoran.h b/drivers/media/video/zoran/zoran.h
index d7166afc255e..ca2754a3cd63 100644
--- a/drivers/media/video/zoran/zoran.h
+++ b/drivers/media/video/zoran/zoran.h
@@ -172,8 +172,10 @@ struct zoran_jpg_settings {
172 struct v4l2_jpegcompression jpg_comp; /* JPEG-specific capture settings */ 172 struct v4l2_jpegcompression jpg_comp; /* JPEG-specific capture settings */
173}; 173};
174 174
175struct zoran_fh;
176
175struct zoran_mapping { 177struct zoran_mapping {
176 struct file *file; 178 struct zoran_fh *fh;
177 int count; 179 int count;
178}; 180};
179 181
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c
index c57310931810..c6ccdeb6d8d6 100644
--- a/drivers/media/video/zoran/zoran_driver.c
+++ b/drivers/media/video/zoran/zoran_driver.c
@@ -2811,7 +2811,7 @@ static void
2811zoran_vm_close (struct vm_area_struct *vma) 2811zoran_vm_close (struct vm_area_struct *vma)
2812{ 2812{
2813 struct zoran_mapping *map = vma->vm_private_data; 2813 struct zoran_mapping *map = vma->vm_private_data;
2814 struct zoran_fh *fh = map->file->private_data; 2814 struct zoran_fh *fh = map->fh;
2815 struct zoran *zr = fh->zr; 2815 struct zoran *zr = fh->zr;
2816 int i; 2816 int i;
2817 2817
@@ -2938,7 +2938,7 @@ zoran_mmap (struct file *file,
2938 res = -ENOMEM; 2938 res = -ENOMEM;
2939 goto mmap_unlock_and_return; 2939 goto mmap_unlock_and_return;
2940 } 2940 }
2941 map->file = file; 2941 map->fh = fh;
2942 map->count = 1; 2942 map->count = 1;
2943 2943
2944 vma->vm_ops = &zoran_vm_ops; 2944 vma->vm_ops = &zoran_vm_ops;
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index e129c820df7d..92144ed1ad46 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -286,6 +286,7 @@ config TWL6040_CORE
286 depends on I2C=y && GENERIC_HARDIRQS 286 depends on I2C=y && GENERIC_HARDIRQS
287 select MFD_CORE 287 select MFD_CORE
288 select REGMAP_I2C 288 select REGMAP_I2C
289 select IRQ_DOMAIN
289 default n 290 default n
290 help 291 help
291 Say yes here if you want support for Texas Instruments TWL6040 audio 292 Say yes here if you want support for Texas Instruments TWL6040 audio
diff --git a/drivers/mfd/ab5500-core.h b/drivers/mfd/ab5500-core.h
deleted file mode 100644
index 63b30b17e4f3..000000000000
--- a/drivers/mfd/ab5500-core.h
+++ /dev/null
@@ -1,87 +0,0 @@
1/*
2 * Copyright (C) 2011 ST-Ericsson
3 * License terms: GNU General Public License (GPL) version 2
4 * Shared definitions and data structures for the AB5500 MFD driver
5 */
6
7/* Read/write operation values. */
8#define AB5500_PERM_RD (0x01)
9#define AB5500_PERM_WR (0x02)
10
11/* Read/write permissions. */
12#define AB5500_PERM_RO (AB5500_PERM_RD)
13#define AB5500_PERM_RW (AB5500_PERM_RD | AB5500_PERM_WR)
14
15#define AB5500_MASK_BASE (0x60)
16#define AB5500_MASK_END (0x79)
17#define AB5500_CHIP_ID (0x20)
18
19/**
20 * struct ab5500_reg_range
21 * @first: the first address of the range
22 * @last: the last address of the range
23 * @perm: access permissions for the range
24 */
25struct ab5500_reg_range {
26 u8 first;
27 u8 last;
28 u8 perm;
29};
30
31/**
32 * struct ab5500_i2c_ranges
33 * @count: the number of ranges in the list
34 * @range: the list of register ranges
35 */
36struct ab5500_i2c_ranges {
37 u8 nranges;
38 u8 bankid;
39 const struct ab5500_reg_range *range;
40};
41
42/**
43 * struct ab5500_i2c_banks
44 * @count: the number of ranges in the list
45 * @range: the list of register ranges
46 */
47struct ab5500_i2c_banks {
48 u8 nbanks;
49 const struct ab5500_i2c_ranges *bank;
50};
51
52/**
53 * struct ab5500_bank
54 * @slave_addr: I2C slave_addr found in AB5500 specification
55 * @name: Documentation name of the bank. For reference
56 */
57struct ab5500_bank {
58 u8 slave_addr;
59 const char *name;
60};
61
62static const struct ab5500_bank bankinfo[AB5500_NUM_BANKS] = {
63 [AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP] = {
64 AB5500_ADDR_VIT_IO_I2C_CLK_TST_OTP, "VIT_IO_I2C_CLK_TST_OTP"},
65 [AB5500_BANK_VDDDIG_IO_I2C_CLK_TST] = {
66 AB5500_ADDR_VDDDIG_IO_I2C_CLK_TST, "VDDDIG_IO_I2C_CLK_TST"},
67 [AB5500_BANK_VDENC] = {AB5500_ADDR_VDENC, "VDENC"},
68 [AB5500_BANK_SIM_USBSIM] = {AB5500_ADDR_SIM_USBSIM, "SIM_USBSIM"},
69 [AB5500_BANK_LED] = {AB5500_ADDR_LED, "LED"},
70 [AB5500_BANK_ADC] = {AB5500_ADDR_ADC, "ADC"},
71 [AB5500_BANK_RTC] = {AB5500_ADDR_RTC, "RTC"},
72 [AB5500_BANK_STARTUP] = {AB5500_ADDR_STARTUP, "STARTUP"},
73 [AB5500_BANK_DBI_ECI] = {AB5500_ADDR_DBI_ECI, "DBI-ECI"},
74 [AB5500_BANK_CHG] = {AB5500_ADDR_CHG, "CHG"},
75 [AB5500_BANK_FG_BATTCOM_ACC] = {
76 AB5500_ADDR_FG_BATTCOM_ACC, "FG_BATCOM_ACC"},
77 [AB5500_BANK_USB] = {AB5500_ADDR_USB, "USB"},
78 [AB5500_BANK_IT] = {AB5500_ADDR_IT, "IT"},
79 [AB5500_BANK_VIBRA] = {AB5500_ADDR_VIBRA, "VIBRA"},
80 [AB5500_BANK_AUDIO_HEADSETUSB] = {
81 AB5500_ADDR_AUDIO_HEADSETUSB, "AUDIO_HEADSETUSB"},
82};
83
84int ab5500_get_register_interruptible_raw(struct ab5500 *ab, u8 bank, u8 reg,
85 u8 *value);
86int ab5500_mask_and_set_register_interruptible_raw(struct ab5500 *ab, u8 bank,
87 u8 reg, u8 bitmask, u8 bitvalues);
diff --git a/drivers/mfd/mc13xxx-spi.c b/drivers/mfd/mc13xxx-spi.c
index 3fcdab3eb8eb..03df422feb76 100644
--- a/drivers/mfd/mc13xxx-spi.c
+++ b/drivers/mfd/mc13xxx-spi.c
@@ -49,10 +49,72 @@ static struct regmap_config mc13xxx_regmap_spi_config = {
49 .reg_bits = 7, 49 .reg_bits = 7,
50 .pad_bits = 1, 50 .pad_bits = 1,
51 .val_bits = 24, 51 .val_bits = 24,
52 .write_flag_mask = 0x80,
52 53
53 .max_register = MC13XXX_NUMREGS, 54 .max_register = MC13XXX_NUMREGS,
54 55
55 .cache_type = REGCACHE_NONE, 56 .cache_type = REGCACHE_NONE,
57 .use_single_rw = 1,
58};
59
60static int mc13xxx_spi_read(void *context, const void *reg, size_t reg_size,
61 void *val, size_t val_size)
62{
63 unsigned char w[4] = { *((unsigned char *) reg), 0, 0, 0};
64 unsigned char r[4];
65 unsigned char *p = val;
66 struct device *dev = context;
67 struct spi_device *spi = to_spi_device(dev);
68 struct spi_transfer t = {
69 .tx_buf = w,
70 .rx_buf = r,
71 .len = 4,
72 };
73
74 struct spi_message m;
75 int ret;
76
77 if (val_size != 3 || reg_size != 1)
78 return -ENOTSUPP;
79
80 spi_message_init(&m);
81 spi_message_add_tail(&t, &m);
82 ret = spi_sync(spi, &m);
83
84 memcpy(p, &r[1], 3);
85
86 return ret;
87}
88
89static int mc13xxx_spi_write(void *context, const void *data, size_t count)
90{
91 struct device *dev = context;
92 struct spi_device *spi = to_spi_device(dev);
93
94 if (count != 4)
95 return -ENOTSUPP;
96
97 return spi_write(spi, data, count);
98}
99
100/*
101 * We cannot use regmap-spi generic bus implementation here.
102 * The MC13783 chip will get corrupted if CS signal is deasserted
103 * and on i.Mx31 SoC (the target SoC for MC13783 PMIC) the SPI controller
104 * has the following errata (DSPhl22960):
105 * "The CSPI negates SS when the FIFO becomes empty with
106 * SSCTL= 0. Software cannot guarantee that the FIFO will not
107 * drain because of higher priority interrupts and the
108 * non-realtime characteristics of the operating system. As a
109 * result, the SS will negate before all of the data has been
110 * transferred to/from the peripheral."
111 * We workaround this by accessing the SPI controller with a
112 * single transfert.
113 */
114
115static struct regmap_bus regmap_mc13xxx_bus = {
116 .write = mc13xxx_spi_write,
117 .read = mc13xxx_spi_read,
56}; 118};
57 119
58static int mc13xxx_spi_probe(struct spi_device *spi) 120static int mc13xxx_spi_probe(struct spi_device *spi)
@@ -73,12 +135,13 @@ static int mc13xxx_spi_probe(struct spi_device *spi)
73 135
74 dev_set_drvdata(&spi->dev, mc13xxx); 136 dev_set_drvdata(&spi->dev, mc13xxx);
75 spi->mode = SPI_MODE_0 | SPI_CS_HIGH; 137 spi->mode = SPI_MODE_0 | SPI_CS_HIGH;
76 spi->bits_per_word = 32;
77 138
78 mc13xxx->dev = &spi->dev; 139 mc13xxx->dev = &spi->dev;
79 mutex_init(&mc13xxx->lock); 140 mutex_init(&mc13xxx->lock);
80 141
81 mc13xxx->regmap = regmap_init_spi(spi, &mc13xxx_regmap_spi_config); 142 mc13xxx->regmap = regmap_init(&spi->dev, &regmap_mc13xxx_bus, &spi->dev,
143 &mc13xxx_regmap_spi_config);
144
82 if (IS_ERR(mc13xxx->regmap)) { 145 if (IS_ERR(mc13xxx->regmap)) {
83 ret = PTR_ERR(mc13xxx->regmap); 146 ret = PTR_ERR(mc13xxx->regmap);
84 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n", 147 dev_err(mc13xxx->dev, "Failed to initialize register map: %d\n",
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 7e96bb229724..41088ecbb2a9 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -25,6 +25,7 @@
25#include <linux/clk.h> 25#include <linux/clk.h>
26#include <linux/dma-mapping.h> 26#include <linux/dma-mapping.h>
27#include <linux/spinlock.h> 27#include <linux/spinlock.h>
28#include <linux/gpio.h>
28#include <plat/cpu.h> 29#include <plat/cpu.h>
29#include <plat/usb.h> 30#include <plat/usb.h>
30#include <linux/pm_runtime.h> 31#include <linux/pm_runtime.h>
@@ -500,8 +501,21 @@ static void omap_usbhs_init(struct device *dev)
500 dev_dbg(dev, "starting TI HSUSB Controller\n"); 501 dev_dbg(dev, "starting TI HSUSB Controller\n");
501 502
502 pm_runtime_get_sync(dev); 503 pm_runtime_get_sync(dev);
503 spin_lock_irqsave(&omap->lock, flags);
504 504
505 if (pdata->ehci_data->phy_reset) {
506 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
507 gpio_request_one(pdata->ehci_data->reset_gpio_port[0],
508 GPIOF_OUT_INIT_LOW, "USB1 PHY reset");
509
510 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[1]))
511 gpio_request_one(pdata->ehci_data->reset_gpio_port[1],
512 GPIOF_OUT_INIT_LOW, "USB2 PHY reset");
513
514 /* Hold the PHY in RESET for enough time till DIR is high */
515 udelay(10);
516 }
517
518 spin_lock_irqsave(&omap->lock, flags);
505 omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION); 519 omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
506 dev_dbg(dev, "OMAP UHH_REVISION 0x%x\n", omap->usbhs_rev); 520 dev_dbg(dev, "OMAP UHH_REVISION 0x%x\n", omap->usbhs_rev);
507 521
@@ -581,9 +595,39 @@ static void omap_usbhs_init(struct device *dev)
581 } 595 }
582 596
583 spin_unlock_irqrestore(&omap->lock, flags); 597 spin_unlock_irqrestore(&omap->lock, flags);
598
599 if (pdata->ehci_data->phy_reset) {
600 /* Hold the PHY in RESET for enough time till
601 * PHY is settled and ready
602 */
603 udelay(10);
604
605 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
606 gpio_set_value_cansleep
607 (pdata->ehci_data->reset_gpio_port[0], 1);
608
609 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[1]))
610 gpio_set_value_cansleep
611 (pdata->ehci_data->reset_gpio_port[1], 1);
612 }
613
584 pm_runtime_put_sync(dev); 614 pm_runtime_put_sync(dev);
585} 615}
586 616
617static void omap_usbhs_deinit(struct device *dev)
618{
619 struct usbhs_hcd_omap *omap = dev_get_drvdata(dev);
620 struct usbhs_omap_platform_data *pdata = &omap->platdata;
621
622 if (pdata->ehci_data->phy_reset) {
623 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[0]))
624 gpio_free(pdata->ehci_data->reset_gpio_port[0]);
625
626 if (gpio_is_valid(pdata->ehci_data->reset_gpio_port[1]))
627 gpio_free(pdata->ehci_data->reset_gpio_port[1]);
628 }
629}
630
587 631
588/** 632/**
589 * usbhs_omap_probe - initialize TI-based HCDs 633 * usbhs_omap_probe - initialize TI-based HCDs
@@ -767,6 +811,7 @@ static int __devinit usbhs_omap_probe(struct platform_device *pdev)
767 goto end_probe; 811 goto end_probe;
768 812
769err_alloc: 813err_alloc:
814 omap_usbhs_deinit(&pdev->dev);
770 iounmap(omap->tll_base); 815 iounmap(omap->tll_base);
771 816
772err_tll: 817err_tll:
@@ -818,6 +863,7 @@ static int __devexit usbhs_omap_remove(struct platform_device *pdev)
818{ 863{
819 struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev); 864 struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev);
820 865
866 omap_usbhs_deinit(&pdev->dev);
821 iounmap(omap->tll_base); 867 iounmap(omap->tll_base);
822 iounmap(omap->uhh_base); 868 iounmap(omap->uhh_base);
823 clk_put(omap->init_60m_fclk); 869 clk_put(omap->init_60m_fclk);
diff --git a/drivers/mfd/palmas.c b/drivers/mfd/palmas.c
index 00c0aba7eba0..c4a69f193a1d 100644
--- a/drivers/mfd/palmas.c
+++ b/drivers/mfd/palmas.c
@@ -356,7 +356,14 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,
356 } 356 }
357 } 357 }
358 358
359 ret = regmap_add_irq_chip(palmas->regmap[1], palmas->irq, 359 /* Change IRQ into clear on read mode for efficiency */
360 slave = PALMAS_BASE_TO_SLAVE(PALMAS_INTERRUPT_BASE);
361 addr = PALMAS_BASE_TO_REG(PALMAS_INTERRUPT_BASE, PALMAS_INT_CTRL);
362 reg = PALMAS_INT_CTRL_INT_CLEAR;
363
364 regmap_write(palmas->regmap[slave], addr, reg);
365
366 ret = regmap_add_irq_chip(palmas->regmap[slave], palmas->irq,
360 IRQF_ONESHOT | IRQF_TRIGGER_LOW, -1, &palmas_irq_chip, 367 IRQF_ONESHOT | IRQF_TRIGGER_LOW, -1, &palmas_irq_chip,
361 &palmas->irq_data); 368 &palmas->irq_data);
362 if (ret < 0) 369 if (ret < 0)
@@ -441,6 +448,9 @@ static int __devinit palmas_i2c_probe(struct i2c_client *i2c,
441 goto err; 448 goto err;
442 } 449 }
443 450
451 children[PALMAS_PMIC_ID].platform_data = pdata->pmic_pdata;
452 children[PALMAS_PMIC_ID].pdata_size = sizeof(*pdata->pmic_pdata);
453
444 ret = mfd_add_devices(palmas->dev, -1, 454 ret = mfd_add_devices(palmas->dev, -1,
445 children, ARRAY_SIZE(palmas_children), 455 children, ARRAY_SIZE(palmas_children),
446 NULL, regmap_irq_chip_get_base(palmas->irq_data)); 456 NULL, regmap_irq_chip_get_base(palmas->irq_data));
@@ -472,6 +482,7 @@ static const struct i2c_device_id palmas_i2c_id[] = {
472 { "twl6035", }, 482 { "twl6035", },
473 { "twl6037", }, 483 { "twl6037", },
474 { "tps65913", }, 484 { "tps65913", },
485 { /* end */ }
475}; 486};
476MODULE_DEVICE_TABLE(i2c, palmas_i2c_id); 487MODULE_DEVICE_TABLE(i2c, palmas_i2c_id);
477 488
diff --git a/drivers/mfd/tps65217.c b/drivers/mfd/tps65217.c
index db194e433c08..61c097a98f5d 100644
--- a/drivers/mfd/tps65217.c
+++ b/drivers/mfd/tps65217.c
@@ -24,6 +24,7 @@
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/regmap.h> 25#include <linux/regmap.h>
26#include <linux/err.h> 26#include <linux/err.h>
27#include <linux/regulator/of_regulator.h>
27 28
28#include <linux/mfd/core.h> 29#include <linux/mfd/core.h>
29#include <linux/mfd/tps65217.h> 30#include <linux/mfd/tps65217.h>
@@ -132,6 +133,61 @@ int tps65217_clear_bits(struct tps65217 *tps, unsigned int reg,
132} 133}
133EXPORT_SYMBOL_GPL(tps65217_clear_bits); 134EXPORT_SYMBOL_GPL(tps65217_clear_bits);
134 135
136#ifdef CONFIG_OF
137static struct of_regulator_match reg_matches[] = {
138 { .name = "dcdc1", .driver_data = (void *)TPS65217_DCDC_1 },
139 { .name = "dcdc2", .driver_data = (void *)TPS65217_DCDC_2 },
140 { .name = "dcdc3", .driver_data = (void *)TPS65217_DCDC_3 },
141 { .name = "ldo1", .driver_data = (void *)TPS65217_LDO_1 },
142 { .name = "ldo2", .driver_data = (void *)TPS65217_LDO_2 },
143 { .name = "ldo3", .driver_data = (void *)TPS65217_LDO_3 },
144 { .name = "ldo4", .driver_data = (void *)TPS65217_LDO_4 },
145};
146
147static struct tps65217_board *tps65217_parse_dt(struct i2c_client *client)
148{
149 struct device_node *node = client->dev.of_node;
150 struct tps65217_board *pdata;
151 struct device_node *regs;
152 int count = ARRAY_SIZE(reg_matches);
153 int ret, i;
154
155 regs = of_find_node_by_name(node, "regulators");
156 if (!regs)
157 return NULL;
158
159 ret = of_regulator_match(&client->dev, regs, reg_matches, count);
160 of_node_put(regs);
161 if ((ret < 0) || (ret > count))
162 return NULL;
163
164 count = ret;
165 pdata = devm_kzalloc(&client->dev, count * sizeof(*pdata), GFP_KERNEL);
166 if (!pdata)
167 return NULL;
168
169 for (i = 0; i < count; i++) {
170 if (!reg_matches[i].init_data || !reg_matches[i].of_node)
171 continue;
172
173 pdata->tps65217_init_data[i] = reg_matches[i].init_data;
174 pdata->of_node[i] = reg_matches[i].of_node;
175 }
176
177 return pdata;
178}
179
180static struct of_device_id tps65217_of_match[] = {
181 { .compatible = "ti,tps65217", },
182 { },
183};
184#else
185static struct tps65217_board *tps65217_parse_dt(struct i2c_client *client)
186{
187 return NULL;
188}
189#endif
190
135static struct regmap_config tps65217_regmap_config = { 191static struct regmap_config tps65217_regmap_config = {
136 .reg_bits = 8, 192 .reg_bits = 8,
137 .val_bits = 8, 193 .val_bits = 8,
@@ -141,10 +197,14 @@ static int __devinit tps65217_probe(struct i2c_client *client,
141 const struct i2c_device_id *ids) 197 const struct i2c_device_id *ids)
142{ 198{
143 struct tps65217 *tps; 199 struct tps65217 *tps;
200 struct regulator_init_data *reg_data;
144 struct tps65217_board *pdata = client->dev.platform_data; 201 struct tps65217_board *pdata = client->dev.platform_data;
145 int i, ret; 202 int i, ret;
146 unsigned int version; 203 unsigned int version;
147 204
205 if (!pdata && client->dev.of_node)
206 pdata = tps65217_parse_dt(client);
207
148 tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); 208 tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
149 if (!tps) 209 if (!tps)
150 return -ENOMEM; 210 return -ENOMEM;
@@ -182,8 +242,9 @@ static int __devinit tps65217_probe(struct i2c_client *client,
182 } 242 }
183 243
184 pdev->dev.parent = tps->dev; 244 pdev->dev.parent = tps->dev;
185 platform_device_add_data(pdev, &pdata->tps65217_init_data[i], 245 pdev->dev.of_node = pdata->of_node[i];
186 sizeof(pdata->tps65217_init_data[i])); 246 reg_data = pdata->tps65217_init_data[i];
247 platform_device_add_data(pdev, reg_data, sizeof(*reg_data));
187 tps->regulator_pdev[i] = pdev; 248 tps->regulator_pdev[i] = pdev;
188 249
189 platform_device_add(pdev); 250 platform_device_add(pdev);
@@ -212,6 +273,8 @@ MODULE_DEVICE_TABLE(i2c, tps65217_id_table);
212static struct i2c_driver tps65217_driver = { 273static struct i2c_driver tps65217_driver = {
213 .driver = { 274 .driver = {
214 .name = "tps65217", 275 .name = "tps65217",
276 .owner = THIS_MODULE,
277 .of_match_table = of_match_ptr(tps65217_of_match),
215 }, 278 },
216 .id_table = tps65217_id_table, 279 .id_table = tps65217_id_table,
217 .probe = tps65217_probe, 280 .probe = tps65217_probe,
diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c
index 7de13891e49e..783fcd7365bc 100644
--- a/drivers/misc/mei/main.c
+++ b/drivers/misc/mei/main.c
@@ -1147,7 +1147,7 @@ static int mei_pci_resume(struct device *device)
1147 err = request_threaded_irq(pdev->irq, 1147 err = request_threaded_irq(pdev->irq,
1148 NULL, 1148 NULL,
1149 mei_interrupt_thread_handler, 1149 mei_interrupt_thread_handler,
1150 0, mei_driver_name, dev); 1150 IRQF_ONESHOT, mei_driver_name, dev);
1151 else 1151 else
1152 err = request_threaded_irq(pdev->irq, 1152 err = request_threaded_irq(pdev->irq,
1153 mei_interrupt_quick_handler, 1153 mei_interrupt_quick_handler,
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
index 17bbacb1b4b1..87b251ab6ec5 100644
--- a/drivers/misc/sgi-xp/xpc_uv.c
+++ b/drivers/misc/sgi-xp/xpc_uv.c
@@ -452,9 +452,9 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part,
452 452
453 if (msg->activate_gru_mq_desc_gpa != 453 if (msg->activate_gru_mq_desc_gpa !=
454 part_uv->activate_gru_mq_desc_gpa) { 454 part_uv->activate_gru_mq_desc_gpa) {
455 spin_lock_irqsave(&part_uv->flags_lock, irq_flags); 455 spin_lock(&part_uv->flags_lock);
456 part_uv->flags &= ~XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV; 456 part_uv->flags &= ~XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV;
457 spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags); 457 spin_unlock(&part_uv->flags_lock);
458 part_uv->activate_gru_mq_desc_gpa = 458 part_uv->activate_gru_mq_desc_gpa =
459 msg->activate_gru_mq_desc_gpa; 459 msg->activate_gru_mq_desc_gpa;
460 } 460 }
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 276d21ce6bc1..f1c84decb192 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -850,9 +850,7 @@ out:
850 goto retry; 850 goto retry;
851 if (!err) 851 if (!err)
852 mmc_blk_reset_success(md, type); 852 mmc_blk_reset_success(md, type);
853 spin_lock_irq(&md->lock); 853 blk_end_request(req, err, blk_rq_bytes(req));
854 __blk_end_request(req, err, blk_rq_bytes(req));
855 spin_unlock_irq(&md->lock);
856 854
857 return err ? 0 : 1; 855 return err ? 0 : 1;
858} 856}
@@ -934,9 +932,7 @@ out_retry:
934 if (!err) 932 if (!err)
935 mmc_blk_reset_success(md, type); 933 mmc_blk_reset_success(md, type);
936out: 934out:
937 spin_lock_irq(&md->lock); 935 blk_end_request(req, err, blk_rq_bytes(req));
938 __blk_end_request(req, err, blk_rq_bytes(req));
939 spin_unlock_irq(&md->lock);
940 936
941 return err ? 0 : 1; 937 return err ? 0 : 1;
942} 938}
@@ -951,9 +947,7 @@ static int mmc_blk_issue_flush(struct mmc_queue *mq, struct request *req)
951 if (ret) 947 if (ret)
952 ret = -EIO; 948 ret = -EIO;
953 949
954 spin_lock_irq(&md->lock); 950 blk_end_request_all(req, ret);
955 __blk_end_request_all(req, ret);
956 spin_unlock_irq(&md->lock);
957 951
958 return ret ? 0 : 1; 952 return ret ? 0 : 1;
959} 953}
@@ -1252,14 +1246,10 @@ static int mmc_blk_cmd_err(struct mmc_blk_data *md, struct mmc_card *card,
1252 1246
1253 blocks = mmc_sd_num_wr_blocks(card); 1247 blocks = mmc_sd_num_wr_blocks(card);
1254 if (blocks != (u32)-1) { 1248 if (blocks != (u32)-1) {
1255 spin_lock_irq(&md->lock); 1249 ret = blk_end_request(req, 0, blocks << 9);
1256 ret = __blk_end_request(req, 0, blocks << 9);
1257 spin_unlock_irq(&md->lock);
1258 } 1250 }
1259 } else { 1251 } else {
1260 spin_lock_irq(&md->lock); 1252 ret = blk_end_request(req, 0, brq->data.bytes_xfered);
1261 ret = __blk_end_request(req, 0, brq->data.bytes_xfered);
1262 spin_unlock_irq(&md->lock);
1263 } 1253 }
1264 return ret; 1254 return ret;
1265} 1255}
@@ -1311,10 +1301,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
1311 * A block was successfully transferred. 1301 * A block was successfully transferred.
1312 */ 1302 */
1313 mmc_blk_reset_success(md, type); 1303 mmc_blk_reset_success(md, type);
1314 spin_lock_irq(&md->lock); 1304 ret = blk_end_request(req, 0,
1315 ret = __blk_end_request(req, 0,
1316 brq->data.bytes_xfered); 1305 brq->data.bytes_xfered);
1317 spin_unlock_irq(&md->lock);
1318 /* 1306 /*
1319 * If the blk_end_request function returns non-zero even 1307 * If the blk_end_request function returns non-zero even
1320 * though all data has been transferred and no errors 1308 * though all data has been transferred and no errors
@@ -1364,10 +1352,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
1364 * time, so we only reach here after trying to 1352 * time, so we only reach here after trying to
1365 * read a single sector. 1353 * read a single sector.
1366 */ 1354 */
1367 spin_lock_irq(&md->lock); 1355 ret = blk_end_request(req, -EIO,
1368 ret = __blk_end_request(req, -EIO,
1369 brq->data.blksz); 1356 brq->data.blksz);
1370 spin_unlock_irq(&md->lock);
1371 if (!ret) 1357 if (!ret)
1372 goto start_new_req; 1358 goto start_new_req;
1373 break; 1359 break;
@@ -1388,12 +1374,10 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
1388 return 1; 1374 return 1;
1389 1375
1390 cmd_abort: 1376 cmd_abort:
1391 spin_lock_irq(&md->lock);
1392 if (mmc_card_removed(card)) 1377 if (mmc_card_removed(card))
1393 req->cmd_flags |= REQ_QUIET; 1378 req->cmd_flags |= REQ_QUIET;
1394 while (ret) 1379 while (ret)
1395 ret = __blk_end_request(req, -EIO, blk_rq_cur_bytes(req)); 1380 ret = blk_end_request(req, -EIO, blk_rq_cur_bytes(req));
1396 spin_unlock_irq(&md->lock);
1397 1381
1398 start_new_req: 1382 start_new_req:
1399 if (rqc) { 1383 if (rqc) {
@@ -1417,9 +1401,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
1417 ret = mmc_blk_part_switch(card, md); 1401 ret = mmc_blk_part_switch(card, md);
1418 if (ret) { 1402 if (ret) {
1419 if (req) { 1403 if (req) {
1420 spin_lock_irq(&md->lock); 1404 blk_end_request_all(req, -EIO);
1421 __blk_end_request_all(req, -EIO);
1422 spin_unlock_irq(&md->lock);
1423 } 1405 }
1424 ret = 0; 1406 ret = 0;
1425 goto out; 1407 goto out;
diff --git a/drivers/mmc/core/Makefile b/drivers/mmc/core/Makefile
index dca4428380f1..38ed210ce2f3 100644
--- a/drivers/mmc/core/Makefile
+++ b/drivers/mmc/core/Makefile
@@ -7,6 +7,6 @@ mmc_core-y := core.o bus.o host.o \
7 mmc.o mmc_ops.o sd.o sd_ops.o \ 7 mmc.o mmc_ops.o sd.o sd_ops.o \
8 sdio.o sdio_ops.o sdio_bus.o \ 8 sdio.o sdio_ops.o sdio_bus.o \
9 sdio_cis.o sdio_io.o sdio_irq.o \ 9 sdio_cis.o sdio_io.o sdio_irq.o \
10 quirks.o cd-gpio.o 10 quirks.o slot-gpio.o
11 11
12mmc_core-$(CONFIG_DEBUG_FS) += debugfs.o 12mmc_core-$(CONFIG_DEBUG_FS) += debugfs.o
diff --git a/drivers/mmc/core/cd-gpio.c b/drivers/mmc/core/cd-gpio.c
deleted file mode 100644
index f13e38deceac..000000000000
--- a/drivers/mmc/core/cd-gpio.c
+++ /dev/null
@@ -1,83 +0,0 @@
1/*
2 * Generic GPIO card-detect helper
3 *
4 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/err.h>
12#include <linux/gpio.h>
13#include <linux/interrupt.h>
14#include <linux/jiffies.h>
15#include <linux/mmc/cd-gpio.h>
16#include <linux/mmc/host.h>
17#include <linux/module.h>
18#include <linux/slab.h>
19
20struct mmc_cd_gpio {
21 unsigned int gpio;
22 char label[0];
23};
24
25static irqreturn_t mmc_cd_gpio_irqt(int irq, void *dev_id)
26{
27 /* Schedule a card detection after a debounce timeout */
28 mmc_detect_change(dev_id, msecs_to_jiffies(100));
29 return IRQ_HANDLED;
30}
31
32int mmc_cd_gpio_request(struct mmc_host *host, unsigned int gpio)
33{
34 size_t len = strlen(dev_name(host->parent)) + 4;
35 struct mmc_cd_gpio *cd;
36 int irq = gpio_to_irq(gpio);
37 int ret;
38
39 if (irq < 0)
40 return irq;
41
42 cd = kmalloc(sizeof(*cd) + len, GFP_KERNEL);
43 if (!cd)
44 return -ENOMEM;
45
46 snprintf(cd->label, len, "%s cd", dev_name(host->parent));
47
48 ret = gpio_request_one(gpio, GPIOF_DIR_IN, cd->label);
49 if (ret < 0)
50 goto egpioreq;
51
52 ret = request_threaded_irq(irq, NULL, mmc_cd_gpio_irqt,
53 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
54 cd->label, host);
55 if (ret < 0)
56 goto eirqreq;
57
58 cd->gpio = gpio;
59 host->hotplug.irq = irq;
60 host->hotplug.handler_priv = cd;
61
62 return 0;
63
64eirqreq:
65 gpio_free(gpio);
66egpioreq:
67 kfree(cd);
68 return ret;
69}
70EXPORT_SYMBOL(mmc_cd_gpio_request);
71
72void mmc_cd_gpio_free(struct mmc_host *host)
73{
74 struct mmc_cd_gpio *cd = host->hotplug.handler_priv;
75
76 if (!cd)
77 return;
78
79 free_irq(host->hotplug.irq, host);
80 gpio_free(cd->gpio);
81 kfree(cd);
82}
83EXPORT_SYMBOL(mmc_cd_gpio_free);
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 0b6141d29dbd..8ac5246e2ab2 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -404,6 +404,7 @@ int mmc_interrupt_hpi(struct mmc_card *card)
404{ 404{
405 int err; 405 int err;
406 u32 status; 406 u32 status;
407 unsigned long prg_wait;
407 408
408 BUG_ON(!card); 409 BUG_ON(!card);
409 410
@@ -419,30 +420,38 @@ int mmc_interrupt_hpi(struct mmc_card *card)
419 goto out; 420 goto out;
420 } 421 }
421 422
422 /* 423 switch (R1_CURRENT_STATE(status)) {
423 * If the card status is in PRG-state, we can send the HPI command. 424 case R1_STATE_IDLE:
424 */ 425 case R1_STATE_READY:
425 if (R1_CURRENT_STATE(status) == R1_STATE_PRG) { 426 case R1_STATE_STBY:
426 do { 427 /*
427 /* 428 * In idle states, HPI is not needed and the caller
428 * We don't know when the HPI command will finish 429 * can issue the next intended command immediately
429 * processing, so we need to resend HPI until out 430 */
430 * of prg-state, and keep checking the card status 431 goto out;
431 * with SEND_STATUS. If a timeout error occurs when 432 case R1_STATE_PRG:
432 * sending the HPI command, we are already out of 433 break;
433 * prg-state. 434 default:
434 */ 435 /* In all other states, it's illegal to issue HPI */
435 err = mmc_send_hpi_cmd(card, &status); 436 pr_debug("%s: HPI cannot be sent. Card state=%d\n",
436 if (err) 437 mmc_hostname(card->host), R1_CURRENT_STATE(status));
437 pr_debug("%s: abort HPI (%d error)\n", 438 err = -EINVAL;
438 mmc_hostname(card->host), err); 439 goto out;
440 }
439 441
440 err = mmc_send_status(card, &status); 442 err = mmc_send_hpi_cmd(card, &status);
441 if (err) 443 if (err)
442 break; 444 goto out;
443 } while (R1_CURRENT_STATE(status) == R1_STATE_PRG); 445
444 } else 446 prg_wait = jiffies + msecs_to_jiffies(card->ext_csd.out_of_int_time);
445 pr_debug("%s: Left prg-state\n", mmc_hostname(card->host)); 447 do {
448 err = mmc_send_status(card, &status);
449
450 if (!err && R1_CURRENT_STATE(status) == R1_STATE_TRAN)
451 break;
452 if (time_after(jiffies, prg_wait))
453 err = -ETIMEDOUT;
454 } while (!err);
446 455
447out: 456out:
448 mmc_release_host(card->host); 457 mmc_release_host(card->host);
@@ -941,7 +950,7 @@ int mmc_regulator_get_ocrmask(struct regulator *supply)
941 950
942 return result; 951 return result;
943} 952}
944EXPORT_SYMBOL(mmc_regulator_get_ocrmask); 953EXPORT_SYMBOL_GPL(mmc_regulator_get_ocrmask);
945 954
946/** 955/**
947 * mmc_regulator_set_ocr - set regulator to match host->ios voltage 956 * mmc_regulator_set_ocr - set regulator to match host->ios voltage
@@ -1011,7 +1020,30 @@ int mmc_regulator_set_ocr(struct mmc_host *mmc,
1011 "could not set regulator OCR (%d)\n", result); 1020 "could not set regulator OCR (%d)\n", result);
1012 return result; 1021 return result;
1013} 1022}
1014EXPORT_SYMBOL(mmc_regulator_set_ocr); 1023EXPORT_SYMBOL_GPL(mmc_regulator_set_ocr);
1024
1025int mmc_regulator_get_supply(struct mmc_host *mmc)
1026{
1027 struct device *dev = mmc_dev(mmc);
1028 struct regulator *supply;
1029 int ret;
1030
1031 supply = devm_regulator_get(dev, "vmmc");
1032 mmc->supply.vmmc = supply;
1033 mmc->supply.vqmmc = devm_regulator_get(dev, "vqmmc");
1034
1035 if (IS_ERR(supply))
1036 return PTR_ERR(supply);
1037
1038 ret = mmc_regulator_get_ocrmask(supply);
1039 if (ret > 0)
1040 mmc->ocr_avail = ret;
1041 else
1042 dev_warn(mmc_dev(mmc), "Failed getting OCR mask: %d\n", ret);
1043
1044 return 0;
1045}
1046EXPORT_SYMBOL_GPL(mmc_regulator_get_supply);
1015 1047
1016#endif /* CONFIG_REGULATOR */ 1048#endif /* CONFIG_REGULATOR */
1017 1049
@@ -1180,6 +1212,9 @@ static void mmc_power_up(struct mmc_host *host)
1180 host->ios.timing = MMC_TIMING_LEGACY; 1212 host->ios.timing = MMC_TIMING_LEGACY;
1181 mmc_set_ios(host); 1213 mmc_set_ios(host);
1182 1214
1215 /* Set signal voltage to 3.3V */
1216 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, false);
1217
1183 /* 1218 /*
1184 * This delay should be sufficient to allow the power supply 1219 * This delay should be sufficient to allow the power supply
1185 * to reach the minimum voltage. 1220 * to reach the minimum voltage.
@@ -1931,9 +1966,6 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
1931 */ 1966 */
1932 mmc_hw_reset_for_init(host); 1967 mmc_hw_reset_for_init(host);
1933 1968
1934 /* Initialization should be done at 3.3 V I/O voltage. */
1935 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
1936
1937 /* 1969 /*
1938 * sdio_reset sends CMD52 to reset card. Since we do not know 1970 * sdio_reset sends CMD52 to reset card. Since we do not know
1939 * if the card is being re-initialized, just send it. CMD52 1971 * if the card is being re-initialized, just send it. CMD52
@@ -2075,6 +2107,7 @@ void mmc_rescan(struct work_struct *work)
2075void mmc_start_host(struct mmc_host *host) 2107void mmc_start_host(struct mmc_host *host)
2076{ 2108{
2077 host->f_init = max(freqs[0], host->f_min); 2109 host->f_init = max(freqs[0], host->f_min);
2110 host->rescan_disable = 0;
2078 mmc_power_up(host); 2111 mmc_power_up(host);
2079 mmc_detect_change(host, 0); 2112 mmc_detect_change(host, 0);
2080} 2113}
@@ -2088,6 +2121,7 @@ void mmc_stop_host(struct mmc_host *host)
2088 spin_unlock_irqrestore(&host->lock, flags); 2121 spin_unlock_irqrestore(&host->lock, flags);
2089#endif 2122#endif
2090 2123
2124 host->rescan_disable = 1;
2091 cancel_delayed_work_sync(&host->detect); 2125 cancel_delayed_work_sync(&host->detect);
2092 mmc_flush_scheduled_work(); 2126 mmc_flush_scheduled_work();
2093 2127
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 91c84c7a1829..597f189b4427 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -32,6 +32,7 @@
32static void mmc_host_classdev_release(struct device *dev) 32static void mmc_host_classdev_release(struct device *dev)
33{ 33{
34 struct mmc_host *host = cls_dev_to_mmc_host(dev); 34 struct mmc_host *host = cls_dev_to_mmc_host(dev);
35 mutex_destroy(&host->slot.lock);
35 kfree(host); 36 kfree(host);
36} 37}
37 38
@@ -312,6 +313,8 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
312 if (!host) 313 if (!host)
313 return NULL; 314 return NULL;
314 315
316 /* scanning will be enabled when we're ready */
317 host->rescan_disable = 1;
315 spin_lock(&mmc_host_lock); 318 spin_lock(&mmc_host_lock);
316 err = idr_get_new(&mmc_host_idr, host, &host->index); 319 err = idr_get_new(&mmc_host_idr, host, &host->index);
317 spin_unlock(&mmc_host_lock); 320 spin_unlock(&mmc_host_lock);
@@ -327,6 +330,9 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
327 330
328 mmc_host_clk_init(host); 331 mmc_host_clk_init(host);
329 332
333 mutex_init(&host->slot.lock);
334 host->slot.cd_irq = -EINVAL;
335
330 spin_lock_init(&host->lock); 336 spin_lock_init(&host->lock);
331 init_waitqueue_head(&host->wq); 337 init_waitqueue_head(&host->wq);
332 INIT_DELAYED_WORK(&host->detect, mmc_rescan); 338 INIT_DELAYED_WORK(&host->detect, mmc_rescan);
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 258b203397aa..396b25891bb9 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -717,10 +717,6 @@ static int mmc_select_powerclass(struct mmc_card *card,
717 card->ext_csd.generic_cmd6_time); 717 card->ext_csd.generic_cmd6_time);
718 } 718 }
719 719
720 if (err)
721 pr_err("%s: power class selection for ext_csd_bus_width %d"
722 " failed\n", mmc_hostname(card->host), bus_width);
723
724 return err; 720 return err;
725} 721}
726 722
@@ -822,9 +818,6 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
822 if (!mmc_host_is_spi(host)) 818 if (!mmc_host_is_spi(host))
823 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN); 819 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
824 820
825 /* Initialization should be done at 3.3 V I/O voltage. */
826 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
827
828 /* 821 /*
829 * Since we're changing the OCR value, we seem to 822 * Since we're changing the OCR value, we seem to
830 * need to tell some cards to go back to the idle 823 * need to tell some cards to go back to the idle
@@ -1104,7 +1097,9 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1104 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4; 1097 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
1105 err = mmc_select_powerclass(card, ext_csd_bits, ext_csd); 1098 err = mmc_select_powerclass(card, ext_csd_bits, ext_csd);
1106 if (err) 1099 if (err)
1107 goto err; 1100 pr_warning("%s: power class selection to bus width %d"
1101 " failed\n", mmc_hostname(card->host),
1102 1 << bus_width);
1108 } 1103 }
1109 1104
1110 /* 1105 /*
@@ -1136,7 +1131,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1136 err = mmc_select_powerclass(card, ext_csd_bits[idx][0], 1131 err = mmc_select_powerclass(card, ext_csd_bits[idx][0],
1137 ext_csd); 1132 ext_csd);
1138 if (err) 1133 if (err)
1139 goto err; 1134 pr_warning("%s: power class selection to "
1135 "bus width %d failed\n",
1136 mmc_hostname(card->host),
1137 1 << bus_width);
1140 1138
1141 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 1139 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1142 EXT_CSD_BUS_WIDTH, 1140 EXT_CSD_BUS_WIDTH,
@@ -1164,7 +1162,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
1164 err = mmc_select_powerclass(card, ext_csd_bits[idx][1], 1162 err = mmc_select_powerclass(card, ext_csd_bits[idx][1],
1165 ext_csd); 1163 ext_csd);
1166 if (err) 1164 if (err)
1167 goto err; 1165 pr_warning("%s: power class selection to "
1166 "bus width %d ddr %d failed\n",
1167 mmc_hostname(card->host),
1168 1 << bus_width, ddr);
1168 1169
1169 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, 1170 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1170 EXT_CSD_BUS_WIDTH, 1171 EXT_CSD_BUS_WIDTH,
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
index 69370f494e05..0ed2cc5f35b6 100644
--- a/drivers/mmc/core/mmc_ops.c
+++ b/drivers/mmc/core/mmc_ops.c
@@ -569,7 +569,6 @@ int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status)
569 569
570 cmd.opcode = opcode; 570 cmd.opcode = opcode;
571 cmd.arg = card->rca << 16 | 1; 571 cmd.arg = card->rca << 16 | 1;
572 cmd.cmd_timeout_ms = card->ext_csd.out_of_int_time;
573 572
574 err = mmc_wait_for_cmd(card->host, &cmd, 0); 573 err = mmc_wait_for_cmd(card->host, &cmd, 0);
575 if (err) { 574 if (err) {
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index b2b43f624b9e..74972c241dff 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -244,7 +244,7 @@ static int mmc_read_ssr(struct mmc_card *card)
244 * bitfield positions accordingly. 244 * bitfield positions accordingly.
245 */ 245 */
246 au = UNSTUFF_BITS(ssr, 428 - 384, 4); 246 au = UNSTUFF_BITS(ssr, 428 - 384, 4);
247 if (au > 0 || au <= 9) { 247 if (au > 0 && au <= 9) {
248 card->ssr.au = 1 << (au + 4); 248 card->ssr.au = 1 << (au + 4);
249 es = UNSTUFF_BITS(ssr, 408 - 384, 16); 249 es = UNSTUFF_BITS(ssr, 408 - 384, 16);
250 et = UNSTUFF_BITS(ssr, 402 - 384, 6); 250 et = UNSTUFF_BITS(ssr, 402 - 384, 6);
@@ -290,8 +290,12 @@ static int mmc_read_switch(struct mmc_card *card)
290 return -ENOMEM; 290 return -ENOMEM;
291 } 291 }
292 292
293 /* Find out the supported Bus Speed Modes. */ 293 /*
294 err = mmc_sd_switch(card, 0, 0, 1, status); 294 * Find out the card's support bits with a mode 0 operation.
295 * The argument does not matter, as the support bits do not
296 * change with the arguments.
297 */
298 err = mmc_sd_switch(card, 0, 0, 0, status);
295 if (err) { 299 if (err) {
296 /* 300 /*
297 * If the host or the card can't do the switch, 301 * If the host or the card can't do the switch,
@@ -312,46 +316,8 @@ static int mmc_read_switch(struct mmc_card *card)
312 316
313 if (card->scr.sda_spec3) { 317 if (card->scr.sda_spec3) {
314 card->sw_caps.sd3_bus_mode = status[13]; 318 card->sw_caps.sd3_bus_mode = status[13];
315 319 /* Driver Strengths supported by the card */
316 /* Find out Driver Strengths supported by the card */
317 err = mmc_sd_switch(card, 0, 2, 1, status);
318 if (err) {
319 /*
320 * If the host or the card can't do the switch,
321 * fail more gracefully.
322 */
323 if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
324 goto out;
325
326 pr_warning("%s: problem reading "
327 "Driver Strength.\n",
328 mmc_hostname(card->host));
329 err = 0;
330
331 goto out;
332 }
333
334 card->sw_caps.sd3_drv_type = status[9]; 320 card->sw_caps.sd3_drv_type = status[9];
335
336 /* Find out Current Limits supported by the card */
337 err = mmc_sd_switch(card, 0, 3, 1, status);
338 if (err) {
339 /*
340 * If the host or the card can't do the switch,
341 * fail more gracefully.
342 */
343 if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
344 goto out;
345
346 pr_warning("%s: problem reading "
347 "Current Limit.\n",
348 mmc_hostname(card->host));
349 err = 0;
350
351 goto out;
352 }
353
354 card->sw_caps.sd3_curr_limit = status[7];
355 } 321 }
356 322
357out: 323out:
@@ -551,60 +517,80 @@ static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status)
551 return 0; 517 return 0;
552} 518}
553 519
520/* Get host's max current setting at its current voltage */
521static u32 sd_get_host_max_current(struct mmc_host *host)
522{
523 u32 voltage, max_current;
524
525 voltage = 1 << host->ios.vdd;
526 switch (voltage) {
527 case MMC_VDD_165_195:
528 max_current = host->max_current_180;
529 break;
530 case MMC_VDD_29_30:
531 case MMC_VDD_30_31:
532 max_current = host->max_current_300;
533 break;
534 case MMC_VDD_32_33:
535 case MMC_VDD_33_34:
536 max_current = host->max_current_330;
537 break;
538 default:
539 max_current = 0;
540 }
541
542 return max_current;
543}
544
554static int sd_set_current_limit(struct mmc_card *card, u8 *status) 545static int sd_set_current_limit(struct mmc_card *card, u8 *status)
555{ 546{
556 int current_limit = 0; 547 int current_limit = SD_SET_CURRENT_NO_CHANGE;
557 int err; 548 int err;
549 u32 max_current;
558 550
559 /* 551 /*
560 * Current limit switch is only defined for SDR50, SDR104, and DDR50 552 * Current limit switch is only defined for SDR50, SDR104, and DDR50
561 * bus speed modes. For other bus speed modes, we set the default 553 * bus speed modes. For other bus speed modes, we do not change the
562 * current limit of 200mA. 554 * current limit.
563 */ 555 */
564 if ((card->sd_bus_speed == UHS_SDR50_BUS_SPEED) || 556 if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) &&
565 (card->sd_bus_speed == UHS_SDR104_BUS_SPEED) || 557 (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) &&
566 (card->sd_bus_speed == UHS_DDR50_BUS_SPEED)) { 558 (card->sd_bus_speed != UHS_DDR50_BUS_SPEED))
567 if (card->host->caps & MMC_CAP_MAX_CURRENT_800) { 559 return 0;
568 if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800) 560
569 current_limit = SD_SET_CURRENT_LIMIT_800; 561 /*
570 else if (card->sw_caps.sd3_curr_limit & 562 * Host has different current capabilities when operating at
571 SD_MAX_CURRENT_600) 563 * different voltages, so find out its max current first.
572 current_limit = SD_SET_CURRENT_LIMIT_600; 564 */
573 else if (card->sw_caps.sd3_curr_limit & 565 max_current = sd_get_host_max_current(card->host);
574 SD_MAX_CURRENT_400) 566
575 current_limit = SD_SET_CURRENT_LIMIT_400; 567 /*
576 else if (card->sw_caps.sd3_curr_limit & 568 * We only check host's capability here, if we set a limit that is
577 SD_MAX_CURRENT_200) 569 * higher than the card's maximum current, the card will be using its
578 current_limit = SD_SET_CURRENT_LIMIT_200; 570 * maximum current, e.g. if the card's maximum current is 300ma, and
579 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_600) { 571 * when we set current limit to 200ma, the card will draw 200ma, and
580 if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600) 572 * when we set current limit to 400/600/800ma, the card will draw its
581 current_limit = SD_SET_CURRENT_LIMIT_600; 573 * maximum 300ma from the host.
582 else if (card->sw_caps.sd3_curr_limit & 574 */
583 SD_MAX_CURRENT_400) 575 if (max_current >= 800)
584 current_limit = SD_SET_CURRENT_LIMIT_400; 576 current_limit = SD_SET_CURRENT_LIMIT_800;
585 else if (card->sw_caps.sd3_curr_limit & 577 else if (max_current >= 600)
586 SD_MAX_CURRENT_200) 578 current_limit = SD_SET_CURRENT_LIMIT_600;
587 current_limit = SD_SET_CURRENT_LIMIT_200; 579 else if (max_current >= 400)
588 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_400) { 580 current_limit = SD_SET_CURRENT_LIMIT_400;
589 if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400) 581 else if (max_current >= 200)
590 current_limit = SD_SET_CURRENT_LIMIT_400;
591 else if (card->sw_caps.sd3_curr_limit &
592 SD_MAX_CURRENT_200)
593 current_limit = SD_SET_CURRENT_LIMIT_200;
594 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_200) {
595 if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200)
596 current_limit = SD_SET_CURRENT_LIMIT_200;
597 }
598 } else
599 current_limit = SD_SET_CURRENT_LIMIT_200; 582 current_limit = SD_SET_CURRENT_LIMIT_200;
600 583
601 err = mmc_sd_switch(card, 1, 3, current_limit, status); 584 if (current_limit != SD_SET_CURRENT_NO_CHANGE) {
602 if (err) 585 err = mmc_sd_switch(card, 1, 3, current_limit, status);
603 return err; 586 if (err)
587 return err;
604 588
605 if (((status[15] >> 4) & 0x0F) != current_limit) 589 if (((status[15] >> 4) & 0x0F) != current_limit)
606 pr_warning("%s: Problem setting current limit!\n", 590 pr_warning("%s: Problem setting current limit!\n",
607 mmc_hostname(card->host)); 591 mmc_hostname(card->host));
592
593 }
608 594
609 return 0; 595 return 0;
610} 596}
@@ -726,6 +712,7 @@ struct device_type sd_type = {
726int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr) 712int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
727{ 713{
728 int err; 714 int err;
715 u32 max_current;
729 716
730 /* 717 /*
731 * Since we're changing the OCR value, we seem to 718 * Since we're changing the OCR value, we seem to
@@ -753,9 +740,12 @@ int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
753 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50)) 740 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50))
754 ocr |= SD_OCR_S18R; 741 ocr |= SD_OCR_S18R;
755 742
756 /* If the host can supply more than 150mA, XPC should be set to 1. */ 743 /*
757 if (host->caps & (MMC_CAP_SET_XPC_330 | MMC_CAP_SET_XPC_300 | 744 * If the host can supply more than 150mA at current voltage,
758 MMC_CAP_SET_XPC_180)) 745 * XPC should be set to 1.
746 */
747 max_current = sd_get_host_max_current(host);
748 if (max_current > 150)
759 ocr |= SD_OCR_XPC; 749 ocr |= SD_OCR_XPC;
760 750
761try_again: 751try_again:
@@ -911,9 +901,6 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
911 BUG_ON(!host); 901 BUG_ON(!host);
912 WARN_ON(!host->claimed); 902 WARN_ON(!host->claimed);
913 903
914 /* The initialization should be done at 3.3 V I/O voltage. */
915 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
916
917 err = mmc_sd_get_cid(host, ocr, cid, &rocr); 904 err = mmc_sd_get_cid(host, ocr, cid, &rocr);
918 if (err) 905 if (err)
919 return err; 906 return err;
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 41c5fd8848f4..d4619e2ec030 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -591,9 +591,6 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
591 * Inform the card of the voltage 591 * Inform the card of the voltage
592 */ 592 */
593 if (!powered_resume) { 593 if (!powered_resume) {
594 /* The initialization should be done at 3.3 V I/O voltage. */
595 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
596
597 err = mmc_send_io_op_cond(host, host->ocr, &ocr); 594 err = mmc_send_io_op_cond(host, host->ocr, &ocr);
598 if (err) 595 if (err)
599 goto err; 596 goto err;
@@ -1006,10 +1003,6 @@ static int mmc_sdio_power_restore(struct mmc_host *host)
1006 * restore the correct voltage setting of the card. 1003 * restore the correct voltage setting of the card.
1007 */ 1004 */
1008 1005
1009 /* The initialization should be done at 3.3 V I/O voltage. */
1010 if (!mmc_card_keep_power(host))
1011 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
1012
1013 sdio_reset(host); 1006 sdio_reset(host);
1014 mmc_go_idle(host); 1007 mmc_go_idle(host);
1015 mmc_send_if_cond(host, host->ocr_avail); 1008 mmc_send_if_cond(host, host->ocr_avail);
diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c
index f1c7ed8f4d85..8e94e555b788 100644
--- a/drivers/mmc/core/sdio_cis.c
+++ b/drivers/mmc/core/sdio_cis.c
@@ -313,7 +313,7 @@ static int sdio_read_cis(struct mmc_card *card, struct sdio_func *func)
313 313
314 if (ret == -ENOENT) { 314 if (ret == -ENOENT) {
315 /* warn about unknown tuples */ 315 /* warn about unknown tuples */
316 pr_warning("%s: queuing unknown" 316 pr_warn_ratelimited("%s: queuing unknown"
317 " CIS tuple 0x%02x (%u bytes)\n", 317 " CIS tuple 0x%02x (%u bytes)\n",
318 mmc_hostname(card->host), 318 mmc_hostname(card->host),
319 tpl_code, tpl_link); 319 tpl_code, tpl_link);
diff --git a/drivers/mmc/core/slot-gpio.c b/drivers/mmc/core/slot-gpio.c
new file mode 100644
index 000000000000..058242916cef
--- /dev/null
+++ b/drivers/mmc/core/slot-gpio.c
@@ -0,0 +1,188 @@
1/*
2 * Generic GPIO card-detect helper
3 *
4 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/err.h>
12#include <linux/gpio.h>
13#include <linux/interrupt.h>
14#include <linux/jiffies.h>
15#include <linux/mmc/host.h>
16#include <linux/mmc/slot-gpio.h>
17#include <linux/module.h>
18#include <linux/slab.h>
19
20struct mmc_gpio {
21 int ro_gpio;
22 int cd_gpio;
23 char *ro_label;
24 char cd_label[0];
25};
26
27static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
28{
29 /* Schedule a card detection after a debounce timeout */
30 mmc_detect_change(dev_id, msecs_to_jiffies(100));
31 return IRQ_HANDLED;
32}
33
34static int mmc_gpio_alloc(struct mmc_host *host)
35{
36 size_t len = strlen(dev_name(host->parent)) + 4;
37 struct mmc_gpio *ctx;
38
39 mutex_lock(&host->slot.lock);
40
41 ctx = host->slot.handler_priv;
42 if (!ctx) {
43 /*
44 * devm_kzalloc() can be called after device_initialize(), even
45 * before device_add(), i.e., between mmc_alloc_host() and
46 * mmc_add_host()
47 */
48 ctx = devm_kzalloc(&host->class_dev, sizeof(*ctx) + 2 * len,
49 GFP_KERNEL);
50 if (ctx) {
51 ctx->ro_label = ctx->cd_label + len;
52 snprintf(ctx->cd_label, len, "%s cd", dev_name(host->parent));
53 snprintf(ctx->ro_label, len, "%s ro", dev_name(host->parent));
54 ctx->cd_gpio = -EINVAL;
55 ctx->ro_gpio = -EINVAL;
56 host->slot.handler_priv = ctx;
57 }
58 }
59
60 mutex_unlock(&host->slot.lock);
61
62 return ctx ? 0 : -ENOMEM;
63}
64
65int mmc_gpio_get_ro(struct mmc_host *host)
66{
67 struct mmc_gpio *ctx = host->slot.handler_priv;
68
69 if (!ctx || !gpio_is_valid(ctx->ro_gpio))
70 return -ENOSYS;
71
72 return !gpio_get_value_cansleep(ctx->ro_gpio) ^
73 !!(host->caps2 & MMC_CAP2_RO_ACTIVE_HIGH);
74}
75EXPORT_SYMBOL(mmc_gpio_get_ro);
76
77int mmc_gpio_get_cd(struct mmc_host *host)
78{
79 struct mmc_gpio *ctx = host->slot.handler_priv;
80
81 if (!ctx || !gpio_is_valid(ctx->cd_gpio))
82 return -ENOSYS;
83
84 return !gpio_get_value_cansleep(ctx->cd_gpio) ^
85 !!(host->caps2 & MMC_CAP2_CD_ACTIVE_HIGH);
86}
87EXPORT_SYMBOL(mmc_gpio_get_cd);
88
89int mmc_gpio_request_ro(struct mmc_host *host, unsigned int gpio)
90{
91 struct mmc_gpio *ctx;
92 int ret;
93
94 if (!gpio_is_valid(gpio))
95 return -EINVAL;
96
97 ret = mmc_gpio_alloc(host);
98 if (ret < 0)
99 return ret;
100
101 ctx = host->slot.handler_priv;
102
103 return gpio_request_one(gpio, GPIOF_DIR_IN, ctx->ro_label);
104}
105EXPORT_SYMBOL(mmc_gpio_request_ro);
106
107int mmc_gpio_request_cd(struct mmc_host *host, unsigned int gpio)
108{
109 struct mmc_gpio *ctx;
110 int irq = gpio_to_irq(gpio);
111 int ret;
112
113 ret = mmc_gpio_alloc(host);
114 if (ret < 0)
115 return ret;
116
117 ctx = host->slot.handler_priv;
118
119 ret = gpio_request_one(gpio, GPIOF_DIR_IN, ctx->cd_label);
120 if (ret < 0)
121 /*
122 * don't bother freeing memory. It might still get used by other
123 * slot functions, in any case it will be freed, when the device
124 * is destroyed.
125 */
126 return ret;
127
128 /*
129 * Even if gpio_to_irq() returns a valid IRQ number, the platform might
130 * still prefer to poll, e.g., because that IRQ number is already used
131 * by another unit and cannot be shared.
132 */
133 if (irq >= 0 && host->caps & MMC_CAP_NEEDS_POLL)
134 irq = -EINVAL;
135
136 if (irq >= 0) {
137 ret = request_threaded_irq(irq, NULL, mmc_gpio_cd_irqt,
138 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
139 ctx->cd_label, host);
140 if (ret < 0)
141 irq = ret;
142 }
143
144 host->slot.cd_irq = irq;
145
146 if (irq < 0)
147 host->caps |= MMC_CAP_NEEDS_POLL;
148
149 ctx->cd_gpio = gpio;
150
151 return 0;
152}
153EXPORT_SYMBOL(mmc_gpio_request_cd);
154
155void mmc_gpio_free_ro(struct mmc_host *host)
156{
157 struct mmc_gpio *ctx = host->slot.handler_priv;
158 int gpio;
159
160 if (!ctx || !gpio_is_valid(ctx->ro_gpio))
161 return;
162
163 gpio = ctx->ro_gpio;
164 ctx->ro_gpio = -EINVAL;
165
166 gpio_free(gpio);
167}
168EXPORT_SYMBOL(mmc_gpio_free_ro);
169
170void mmc_gpio_free_cd(struct mmc_host *host)
171{
172 struct mmc_gpio *ctx = host->slot.handler_priv;
173 int gpio;
174
175 if (!ctx || !gpio_is_valid(ctx->cd_gpio))
176 return;
177
178 if (host->slot.cd_irq >= 0) {
179 free_irq(host->slot.cd_irq, host);
180 host->slot.cd_irq = -EINVAL;
181 }
182
183 gpio = ctx->cd_gpio;
184 ctx->cd_gpio = -EINVAL;
185
186 gpio_free(gpio);
187}
188EXPORT_SYMBOL(mmc_gpio_free_cd);
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index f2c115e06438..322412cec4ee 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -391,11 +391,17 @@ static int atmci_regs_show(struct seq_file *s, void *v)
391 clk_disable(host->mck); 391 clk_disable(host->mck);
392 spin_unlock_bh(&host->lock); 392 spin_unlock_bh(&host->lock);
393 393
394 seq_printf(s, "MR:\t0x%08x%s%s CLKDIV=%u\n", 394 seq_printf(s, "MR:\t0x%08x%s%s ",
395 buf[ATMCI_MR / 4], 395 buf[ATMCI_MR / 4],
396 buf[ATMCI_MR / 4] & ATMCI_MR_RDPROOF ? " RDPROOF" : "", 396 buf[ATMCI_MR / 4] & ATMCI_MR_RDPROOF ? " RDPROOF" : "",
397 buf[ATMCI_MR / 4] & ATMCI_MR_WRPROOF ? " WRPROOF" : "", 397 buf[ATMCI_MR / 4] & ATMCI_MR_WRPROOF ? " WRPROOF" : "");
398 buf[ATMCI_MR / 4] & 0xff); 398 if (host->caps.has_odd_clk_div)
399 seq_printf(s, "{CLKDIV,CLKODD}=%u\n",
400 ((buf[ATMCI_MR / 4] & 0xff) << 1)
401 | ((buf[ATMCI_MR / 4] >> 16) & 1));
402 else
403 seq_printf(s, "CLKDIV=%u\n",
404 (buf[ATMCI_MR / 4] & 0xff));
399 seq_printf(s, "DTOR:\t0x%08x\n", buf[ATMCI_DTOR / 4]); 405 seq_printf(s, "DTOR:\t0x%08x\n", buf[ATMCI_DTOR / 4]);
400 seq_printf(s, "SDCR:\t0x%08x\n", buf[ATMCI_SDCR / 4]); 406 seq_printf(s, "SDCR:\t0x%08x\n", buf[ATMCI_SDCR / 4]);
401 seq_printf(s, "ARGR:\t0x%08x\n", buf[ATMCI_ARGR / 4]); 407 seq_printf(s, "ARGR:\t0x%08x\n", buf[ATMCI_ARGR / 4]);
@@ -1685,7 +1691,6 @@ static void atmci_tasklet_func(unsigned long priv)
1685 1691
1686 dev_dbg(&host->pdev->dev, "FSM: cmd ready\n"); 1692 dev_dbg(&host->pdev->dev, "FSM: cmd ready\n");
1687 host->cmd = NULL; 1693 host->cmd = NULL;
1688 host->data = NULL;
1689 data->bytes_xfered = data->blocks * data->blksz; 1694 data->bytes_xfered = data->blocks * data->blksz;
1690 data->error = 0; 1695 data->error = 0;
1691 atmci_command_complete(host, mrq->stop); 1696 atmci_command_complete(host, mrq->stop);
@@ -1699,6 +1704,7 @@ static void atmci_tasklet_func(unsigned long priv)
1699 atmci_writel(host, ATMCI_IER, ATMCI_NOTBUSY); 1704 atmci_writel(host, ATMCI_IER, ATMCI_NOTBUSY);
1700 state = STATE_WAITING_NOTBUSY; 1705 state = STATE_WAITING_NOTBUSY;
1701 } 1706 }
1707 host->data = NULL;
1702 break; 1708 break;
1703 1709
1704 case STATE_END_REQUEST: 1710 case STATE_END_REQUEST:
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 1ca5e72ceb65..72dc3cde646d 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -405,11 +405,23 @@ static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)
405static int dw_mci_idmac_init(struct dw_mci *host) 405static int dw_mci_idmac_init(struct dw_mci *host)
406{ 406{
407 struct idmac_desc *p; 407 struct idmac_desc *p;
408 int i; 408 int i, dma_support;
409 409
410 /* Number of descriptors in the ring buffer */ 410 /* Number of descriptors in the ring buffer */
411 host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc); 411 host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
412 412
413 /* Check if Hardware Configuration Register has support for DMA */
414 dma_support = (mci_readl(host, HCON) >> 16) & 0x3;
415
416 if (!dma_support || dma_support > 2) {
417 dev_err(&host->dev,
418 "Host Controller does not support IDMA Tx.\n");
419 host->dma_ops = NULL;
420 return -ENODEV;
421 }
422
423 dev_info(&host->dev, "Using internal DMA controller.\n");
424
413 /* Forward link the descriptor list */ 425 /* Forward link the descriptor list */
414 for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) 426 for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
415 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1)); 427 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1));
@@ -1876,7 +1888,6 @@ static void dw_mci_init_dma(struct dw_mci *host)
1876 /* Determine which DMA interface to use */ 1888 /* Determine which DMA interface to use */
1877#ifdef CONFIG_MMC_DW_IDMAC 1889#ifdef CONFIG_MMC_DW_IDMAC
1878 host->dma_ops = &dw_mci_idmac_ops; 1890 host->dma_ops = &dw_mci_idmac_ops;
1879 dev_info(&host->dev, "Using internal DMA controller.\n");
1880#endif 1891#endif
1881 1892
1882 if (!host->dma_ops) 1893 if (!host->dma_ops)
@@ -2175,7 +2186,7 @@ int dw_mci_resume(struct dw_mci *host)
2175 return ret; 2186 return ret;
2176 } 2187 }
2177 2188
2178 if (host->dma_ops->init) 2189 if (host->use_dma && host->dma_ops->init)
2179 host->dma_ops->init(host); 2190 host->dma_ops->init(host);
2180 2191
2181 /* Restore the old value at FIFOTH register */ 2192 /* Restore the old value at FIFOTH register */
diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
index 277161d279b8..a51f9309ffbb 100644
--- a/drivers/mmc/host/mxs-mmc.c
+++ b/drivers/mmc/host/mxs-mmc.c
@@ -164,16 +164,23 @@ struct mxs_mmc_host {
164 spinlock_t lock; 164 spinlock_t lock;
165 int sdio_irq_en; 165 int sdio_irq_en;
166 int wp_gpio; 166 int wp_gpio;
167 bool wp_inverted;
167}; 168};
168 169
169static int mxs_mmc_get_ro(struct mmc_host *mmc) 170static int mxs_mmc_get_ro(struct mmc_host *mmc)
170{ 171{
171 struct mxs_mmc_host *host = mmc_priv(mmc); 172 struct mxs_mmc_host *host = mmc_priv(mmc);
173 int ret;
172 174
173 if (!gpio_is_valid(host->wp_gpio)) 175 if (!gpio_is_valid(host->wp_gpio))
174 return -EINVAL; 176 return -EINVAL;
175 177
176 return gpio_get_value(host->wp_gpio); 178 ret = gpio_get_value(host->wp_gpio);
179
180 if (host->wp_inverted)
181 ret = !ret;
182
183 return ret;
177} 184}
178 185
179static int mxs_mmc_get_cd(struct mmc_host *mmc) 186static int mxs_mmc_get_cd(struct mmc_host *mmc)
@@ -707,6 +714,8 @@ static int mxs_mmc_probe(struct platform_device *pdev)
707 struct pinctrl *pinctrl; 714 struct pinctrl *pinctrl;
708 int ret = 0, irq_err, irq_dma; 715 int ret = 0, irq_err, irq_dma;
709 dma_cap_mask_t mask; 716 dma_cap_mask_t mask;
717 struct regulator *reg_vmmc;
718 enum of_gpio_flags flags;
710 719
711 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 720 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
712 dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); 721 dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0);
@@ -747,6 +756,16 @@ static int mxs_mmc_probe(struct platform_device *pdev)
747 host->mmc = mmc; 756 host->mmc = mmc;
748 host->sdio_irq_en = 0; 757 host->sdio_irq_en = 0;
749 758
759 reg_vmmc = devm_regulator_get(&pdev->dev, "vmmc");
760 if (!IS_ERR(reg_vmmc)) {
761 ret = regulator_enable(reg_vmmc);
762 if (ret) {
763 dev_err(&pdev->dev,
764 "Failed to enable vmmc regulator: %d\n", ret);
765 goto out_mmc_free;
766 }
767 }
768
750 pinctrl = devm_pinctrl_get_select_default(&pdev->dev); 769 pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
751 if (IS_ERR(pinctrl)) { 770 if (IS_ERR(pinctrl)) {
752 ret = PTR_ERR(pinctrl); 771 ret = PTR_ERR(pinctrl);
@@ -785,7 +804,10 @@ static int mxs_mmc_probe(struct platform_device *pdev)
785 mmc->caps |= MMC_CAP_4_BIT_DATA; 804 mmc->caps |= MMC_CAP_4_BIT_DATA;
786 else if (bus_width == 8) 805 else if (bus_width == 8)
787 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; 806 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
788 host->wp_gpio = of_get_named_gpio(np, "wp-gpios", 0); 807 host->wp_gpio = of_get_named_gpio_flags(np, "wp-gpios", 0,
808 &flags);
809 if (flags & OF_GPIO_ACTIVE_LOW)
810 host->wp_inverted = 1;
789 } else { 811 } else {
790 if (pdata->flags & SLOTF_8_BIT_CAPABLE) 812 if (pdata->flags & SLOTF_8_BIT_CAPABLE)
791 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; 813 mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 389a3eedfc24..bc28627af66b 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -1089,7 +1089,7 @@ static int omap_hsmmc_switch_opcond(struct omap_hsmmc_host *host, int vdd)
1089 /* Disable the clocks */ 1089 /* Disable the clocks */
1090 pm_runtime_put_sync(host->dev); 1090 pm_runtime_put_sync(host->dev);
1091 if (host->dbclk) 1091 if (host->dbclk)
1092 clk_disable(host->dbclk); 1092 clk_disable_unprepare(host->dbclk);
1093 1093
1094 /* Turn the power off */ 1094 /* Turn the power off */
1095 ret = mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0); 1095 ret = mmc_slot(host).set_power(host->dev, host->slot_id, 0, 0);
@@ -1100,7 +1100,7 @@ static int omap_hsmmc_switch_opcond(struct omap_hsmmc_host *host, int vdd)
1100 vdd); 1100 vdd);
1101 pm_runtime_get_sync(host->dev); 1101 pm_runtime_get_sync(host->dev);
1102 if (host->dbclk) 1102 if (host->dbclk)
1103 clk_enable(host->dbclk); 1103 clk_prepare_enable(host->dbclk);
1104 1104
1105 if (ret != 0) 1105 if (ret != 0)
1106 goto err; 1106 goto err;
@@ -1899,7 +1899,7 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev)
1899 if (IS_ERR(host->dbclk)) { 1899 if (IS_ERR(host->dbclk)) {
1900 dev_warn(mmc_dev(host->mmc), "Failed to get debounce clk\n"); 1900 dev_warn(mmc_dev(host->mmc), "Failed to get debounce clk\n");
1901 host->dbclk = NULL; 1901 host->dbclk = NULL;
1902 } else if (clk_enable(host->dbclk) != 0) { 1902 } else if (clk_prepare_enable(host->dbclk) != 0) {
1903 dev_warn(mmc_dev(host->mmc), "Failed to enable debounce clk\n"); 1903 dev_warn(mmc_dev(host->mmc), "Failed to enable debounce clk\n");
1904 clk_put(host->dbclk); 1904 clk_put(host->dbclk);
1905 host->dbclk = NULL; 1905 host->dbclk = NULL;
@@ -1931,6 +1931,7 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev)
1931 res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); 1931 res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
1932 if (!res) { 1932 if (!res) {
1933 dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n"); 1933 dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n");
1934 ret = -ENXIO;
1934 goto err_irq; 1935 goto err_irq;
1935 } 1936 }
1936 host->dma_line_tx = res->start; 1937 host->dma_line_tx = res->start;
@@ -1938,6 +1939,7 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev)
1938 res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); 1939 res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
1939 if (!res) { 1940 if (!res) {
1940 dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n"); 1941 dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n");
1942 ret = -ENXIO;
1941 goto err_irq; 1943 goto err_irq;
1942 } 1944 }
1943 host->dma_line_rx = res->start; 1945 host->dma_line_rx = res->start;
@@ -2023,7 +2025,7 @@ err_irq:
2023 pm_runtime_disable(host->dev); 2025 pm_runtime_disable(host->dev);
2024 clk_put(host->fclk); 2026 clk_put(host->fclk);
2025 if (host->dbclk) { 2027 if (host->dbclk) {
2026 clk_disable(host->dbclk); 2028 clk_disable_unprepare(host->dbclk);
2027 clk_put(host->dbclk); 2029 clk_put(host->dbclk);
2028 } 2030 }
2029err1: 2031err1:
@@ -2058,7 +2060,7 @@ static int __devexit omap_hsmmc_remove(struct platform_device *pdev)
2058 pm_runtime_disable(host->dev); 2060 pm_runtime_disable(host->dev);
2059 clk_put(host->fclk); 2061 clk_put(host->fclk);
2060 if (host->dbclk) { 2062 if (host->dbclk) {
2061 clk_disable(host->dbclk); 2063 clk_disable_unprepare(host->dbclk);
2062 clk_put(host->dbclk); 2064 clk_put(host->dbclk);
2063 } 2065 }
2064 2066
@@ -2116,7 +2118,7 @@ static int omap_hsmmc_suspend(struct device *dev)
2116 } 2118 }
2117 2119
2118 if (host->dbclk) 2120 if (host->dbclk)
2119 clk_disable(host->dbclk); 2121 clk_disable_unprepare(host->dbclk);
2120err: 2122err:
2121 pm_runtime_put_sync(host->dev); 2123 pm_runtime_put_sync(host->dev);
2122 return ret; 2124 return ret;
@@ -2137,7 +2139,7 @@ static int omap_hsmmc_resume(struct device *dev)
2137 pm_runtime_get_sync(host->dev); 2139 pm_runtime_get_sync(host->dev);
2138 2140
2139 if (host->dbclk) 2141 if (host->dbclk)
2140 clk_enable(host->dbclk); 2142 clk_prepare_enable(host->dbclk);
2141 2143
2142 if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER)) 2144 if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER))
2143 omap_hsmmc_conf_bus_power(host); 2145 omap_hsmmc_conf_bus_power(host);
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c
index c3622a69f432..bd5a5cce122c 100644
--- a/drivers/mmc/host/s3cmci.c
+++ b/drivers/mmc/host/s3cmci.c
@@ -26,7 +26,6 @@
26#include <mach/dma.h> 26#include <mach/dma.h>
27 27
28#include <mach/regs-sdi.h> 28#include <mach/regs-sdi.h>
29#include <mach/regs-gpio.h>
30 29
31#include <plat/mci.h> 30#include <plat/mci.h>
32 31
@@ -1237,12 +1236,9 @@ static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1237 switch (ios->power_mode) { 1236 switch (ios->power_mode) {
1238 case MMC_POWER_ON: 1237 case MMC_POWER_ON:
1239 case MMC_POWER_UP: 1238 case MMC_POWER_UP:
1240 s3c2410_gpio_cfgpin(S3C2410_GPE(5), S3C2410_GPE5_SDCLK); 1239 /* Configure GPE5...GPE10 pins in SD mode */
1241 s3c2410_gpio_cfgpin(S3C2410_GPE(6), S3C2410_GPE6_SDCMD); 1240 s3c_gpio_cfgall_range(S3C2410_GPE(5), 6, S3C_GPIO_SFN(2),
1242 s3c2410_gpio_cfgpin(S3C2410_GPE(7), S3C2410_GPE7_SDDAT0); 1241 S3C_GPIO_PULL_NONE);
1243 s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);
1244 s3c2410_gpio_cfgpin(S3C2410_GPE(9), S3C2410_GPE9_SDDAT2);
1245 s3c2410_gpio_cfgpin(S3C2410_GPE(10), S3C2410_GPE10_SDDAT3);
1246 1242
1247 if (host->pdata->set_power) 1243 if (host->pdata->set_power)
1248 host->pdata->set_power(ios->power_mode, ios->vdd); 1244 host->pdata->set_power(ios->power_mode, ios->vdd);
diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c
index 177f697b5835..a6e53a1ebb08 100644
--- a/drivers/mmc/host/sdhci-dove.c
+++ b/drivers/mmc/host/sdhci-dove.c
@@ -20,11 +20,17 @@
20 */ 20 */
21 21
22#include <linux/io.h> 22#include <linux/io.h>
23#include <linux/clk.h>
24#include <linux/err.h>
23#include <linux/module.h> 25#include <linux/module.h>
24#include <linux/mmc/host.h> 26#include <linux/mmc/host.h>
25 27
26#include "sdhci-pltfm.h" 28#include "sdhci-pltfm.h"
27 29
30struct sdhci_dove_priv {
31 struct clk *clk;
32};
33
28static u16 sdhci_dove_readw(struct sdhci_host *host, int reg) 34static u16 sdhci_dove_readw(struct sdhci_host *host, int reg)
29{ 35{
30 u16 ret; 36 u16 ret;
@@ -66,16 +72,57 @@ static struct sdhci_pltfm_data sdhci_dove_pdata = {
66 .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER | 72 .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER |
67 SDHCI_QUIRK_NO_BUSY_IRQ | 73 SDHCI_QUIRK_NO_BUSY_IRQ |
68 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL | 74 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
69 SDHCI_QUIRK_FORCE_DMA, 75 SDHCI_QUIRK_FORCE_DMA |
76 SDHCI_QUIRK_NO_HISPD_BIT,
70}; 77};
71 78
72static int __devinit sdhci_dove_probe(struct platform_device *pdev) 79static int __devinit sdhci_dove_probe(struct platform_device *pdev)
73{ 80{
74 return sdhci_pltfm_register(pdev, &sdhci_dove_pdata); 81 struct sdhci_host *host;
82 struct sdhci_pltfm_host *pltfm_host;
83 struct sdhci_dove_priv *priv;
84 int ret;
85
86 ret = sdhci_pltfm_register(pdev, &sdhci_dove_pdata);
87 if (ret)
88 goto sdhci_dove_register_fail;
89
90 priv = devm_kzalloc(&pdev->dev, sizeof(struct sdhci_dove_priv),
91 GFP_KERNEL);
92 if (!priv) {
93 dev_err(&pdev->dev, "unable to allocate private data");
94 ret = -ENOMEM;
95 goto sdhci_dove_allocate_fail;
96 }
97
98 host = platform_get_drvdata(pdev);
99 pltfm_host = sdhci_priv(host);
100 pltfm_host->priv = priv;
101
102 priv->clk = clk_get(&pdev->dev, NULL);
103 if (!IS_ERR(priv->clk))
104 clk_prepare_enable(priv->clk);
105 return 0;
106
107sdhci_dove_allocate_fail:
108 sdhci_pltfm_unregister(pdev);
109sdhci_dove_register_fail:
110 return ret;
75} 111}
76 112
77static int __devexit sdhci_dove_remove(struct platform_device *pdev) 113static int __devexit sdhci_dove_remove(struct platform_device *pdev)
78{ 114{
115 struct sdhci_host *host = platform_get_drvdata(pdev);
116 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
117 struct sdhci_dove_priv *priv = pltfm_host->priv;
118
119 if (priv->clk) {
120 if (!IS_ERR(priv->clk)) {
121 clk_disable_unprepare(priv->clk);
122 clk_put(priv->clk);
123 }
124 devm_kfree(&pdev->dev, priv->clk);
125 }
79 return sdhci_pltfm_unregister(pdev); 126 return sdhci_pltfm_unregister(pdev);
80} 127}
81 128
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index ebbe984e5d00..e23f8134591c 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -299,6 +299,8 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
299 299
300static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg) 300static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg)
301{ 301{
302 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
303 struct pltfm_imx_data *imx_data = pltfm_host->priv;
302 u32 new_val; 304 u32 new_val;
303 305
304 switch (reg) { 306 switch (reg) {
@@ -315,8 +317,11 @@ static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg)
315 SDHCI_CTRL_D3CD); 317 SDHCI_CTRL_D3CD);
316 /* ensure the endianess */ 318 /* ensure the endianess */
317 new_val |= ESDHC_HOST_CONTROL_LE; 319 new_val |= ESDHC_HOST_CONTROL_LE;
318 /* DMA mode bits are shifted */ 320 /* bits 8&9 are reserved on mx25 */
319 new_val |= (val & SDHCI_CTRL_DMA_MASK) << 5; 321 if (!is_imx25_esdhc(imx_data)) {
322 /* DMA mode bits are shifted */
323 new_val |= (val & SDHCI_CTRL_DMA_MASK) << 5;
324 }
320 325
321 esdhc_clrset_le(host, 0xffff, new_val, reg); 326 esdhc_clrset_le(host, 0xffff, new_val, reg);
322 return; 327 return;
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index 69ef0beae104..504da715a41a 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -157,6 +157,7 @@ static const struct sdhci_pci_fixes sdhci_ene_714 = {
157static const struct sdhci_pci_fixes sdhci_cafe = { 157static const struct sdhci_pci_fixes sdhci_cafe = {
158 .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER | 158 .quirks = SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER |
159 SDHCI_QUIRK_NO_BUSY_IRQ | 159 SDHCI_QUIRK_NO_BUSY_IRQ |
160 SDHCI_QUIRK_BROKEN_CARD_DETECTION |
160 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, 161 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
161}; 162};
162 163
diff --git a/drivers/mmc/host/sdhci-pxav2.c b/drivers/mmc/host/sdhci-pxav2.c
index dbb75bfbcffb..b6ee8857e226 100644
--- a/drivers/mmc/host/sdhci-pxav2.c
+++ b/drivers/mmc/host/sdhci-pxav2.c
@@ -28,6 +28,9 @@
28#include <linux/mmc/host.h> 28#include <linux/mmc/host.h>
29#include <linux/platform_data/pxa_sdhci.h> 29#include <linux/platform_data/pxa_sdhci.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/of.h>
32#include <linux/of_device.h>
33
31#include "sdhci.h" 34#include "sdhci.h"
32#include "sdhci-pltfm.h" 35#include "sdhci-pltfm.h"
33 36
@@ -121,6 +124,48 @@ static struct sdhci_ops pxav2_sdhci_ops = {
121 .platform_8bit_width = pxav2_mmc_set_width, 124 .platform_8bit_width = pxav2_mmc_set_width,
122}; 125};
123 126
127#ifdef CONFIG_OF
128static const struct of_device_id sdhci_pxav2_of_match[] = {
129 {
130 .compatible = "mrvl,pxav2-mmc",
131 },
132 {},
133};
134MODULE_DEVICE_TABLE(of, sdhci_pxav2_of_match);
135
136static struct sdhci_pxa_platdata *pxav2_get_mmc_pdata(struct device *dev)
137{
138 struct sdhci_pxa_platdata *pdata;
139 struct device_node *np = dev->of_node;
140 u32 bus_width;
141 u32 clk_delay_cycles;
142
143 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
144 if (!pdata)
145 return NULL;
146
147 if (of_find_property(np, "non-removable", NULL))
148 pdata->flags |= PXA_FLAG_CARD_PERMANENT;
149
150 of_property_read_u32(np, "bus-width", &bus_width);
151 if (bus_width == 8)
152 pdata->flags |= PXA_FLAG_SD_8_BIT_CAPABLE_SLOT;
153
154 of_property_read_u32(np, "mrvl,clk-delay-cycles", &clk_delay_cycles);
155 if (clk_delay_cycles > 0) {
156 pdata->clk_delay_sel = 1;
157 pdata->clk_delay_cycles = clk_delay_cycles;
158 }
159
160 return pdata;
161}
162#else
163static inline struct sdhci_pxa_platdata *pxav2_get_mmc_pdata(struct device *dev)
164{
165 return NULL;
166}
167#endif
168
124static int __devinit sdhci_pxav2_probe(struct platform_device *pdev) 169static int __devinit sdhci_pxav2_probe(struct platform_device *pdev)
125{ 170{
126 struct sdhci_pltfm_host *pltfm_host; 171 struct sdhci_pltfm_host *pltfm_host;
@@ -128,6 +173,8 @@ static int __devinit sdhci_pxav2_probe(struct platform_device *pdev)
128 struct device *dev = &pdev->dev; 173 struct device *dev = &pdev->dev;
129 struct sdhci_host *host = NULL; 174 struct sdhci_host *host = NULL;
130 struct sdhci_pxa *pxa = NULL; 175 struct sdhci_pxa *pxa = NULL;
176 const struct of_device_id *match;
177
131 int ret; 178 int ret;
132 struct clk *clk; 179 struct clk *clk;
133 180
@@ -156,6 +203,10 @@ static int __devinit sdhci_pxav2_probe(struct platform_device *pdev)
156 | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL 203 | SDHCI_QUIRK_BROKEN_TIMEOUT_VAL
157 | SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN; 204 | SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN;
158 205
206 match = of_match_device(of_match_ptr(sdhci_pxav2_of_match), &pdev->dev);
207 if (match) {
208 pdata = pxav2_get_mmc_pdata(dev);
209 }
159 if (pdata) { 210 if (pdata) {
160 if (pdata->flags & PXA_FLAG_CARD_PERMANENT) { 211 if (pdata->flags & PXA_FLAG_CARD_PERMANENT) {
161 /* on-chip device */ 212 /* on-chip device */
@@ -218,6 +269,9 @@ static struct platform_driver sdhci_pxav2_driver = {
218 .driver = { 269 .driver = {
219 .name = "sdhci-pxav2", 270 .name = "sdhci-pxav2",
220 .owner = THIS_MODULE, 271 .owner = THIS_MODULE,
272#ifdef CONFIG_OF
273 .of_match_table = sdhci_pxav2_of_match,
274#endif
221 .pm = SDHCI_PLTFM_PMOPS, 275 .pm = SDHCI_PLTFM_PMOPS,
222 }, 276 },
223 .probe = sdhci_pxav2_probe, 277 .probe = sdhci_pxav2_probe,
diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
index f29695683556..07fe3834fe0b 100644
--- a/drivers/mmc/host/sdhci-pxav3.c
+++ b/drivers/mmc/host/sdhci-pxav3.c
@@ -28,6 +28,9 @@
28#include <linux/slab.h> 28#include <linux/slab.h>
29#include <linux/delay.h> 29#include <linux/delay.h>
30#include <linux/module.h> 30#include <linux/module.h>
31#include <linux/of.h>
32#include <linux/of_device.h>
33
31#include "sdhci.h" 34#include "sdhci.h"
32#include "sdhci-pltfm.h" 35#include "sdhci-pltfm.h"
33 36
@@ -164,6 +167,46 @@ static struct sdhci_ops pxav3_sdhci_ops = {
164 .platform_send_init_74_clocks = pxav3_gen_init_74_clocks, 167 .platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
165}; 168};
166 169
170#ifdef CONFIG_OF
171static const struct of_device_id sdhci_pxav3_of_match[] = {
172 {
173 .compatible = "mrvl,pxav3-mmc",
174 },
175 {},
176};
177MODULE_DEVICE_TABLE(of, sdhci_pxav3_of_match);
178
179static struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct device *dev)
180{
181 struct sdhci_pxa_platdata *pdata;
182 struct device_node *np = dev->of_node;
183 u32 bus_width;
184 u32 clk_delay_cycles;
185
186 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
187 if (!pdata)
188 return NULL;
189
190 if (of_find_property(np, "non-removable", NULL))
191 pdata->flags |= PXA_FLAG_CARD_PERMANENT;
192
193 of_property_read_u32(np, "bus-width", &bus_width);
194 if (bus_width == 8)
195 pdata->flags |= PXA_FLAG_SD_8_BIT_CAPABLE_SLOT;
196
197 of_property_read_u32(np, "mrvl,clk-delay-cycles", &clk_delay_cycles);
198 if (clk_delay_cycles > 0)
199 pdata->clk_delay_cycles = clk_delay_cycles;
200
201 return pdata;
202}
203#else
204static inline struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct device *dev)
205{
206 return NULL;
207}
208#endif
209
167static int __devinit sdhci_pxav3_probe(struct platform_device *pdev) 210static int __devinit sdhci_pxav3_probe(struct platform_device *pdev)
168{ 211{
169 struct sdhci_pltfm_host *pltfm_host; 212 struct sdhci_pltfm_host *pltfm_host;
@@ -171,6 +214,8 @@ static int __devinit sdhci_pxav3_probe(struct platform_device *pdev)
171 struct device *dev = &pdev->dev; 214 struct device *dev = &pdev->dev;
172 struct sdhci_host *host = NULL; 215 struct sdhci_host *host = NULL;
173 struct sdhci_pxa *pxa = NULL; 216 struct sdhci_pxa *pxa = NULL;
217 const struct of_device_id *match;
218
174 int ret; 219 int ret;
175 struct clk *clk; 220 struct clk *clk;
176 221
@@ -202,6 +247,10 @@ static int __devinit sdhci_pxav3_probe(struct platform_device *pdev)
202 /* enable 1/8V DDR capable */ 247 /* enable 1/8V DDR capable */
203 host->mmc->caps |= MMC_CAP_1_8V_DDR; 248 host->mmc->caps |= MMC_CAP_1_8V_DDR;
204 249
250 match = of_match_device(of_match_ptr(sdhci_pxav3_of_match), &pdev->dev);
251 if (match)
252 pdata = pxav3_get_mmc_pdata(dev);
253
205 if (pdata) { 254 if (pdata) {
206 if (pdata->flags & PXA_FLAG_CARD_PERMANENT) { 255 if (pdata->flags & PXA_FLAG_CARD_PERMANENT) {
207 /* on-chip device */ 256 /* on-chip device */
@@ -263,6 +312,9 @@ static int __devexit sdhci_pxav3_remove(struct platform_device *pdev)
263static struct platform_driver sdhci_pxav3_driver = { 312static struct platform_driver sdhci_pxav3_driver = {
264 .driver = { 313 .driver = {
265 .name = "sdhci-pxav3", 314 .name = "sdhci-pxav3",
315#ifdef CONFIG_OF
316 .of_match_table = sdhci_pxav3_of_match,
317#endif
266 .owner = THIS_MODULE, 318 .owner = THIS_MODULE,
267 .pm = SDHCI_PLTFM_PMOPS, 319 .pm = SDHCI_PLTFM_PMOPS,
268 }, 320 },
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index f4b8b4db3a9a..9a11dc39921c 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -27,6 +27,7 @@
27 27
28#include <linux/mmc/mmc.h> 28#include <linux/mmc/mmc.h>
29#include <linux/mmc/host.h> 29#include <linux/mmc/host.h>
30#include <linux/mmc/card.h>
30 31
31#include "sdhci.h" 32#include "sdhci.h"
32 33
@@ -244,6 +245,19 @@ static void sdhci_init(struct sdhci_host *host, int soft)
244static void sdhci_reinit(struct sdhci_host *host) 245static void sdhci_reinit(struct sdhci_host *host)
245{ 246{
246 sdhci_init(host, 0); 247 sdhci_init(host, 0);
248 /*
249 * Retuning stuffs are affected by different cards inserted and only
250 * applicable to UHS-I cards. So reset these fields to their initial
251 * value when card is removed.
252 */
253 if (host->flags & SDHCI_USING_RETUNING_TIMER) {
254 host->flags &= ~SDHCI_USING_RETUNING_TIMER;
255
256 del_timer_sync(&host->tuning_timer);
257 host->flags &= ~SDHCI_NEEDS_RETUNING;
258 host->mmc->max_blk_count =
259 (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535;
260 }
247 sdhci_enable_card_detection(host); 261 sdhci_enable_card_detection(host);
248} 262}
249 263
@@ -1245,6 +1259,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
1245 struct sdhci_host *host; 1259 struct sdhci_host *host;
1246 bool present; 1260 bool present;
1247 unsigned long flags; 1261 unsigned long flags;
1262 u32 tuning_opcode;
1248 1263
1249 host = mmc_priv(mmc); 1264 host = mmc_priv(mmc);
1250 1265
@@ -1292,8 +1307,12 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
1292 */ 1307 */
1293 if ((host->flags & SDHCI_NEEDS_RETUNING) && 1308 if ((host->flags & SDHCI_NEEDS_RETUNING) &&
1294 !(present_state & (SDHCI_DOING_WRITE | SDHCI_DOING_READ))) { 1309 !(present_state & (SDHCI_DOING_WRITE | SDHCI_DOING_READ))) {
1310 /* eMMC uses cmd21 while sd and sdio use cmd19 */
1311 tuning_opcode = mmc->card->type == MMC_TYPE_MMC ?
1312 MMC_SEND_TUNING_BLOCK_HS200 :
1313 MMC_SEND_TUNING_BLOCK;
1295 spin_unlock_irqrestore(&host->lock, flags); 1314 spin_unlock_irqrestore(&host->lock, flags);
1296 sdhci_execute_tuning(mmc, mrq->cmd->opcode); 1315 sdhci_execute_tuning(mmc, tuning_opcode);
1297 spin_lock_irqsave(&host->lock, flags); 1316 spin_lock_irqsave(&host->lock, flags);
1298 1317
1299 /* Restore original mmc_request structure */ 1318 /* Restore original mmc_request structure */
@@ -1663,11 +1682,15 @@ static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host,
1663 pwr = sdhci_readb(host, SDHCI_POWER_CONTROL); 1682 pwr = sdhci_readb(host, SDHCI_POWER_CONTROL);
1664 pwr &= ~SDHCI_POWER_ON; 1683 pwr &= ~SDHCI_POWER_ON;
1665 sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); 1684 sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
1685 if (host->vmmc)
1686 regulator_disable(host->vmmc);
1666 1687
1667 /* Wait for 1ms as per the spec */ 1688 /* Wait for 1ms as per the spec */
1668 usleep_range(1000, 1500); 1689 usleep_range(1000, 1500);
1669 pwr |= SDHCI_POWER_ON; 1690 pwr |= SDHCI_POWER_ON;
1670 sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL); 1691 sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
1692 if (host->vmmc)
1693 regulator_enable(host->vmmc);
1671 1694
1672 pr_info(DRIVER_NAME ": Switching to 1.8V signalling " 1695 pr_info(DRIVER_NAME ": Switching to 1.8V signalling "
1673 "voltage failed, retrying with S18R set to 0\n"); 1696 "voltage failed, retrying with S18R set to 0\n");
@@ -1855,6 +1878,7 @@ out:
1855 */ 1878 */
1856 if (!(host->flags & SDHCI_NEEDS_RETUNING) && host->tuning_count && 1879 if (!(host->flags & SDHCI_NEEDS_RETUNING) && host->tuning_count &&
1857 (host->tuning_mode == SDHCI_TUNING_MODE_1)) { 1880 (host->tuning_mode == SDHCI_TUNING_MODE_1)) {
1881 host->flags |= SDHCI_USING_RETUNING_TIMER;
1858 mod_timer(&host->tuning_timer, jiffies + 1882 mod_timer(&host->tuning_timer, jiffies +
1859 host->tuning_count * HZ); 1883 host->tuning_count * HZ);
1860 /* Tuning mode 1 limits the maximum data length to 4MB */ 1884 /* Tuning mode 1 limits the maximum data length to 4MB */
@@ -1872,10 +1896,10 @@ out:
1872 * try tuning again at a later time, when the re-tuning timer expires. 1896 * try tuning again at a later time, when the re-tuning timer expires.
1873 * So for these controllers, we return 0. Since there might be other 1897 * So for these controllers, we return 0. Since there might be other
1874 * controllers who do not have this capability, we return error for 1898 * controllers who do not have this capability, we return error for
1875 * them. 1899 * them. SDHCI_USING_RETUNING_TIMER means the host is currently using
1900 * a retuning timer to do the retuning for the card.
1876 */ 1901 */
1877 if (err && host->tuning_count && 1902 if (err && (host->flags & SDHCI_USING_RETUNING_TIMER))
1878 host->tuning_mode == SDHCI_TUNING_MODE_1)
1879 err = 0; 1903 err = 0;
1880 1904
1881 sdhci_clear_set_irqs(host, SDHCI_INT_DATA_AVAIL, ier); 1905 sdhci_clear_set_irqs(host, SDHCI_INT_DATA_AVAIL, ier);
@@ -2382,7 +2406,6 @@ out:
2382int sdhci_suspend_host(struct sdhci_host *host) 2406int sdhci_suspend_host(struct sdhci_host *host)
2383{ 2407{
2384 int ret; 2408 int ret;
2385 bool has_tuning_timer;
2386 2409
2387 if (host->ops->platform_suspend) 2410 if (host->ops->platform_suspend)
2388 host->ops->platform_suspend(host); 2411 host->ops->platform_suspend(host);
@@ -2390,16 +2413,14 @@ int sdhci_suspend_host(struct sdhci_host *host)
2390 sdhci_disable_card_detection(host); 2413 sdhci_disable_card_detection(host);
2391 2414
2392 /* Disable tuning since we are suspending */ 2415 /* Disable tuning since we are suspending */
2393 has_tuning_timer = host->version >= SDHCI_SPEC_300 && 2416 if (host->flags & SDHCI_USING_RETUNING_TIMER) {
2394 host->tuning_count && host->tuning_mode == SDHCI_TUNING_MODE_1;
2395 if (has_tuning_timer) {
2396 del_timer_sync(&host->tuning_timer); 2417 del_timer_sync(&host->tuning_timer);
2397 host->flags &= ~SDHCI_NEEDS_RETUNING; 2418 host->flags &= ~SDHCI_NEEDS_RETUNING;
2398 } 2419 }
2399 2420
2400 ret = mmc_suspend_host(host->mmc); 2421 ret = mmc_suspend_host(host->mmc);
2401 if (ret) { 2422 if (ret) {
2402 if (has_tuning_timer) { 2423 if (host->flags & SDHCI_USING_RETUNING_TIMER) {
2403 host->flags |= SDHCI_NEEDS_RETUNING; 2424 host->flags |= SDHCI_NEEDS_RETUNING;
2404 mod_timer(&host->tuning_timer, jiffies + 2425 mod_timer(&host->tuning_timer, jiffies +
2405 host->tuning_count * HZ); 2426 host->tuning_count * HZ);
@@ -2450,8 +2471,7 @@ int sdhci_resume_host(struct sdhci_host *host)
2450 host->ops->platform_resume(host); 2471 host->ops->platform_resume(host);
2451 2472
2452 /* Set the re-tuning expiration flag */ 2473 /* Set the re-tuning expiration flag */
2453 if ((host->version >= SDHCI_SPEC_300) && host->tuning_count && 2474 if (host->flags & SDHCI_USING_RETUNING_TIMER)
2454 (host->tuning_mode == SDHCI_TUNING_MODE_1))
2455 host->flags |= SDHCI_NEEDS_RETUNING; 2475 host->flags |= SDHCI_NEEDS_RETUNING;
2456 2476
2457 return ret; 2477 return ret;
@@ -2490,8 +2510,7 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host)
2490 int ret = 0; 2510 int ret = 0;
2491 2511
2492 /* Disable tuning since we are suspending */ 2512 /* Disable tuning since we are suspending */
2493 if (host->version >= SDHCI_SPEC_300 && 2513 if (host->flags & SDHCI_USING_RETUNING_TIMER) {
2494 host->tuning_mode == SDHCI_TUNING_MODE_1) {
2495 del_timer_sync(&host->tuning_timer); 2514 del_timer_sync(&host->tuning_timer);
2496 host->flags &= ~SDHCI_NEEDS_RETUNING; 2515 host->flags &= ~SDHCI_NEEDS_RETUNING;
2497 } 2516 }
@@ -2532,8 +2551,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host)
2532 sdhci_do_enable_preset_value(host, true); 2551 sdhci_do_enable_preset_value(host, true);
2533 2552
2534 /* Set the re-tuning expiration flag */ 2553 /* Set the re-tuning expiration flag */
2535 if ((host->version >= SDHCI_SPEC_300) && host->tuning_count && 2554 if (host->flags & SDHCI_USING_RETUNING_TIMER)
2536 (host->tuning_mode == SDHCI_TUNING_MODE_1))
2537 host->flags |= SDHCI_NEEDS_RETUNING; 2555 host->flags |= SDHCI_NEEDS_RETUNING;
2538 2556
2539 spin_lock_irqsave(&host->lock, flags); 2557 spin_lock_irqsave(&host->lock, flags);
@@ -2584,7 +2602,7 @@ EXPORT_SYMBOL_GPL(sdhci_alloc_host);
2584int sdhci_add_host(struct sdhci_host *host) 2602int sdhci_add_host(struct sdhci_host *host)
2585{ 2603{
2586 struct mmc_host *mmc; 2604 struct mmc_host *mmc;
2587 u32 caps[2]; 2605 u32 caps[2] = {0, 0};
2588 u32 max_current_caps; 2606 u32 max_current_caps;
2589 unsigned int ocr_avail; 2607 unsigned int ocr_avail;
2590 int ret; 2608 int ret;
@@ -2614,8 +2632,10 @@ int sdhci_add_host(struct sdhci_host *host)
2614 caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps : 2632 caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps :
2615 sdhci_readl(host, SDHCI_CAPABILITIES); 2633 sdhci_readl(host, SDHCI_CAPABILITIES);
2616 2634
2617 caps[1] = (host->version >= SDHCI_SPEC_300) ? 2635 if (host->version >= SDHCI_SPEC_300)
2618 sdhci_readl(host, SDHCI_CAPABILITIES_1) : 0; 2636 caps[1] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ?
2637 host->caps1 :
2638 sdhci_readl(host, SDHCI_CAPABILITIES_1);
2619 2639
2620 if (host->quirks & SDHCI_QUIRK_FORCE_DMA) 2640 if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
2621 host->flags |= SDHCI_USE_SDMA; 2641 host->flags |= SDHCI_USE_SDMA;
@@ -2779,7 +2799,7 @@ int sdhci_add_host(struct sdhci_host *host)
2779 mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; 2799 mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
2780 2800
2781 if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) && 2801 if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) &&
2782 mmc_card_is_removable(mmc)) 2802 !(host->mmc->caps & MMC_CAP_NONREMOVABLE))
2783 mmc->caps |= MMC_CAP_NEEDS_POLL; 2803 mmc->caps |= MMC_CAP_NEEDS_POLL;
2784 2804
2785 /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */ 2805 /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */
@@ -2837,6 +2857,30 @@ int sdhci_add_host(struct sdhci_host *host)
2837 SDHCI_RETUNING_MODE_SHIFT; 2857 SDHCI_RETUNING_MODE_SHIFT;
2838 2858
2839 ocr_avail = 0; 2859 ocr_avail = 0;
2860
2861 host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
2862 if (IS_ERR(host->vmmc)) {
2863 pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc));
2864 host->vmmc = NULL;
2865 }
2866
2867#ifdef CONFIG_REGULATOR
2868 if (host->vmmc) {
2869 ret = regulator_is_supported_voltage(host->vmmc, 3300000,
2870 3300000);
2871 if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_330)))
2872 caps[0] &= ~SDHCI_CAN_VDD_330;
2873 ret = regulator_is_supported_voltage(host->vmmc, 3000000,
2874 3000000);
2875 if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_300)))
2876 caps[0] &= ~SDHCI_CAN_VDD_300;
2877 ret = regulator_is_supported_voltage(host->vmmc, 1800000,
2878 1800000);
2879 if ((ret <= 0) || (!(caps[0] & SDHCI_CAN_VDD_180)))
2880 caps[0] &= ~SDHCI_CAN_VDD_180;
2881 }
2882#endif /* CONFIG_REGULATOR */
2883
2840 /* 2884 /*
2841 * According to SD Host Controller spec v3.00, if the Host System 2885 * According to SD Host Controller spec v3.00, if the Host System
2842 * can afford more than 150mA, Host Driver should set XPC to 1. Also 2886 * can afford more than 150mA, Host Driver should set XPC to 1. Also
@@ -2845,55 +2889,45 @@ int sdhci_add_host(struct sdhci_host *host)
2845 * value. 2889 * value.
2846 */ 2890 */
2847 max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT); 2891 max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT);
2892 if (!max_current_caps && host->vmmc) {
2893 u32 curr = regulator_get_current_limit(host->vmmc);
2894 if (curr > 0) {
2895
2896 /* convert to SDHCI_MAX_CURRENT format */
2897 curr = curr/1000; /* convert to mA */
2898 curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER;
2899
2900 curr = min_t(u32, curr, SDHCI_MAX_CURRENT_LIMIT);
2901 max_current_caps =
2902 (curr << SDHCI_MAX_CURRENT_330_SHIFT) |
2903 (curr << SDHCI_MAX_CURRENT_300_SHIFT) |
2904 (curr << SDHCI_MAX_CURRENT_180_SHIFT);
2905 }
2906 }
2848 2907
2849 if (caps[0] & SDHCI_CAN_VDD_330) { 2908 if (caps[0] & SDHCI_CAN_VDD_330) {
2850 int max_current_330;
2851
2852 ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34; 2909 ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34;
2853 2910
2854 max_current_330 = ((max_current_caps & 2911 mmc->max_current_330 = ((max_current_caps &
2855 SDHCI_MAX_CURRENT_330_MASK) >> 2912 SDHCI_MAX_CURRENT_330_MASK) >>
2856 SDHCI_MAX_CURRENT_330_SHIFT) * 2913 SDHCI_MAX_CURRENT_330_SHIFT) *
2857 SDHCI_MAX_CURRENT_MULTIPLIER; 2914 SDHCI_MAX_CURRENT_MULTIPLIER;
2858
2859 if (max_current_330 > 150)
2860 mmc->caps |= MMC_CAP_SET_XPC_330;
2861 } 2915 }
2862 if (caps[0] & SDHCI_CAN_VDD_300) { 2916 if (caps[0] & SDHCI_CAN_VDD_300) {
2863 int max_current_300;
2864
2865 ocr_avail |= MMC_VDD_29_30 | MMC_VDD_30_31; 2917 ocr_avail |= MMC_VDD_29_30 | MMC_VDD_30_31;
2866 2918
2867 max_current_300 = ((max_current_caps & 2919 mmc->max_current_300 = ((max_current_caps &
2868 SDHCI_MAX_CURRENT_300_MASK) >> 2920 SDHCI_MAX_CURRENT_300_MASK) >>
2869 SDHCI_MAX_CURRENT_300_SHIFT) * 2921 SDHCI_MAX_CURRENT_300_SHIFT) *
2870 SDHCI_MAX_CURRENT_MULTIPLIER; 2922 SDHCI_MAX_CURRENT_MULTIPLIER;
2871
2872 if (max_current_300 > 150)
2873 mmc->caps |= MMC_CAP_SET_XPC_300;
2874 } 2923 }
2875 if (caps[0] & SDHCI_CAN_VDD_180) { 2924 if (caps[0] & SDHCI_CAN_VDD_180) {
2876 int max_current_180;
2877
2878 ocr_avail |= MMC_VDD_165_195; 2925 ocr_avail |= MMC_VDD_165_195;
2879 2926
2880 max_current_180 = ((max_current_caps & 2927 mmc->max_current_180 = ((max_current_caps &
2881 SDHCI_MAX_CURRENT_180_MASK) >> 2928 SDHCI_MAX_CURRENT_180_MASK) >>
2882 SDHCI_MAX_CURRENT_180_SHIFT) * 2929 SDHCI_MAX_CURRENT_180_SHIFT) *
2883 SDHCI_MAX_CURRENT_MULTIPLIER; 2930 SDHCI_MAX_CURRENT_MULTIPLIER;
2884
2885 if (max_current_180 > 150)
2886 mmc->caps |= MMC_CAP_SET_XPC_180;
2887
2888 /* Maximum current capabilities of the host at 1.8V */
2889 if (max_current_180 >= 800)
2890 mmc->caps |= MMC_CAP_MAX_CURRENT_800;
2891 else if (max_current_180 >= 600)
2892 mmc->caps |= MMC_CAP_MAX_CURRENT_600;
2893 else if (max_current_180 >= 400)
2894 mmc->caps |= MMC_CAP_MAX_CURRENT_400;
2895 else
2896 mmc->caps |= MMC_CAP_MAX_CURRENT_200;
2897 } 2931 }
2898 2932
2899 mmc->ocr_avail = ocr_avail; 2933 mmc->ocr_avail = ocr_avail;
@@ -2992,13 +3026,10 @@ int sdhci_add_host(struct sdhci_host *host)
2992 3026
2993 ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED, 3027 ret = request_irq(host->irq, sdhci_irq, IRQF_SHARED,
2994 mmc_hostname(mmc), host); 3028 mmc_hostname(mmc), host);
2995 if (ret) 3029 if (ret) {
3030 pr_err("%s: Failed to request IRQ %d: %d\n",
3031 mmc_hostname(mmc), host->irq, ret);
2996 goto untasklet; 3032 goto untasklet;
2997
2998 host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
2999 if (IS_ERR(host->vmmc)) {
3000 pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc));
3001 host->vmmc = NULL;
3002 } 3033 }
3003 3034
3004 sdhci_init(host, 0); 3035 sdhci_init(host, 0);
@@ -3016,8 +3047,11 @@ int sdhci_add_host(struct sdhci_host *host)
3016 host->led.brightness_set = sdhci_led_control; 3047 host->led.brightness_set = sdhci_led_control;
3017 3048
3018 ret = led_classdev_register(mmc_dev(mmc), &host->led); 3049 ret = led_classdev_register(mmc_dev(mmc), &host->led);
3019 if (ret) 3050 if (ret) {
3051 pr_err("%s: Failed to register LED device: %d\n",
3052 mmc_hostname(mmc), ret);
3020 goto reset; 3053 goto reset;
3054 }
3021#endif 3055#endif
3022 3056
3023 mmiowb(); 3057 mmiowb();
@@ -3081,8 +3115,6 @@ void sdhci_remove_host(struct sdhci_host *host, int dead)
3081 free_irq(host->irq, host); 3115 free_irq(host->irq, host);
3082 3116
3083 del_timer_sync(&host->timer); 3117 del_timer_sync(&host->timer);
3084 if (host->version >= SDHCI_SPEC_300)
3085 del_timer_sync(&host->tuning_timer);
3086 3118
3087 tasklet_kill(&host->card_tasklet); 3119 tasklet_kill(&host->card_tasklet);
3088 tasklet_kill(&host->finish_tasklet); 3120 tasklet_kill(&host->finish_tasklet);
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index f761f23d2a28..97653ea8942b 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -205,6 +205,7 @@
205#define SDHCI_CAPABILITIES_1 0x44 205#define SDHCI_CAPABILITIES_1 0x44
206 206
207#define SDHCI_MAX_CURRENT 0x48 207#define SDHCI_MAX_CURRENT 0x48
208#define SDHCI_MAX_CURRENT_LIMIT 0xFF
208#define SDHCI_MAX_CURRENT_330_MASK 0x0000FF 209#define SDHCI_MAX_CURRENT_330_MASK 0x0000FF
209#define SDHCI_MAX_CURRENT_330_SHIFT 0 210#define SDHCI_MAX_CURRENT_330_SHIFT 0
210#define SDHCI_MAX_CURRENT_300_MASK 0x00FF00 211#define SDHCI_MAX_CURRENT_300_MASK 0x00FF00
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
index 724b35e85a26..b2af7136cd27 100644
--- a/drivers/mmc/host/sh_mmcif.c
+++ b/drivers/mmc/host/sh_mmcif.c
@@ -54,6 +54,8 @@
54#include <linux/mmc/mmc.h> 54#include <linux/mmc/mmc.h>
55#include <linux/mmc/sdio.h> 55#include <linux/mmc/sdio.h>
56#include <linux/mmc/sh_mmcif.h> 56#include <linux/mmc/sh_mmcif.h>
57#include <linux/mmc/slot-gpio.h>
58#include <linux/mod_devicetable.h>
57#include <linux/pagemap.h> 59#include <linux/pagemap.h>
58#include <linux/platform_device.h> 60#include <linux/platform_device.h>
59#include <linux/pm_qos.h> 61#include <linux/pm_qos.h>
@@ -384,6 +386,9 @@ static void sh_mmcif_request_dma(struct sh_mmcif_host *host,
384 struct sh_dmae_slave *tx, *rx; 386 struct sh_dmae_slave *tx, *rx;
385 host->dma_active = false; 387 host->dma_active = false;
386 388
389 if (!pdata)
390 return;
391
387 /* We can only either use DMA for both Tx and Rx or not use it at all */ 392 /* We can only either use DMA for both Tx and Rx or not use it at all */
388 if (pdata->dma) { 393 if (pdata->dma) {
389 dev_warn(&host->pd->dev, 394 dev_warn(&host->pd->dev,
@@ -444,13 +449,14 @@ static void sh_mmcif_release_dma(struct sh_mmcif_host *host)
444static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk) 449static void sh_mmcif_clock_control(struct sh_mmcif_host *host, unsigned int clk)
445{ 450{
446 struct sh_mmcif_plat_data *p = host->pd->dev.platform_data; 451 struct sh_mmcif_plat_data *p = host->pd->dev.platform_data;
452 bool sup_pclk = p ? p->sup_pclk : false;
447 453
448 sh_mmcif_bitclr(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE); 454 sh_mmcif_bitclr(host, MMCIF_CE_CLK_CTRL, CLK_ENABLE);
449 sh_mmcif_bitclr(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR); 455 sh_mmcif_bitclr(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR);
450 456
451 if (!clk) 457 if (!clk)
452 return; 458 return;
453 if (p->sup_pclk && clk == host->clk) 459 if (sup_pclk && clk == host->clk)
454 sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK); 460 sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_SUP_PCLK);
455 else 461 else
456 sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR & 462 sh_mmcif_bitset(host, MMCIF_CE_CLK_CTRL, CLK_CLEAR &
@@ -892,21 +898,15 @@ static void sh_mmcif_request(struct mmc_host *mmc, struct mmc_request *mrq)
892 898
893 switch (mrq->cmd->opcode) { 899 switch (mrq->cmd->opcode) {
894 /* MMCIF does not support SD/SDIO command */ 900 /* MMCIF does not support SD/SDIO command */
895 case SD_IO_SEND_OP_COND: 901 case MMC_SLEEP_AWAKE: /* = SD_IO_SEND_OP_COND (5) */
902 case MMC_SEND_EXT_CSD: /* = SD_SEND_IF_COND (8) */
903 if ((mrq->cmd->flags & MMC_CMD_MASK) != MMC_CMD_BCR)
904 break;
896 case MMC_APP_CMD: 905 case MMC_APP_CMD:
897 host->state = STATE_IDLE; 906 host->state = STATE_IDLE;
898 mrq->cmd->error = -ETIMEDOUT; 907 mrq->cmd->error = -ETIMEDOUT;
899 mmc_request_done(mmc, mrq); 908 mmc_request_done(mmc, mrq);
900 return; 909 return;
901 case MMC_SEND_EXT_CSD: /* = SD_SEND_IF_COND (8) */
902 if (!mrq->data) {
903 /* send_if_cond cmd (not support) */
904 host->state = STATE_IDLE;
905 mrq->cmd->error = -ETIMEDOUT;
906 mmc_request_done(mmc, mrq);
907 return;
908 }
909 break;
910 default: 910 default:
911 break; 911 break;
912 } 912 }
@@ -916,10 +916,35 @@ static void sh_mmcif_request(struct mmc_host *mmc, struct mmc_request *mrq)
916 sh_mmcif_start_cmd(host, mrq); 916 sh_mmcif_start_cmd(host, mrq);
917} 917}
918 918
919static int sh_mmcif_clk_update(struct sh_mmcif_host *host)
920{
921 int ret = clk_enable(host->hclk);
922
923 if (!ret) {
924 host->clk = clk_get_rate(host->hclk);
925 host->mmc->f_max = host->clk / 2;
926 host->mmc->f_min = host->clk / 512;
927 }
928
929 return ret;
930}
931
932static void sh_mmcif_set_power(struct sh_mmcif_host *host, struct mmc_ios *ios)
933{
934 struct sh_mmcif_plat_data *pd = host->pd->dev.platform_data;
935 struct mmc_host *mmc = host->mmc;
936
937 if (pd && pd->set_pwr)
938 pd->set_pwr(host->pd, ios->power_mode != MMC_POWER_OFF);
939 if (!IS_ERR(mmc->supply.vmmc))
940 /* Errors ignored... */
941 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc,
942 ios->power_mode ? ios->vdd : 0);
943}
944
919static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) 945static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
920{ 946{
921 struct sh_mmcif_host *host = mmc_priv(mmc); 947 struct sh_mmcif_host *host = mmc_priv(mmc);
922 struct sh_mmcif_plat_data *p = host->pd->dev.platform_data;
923 unsigned long flags; 948 unsigned long flags;
924 949
925 spin_lock_irqsave(&host->lock, flags); 950 spin_lock_irqsave(&host->lock, flags);
@@ -937,6 +962,7 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
937 sh_mmcif_request_dma(host, host->pd->dev.platform_data); 962 sh_mmcif_request_dma(host, host->pd->dev.platform_data);
938 host->card_present = true; 963 host->card_present = true;
939 } 964 }
965 sh_mmcif_set_power(host, ios);
940 } else if (ios->power_mode == MMC_POWER_OFF || !ios->clock) { 966 } else if (ios->power_mode == MMC_POWER_OFF || !ios->clock) {
941 /* clock stop */ 967 /* clock stop */
942 sh_mmcif_clock_control(host, 0); 968 sh_mmcif_clock_control(host, 0);
@@ -948,9 +974,10 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
948 } 974 }
949 if (host->power) { 975 if (host->power) {
950 pm_runtime_put(&host->pd->dev); 976 pm_runtime_put(&host->pd->dev);
977 clk_disable(host->hclk);
951 host->power = false; 978 host->power = false;
952 if (p->down_pwr && ios->power_mode == MMC_POWER_OFF) 979 if (ios->power_mode == MMC_POWER_OFF)
953 p->down_pwr(host->pd); 980 sh_mmcif_set_power(host, ios);
954 } 981 }
955 host->state = STATE_IDLE; 982 host->state = STATE_IDLE;
956 return; 983 return;
@@ -958,8 +985,7 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
958 985
959 if (ios->clock) { 986 if (ios->clock) {
960 if (!host->power) { 987 if (!host->power) {
961 if (p->set_pwr) 988 sh_mmcif_clk_update(host);
962 p->set_pwr(host->pd, ios->power_mode);
963 pm_runtime_get_sync(&host->pd->dev); 989 pm_runtime_get_sync(&host->pd->dev);
964 host->power = true; 990 host->power = true;
965 sh_mmcif_sync_reset(host); 991 sh_mmcif_sync_reset(host);
@@ -975,8 +1001,12 @@ static int sh_mmcif_get_cd(struct mmc_host *mmc)
975{ 1001{
976 struct sh_mmcif_host *host = mmc_priv(mmc); 1002 struct sh_mmcif_host *host = mmc_priv(mmc);
977 struct sh_mmcif_plat_data *p = host->pd->dev.platform_data; 1003 struct sh_mmcif_plat_data *p = host->pd->dev.platform_data;
1004 int ret = mmc_gpio_get_cd(mmc);
1005
1006 if (ret >= 0)
1007 return ret;
978 1008
979 if (!p->get_cd) 1009 if (!p || !p->get_cd)
980 return -ENOSYS; 1010 return -ENOSYS;
981 else 1011 else
982 return p->get_cd(host->pd); 1012 return p->get_cd(host->pd);
@@ -1242,12 +1272,28 @@ static void mmcif_timeout_work(struct work_struct *work)
1242 mmc_request_done(host->mmc, mrq); 1272 mmc_request_done(host->mmc, mrq);
1243} 1273}
1244 1274
1275static void sh_mmcif_init_ocr(struct sh_mmcif_host *host)
1276{
1277 struct sh_mmcif_plat_data *pd = host->pd->dev.platform_data;
1278 struct mmc_host *mmc = host->mmc;
1279
1280 mmc_regulator_get_supply(mmc);
1281
1282 if (!pd)
1283 return;
1284
1285 if (!mmc->ocr_avail)
1286 mmc->ocr_avail = pd->ocr;
1287 else if (pd->ocr)
1288 dev_warn(mmc_dev(mmc), "Platform OCR mask is ignored\n");
1289}
1290
1245static int __devinit sh_mmcif_probe(struct platform_device *pdev) 1291static int __devinit sh_mmcif_probe(struct platform_device *pdev)
1246{ 1292{
1247 int ret = 0, irq[2]; 1293 int ret = 0, irq[2];
1248 struct mmc_host *mmc; 1294 struct mmc_host *mmc;
1249 struct sh_mmcif_host *host; 1295 struct sh_mmcif_host *host;
1250 struct sh_mmcif_plat_data *pd; 1296 struct sh_mmcif_plat_data *pd = pdev->dev.platform_data;
1251 struct resource *res; 1297 struct resource *res;
1252 void __iomem *reg; 1298 void __iomem *reg;
1253 char clk_name[8]; 1299 char clk_name[8];
@@ -1268,42 +1314,26 @@ static int __devinit sh_mmcif_probe(struct platform_device *pdev)
1268 dev_err(&pdev->dev, "ioremap error.\n"); 1314 dev_err(&pdev->dev, "ioremap error.\n");
1269 return -ENOMEM; 1315 return -ENOMEM;
1270 } 1316 }
1271 pd = pdev->dev.platform_data; 1317
1272 if (!pd) {
1273 dev_err(&pdev->dev, "sh_mmcif plat data error.\n");
1274 ret = -ENXIO;
1275 goto clean_up;
1276 }
1277 mmc = mmc_alloc_host(sizeof(struct sh_mmcif_host), &pdev->dev); 1318 mmc = mmc_alloc_host(sizeof(struct sh_mmcif_host), &pdev->dev);
1278 if (!mmc) { 1319 if (!mmc) {
1279 ret = -ENOMEM; 1320 ret = -ENOMEM;
1280 goto clean_up; 1321 goto ealloch;
1281 } 1322 }
1282 host = mmc_priv(mmc); 1323 host = mmc_priv(mmc);
1283 host->mmc = mmc; 1324 host->mmc = mmc;
1284 host->addr = reg; 1325 host->addr = reg;
1285 host->timeout = 1000; 1326 host->timeout = 1000;
1286 1327
1287 snprintf(clk_name, sizeof(clk_name), "mmc%d", pdev->id);
1288 host->hclk = clk_get(&pdev->dev, clk_name);
1289 if (IS_ERR(host->hclk)) {
1290 dev_err(&pdev->dev, "cannot get clock \"%s\"\n", clk_name);
1291 ret = PTR_ERR(host->hclk);
1292 goto clean_up1;
1293 }
1294 clk_enable(host->hclk);
1295 host->clk = clk_get_rate(host->hclk);
1296 host->pd = pdev; 1328 host->pd = pdev;
1297 1329
1298 spin_lock_init(&host->lock); 1330 spin_lock_init(&host->lock);
1299 1331
1300 mmc->ops = &sh_mmcif_ops; 1332 mmc->ops = &sh_mmcif_ops;
1301 mmc->f_max = host->clk / 2; 1333 sh_mmcif_init_ocr(host);
1302 mmc->f_min = host->clk / 512; 1334
1303 if (pd->ocr)
1304 mmc->ocr_avail = pd->ocr;
1305 mmc->caps = MMC_CAP_MMC_HIGHSPEED; 1335 mmc->caps = MMC_CAP_MMC_HIGHSPEED;
1306 if (pd->caps) 1336 if (pd && pd->caps)
1307 mmc->caps |= pd->caps; 1337 mmc->caps |= pd->caps;
1308 mmc->max_segs = 32; 1338 mmc->max_segs = 32;
1309 mmc->max_blk_size = 512; 1339 mmc->max_blk_size = 512;
@@ -1311,34 +1341,52 @@ static int __devinit sh_mmcif_probe(struct platform_device *pdev)
1311 mmc->max_blk_count = mmc->max_req_size / mmc->max_blk_size; 1341 mmc->max_blk_count = mmc->max_req_size / mmc->max_blk_size;
1312 mmc->max_seg_size = mmc->max_req_size; 1342 mmc->max_seg_size = mmc->max_req_size;
1313 1343
1314 sh_mmcif_sync_reset(host);
1315 platform_set_drvdata(pdev, host); 1344 platform_set_drvdata(pdev, host);
1316 1345
1317 pm_runtime_enable(&pdev->dev); 1346 pm_runtime_enable(&pdev->dev);
1318 host->power = false; 1347 host->power = false;
1319 1348
1349 snprintf(clk_name, sizeof(clk_name), "mmc%d", pdev->id);
1350 host->hclk = clk_get(&pdev->dev, clk_name);
1351 if (IS_ERR(host->hclk)) {
1352 ret = PTR_ERR(host->hclk);
1353 dev_err(&pdev->dev, "cannot get clock \"%s\": %d\n", clk_name, ret);
1354 goto eclkget;
1355 }
1356 ret = sh_mmcif_clk_update(host);
1357 if (ret < 0)
1358 goto eclkupdate;
1359
1320 ret = pm_runtime_resume(&pdev->dev); 1360 ret = pm_runtime_resume(&pdev->dev);
1321 if (ret < 0) 1361 if (ret < 0)
1322 goto clean_up2; 1362 goto eresume;
1323 1363
1324 INIT_DELAYED_WORK(&host->timeout_work, mmcif_timeout_work); 1364 INIT_DELAYED_WORK(&host->timeout_work, mmcif_timeout_work);
1325 1365
1366 sh_mmcif_sync_reset(host);
1326 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL); 1367 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL);
1327 1368
1328 ret = request_threaded_irq(irq[0], sh_mmcif_intr, sh_mmcif_irqt, 0, "sh_mmc:error", host); 1369 ret = request_threaded_irq(irq[0], sh_mmcif_intr, sh_mmcif_irqt, 0, "sh_mmc:error", host);
1329 if (ret) { 1370 if (ret) {
1330 dev_err(&pdev->dev, "request_irq error (sh_mmc:error)\n"); 1371 dev_err(&pdev->dev, "request_irq error (sh_mmc:error)\n");
1331 goto clean_up3; 1372 goto ereqirq0;
1332 } 1373 }
1333 ret = request_threaded_irq(irq[1], sh_mmcif_intr, sh_mmcif_irqt, 0, "sh_mmc:int", host); 1374 ret = request_threaded_irq(irq[1], sh_mmcif_intr, sh_mmcif_irqt, 0, "sh_mmc:int", host);
1334 if (ret) { 1375 if (ret) {
1335 dev_err(&pdev->dev, "request_irq error (sh_mmc:int)\n"); 1376 dev_err(&pdev->dev, "request_irq error (sh_mmc:int)\n");
1336 goto clean_up4; 1377 goto ereqirq1;
1378 }
1379
1380 if (pd && pd->use_cd_gpio) {
1381 ret = mmc_gpio_request_cd(mmc, pd->cd_gpio);
1382 if (ret < 0)
1383 goto erqcd;
1337 } 1384 }
1338 1385
1386 clk_disable(host->hclk);
1339 ret = mmc_add_host(mmc); 1387 ret = mmc_add_host(mmc);
1340 if (ret < 0) 1388 if (ret < 0)
1341 goto clean_up5; 1389 goto emmcaddh;
1342 1390
1343 dev_pm_qos_expose_latency_limit(&pdev->dev, 100); 1391 dev_pm_qos_expose_latency_limit(&pdev->dev, 100);
1344 1392
@@ -1347,33 +1395,42 @@ static int __devinit sh_mmcif_probe(struct platform_device *pdev)
1347 sh_mmcif_readl(host->addr, MMCIF_CE_VERSION) & 0x0000ffff); 1395 sh_mmcif_readl(host->addr, MMCIF_CE_VERSION) & 0x0000ffff);
1348 return ret; 1396 return ret;
1349 1397
1350clean_up5: 1398emmcaddh:
1399 if (pd && pd->use_cd_gpio)
1400 mmc_gpio_free_cd(mmc);
1401erqcd:
1351 free_irq(irq[1], host); 1402 free_irq(irq[1], host);
1352clean_up4: 1403ereqirq1:
1353 free_irq(irq[0], host); 1404 free_irq(irq[0], host);
1354clean_up3: 1405ereqirq0:
1355 pm_runtime_suspend(&pdev->dev); 1406 pm_runtime_suspend(&pdev->dev);
1356clean_up2: 1407eresume:
1357 pm_runtime_disable(&pdev->dev);
1358 clk_disable(host->hclk); 1408 clk_disable(host->hclk);
1359clean_up1: 1409eclkupdate:
1410 clk_put(host->hclk);
1411eclkget:
1412 pm_runtime_disable(&pdev->dev);
1360 mmc_free_host(mmc); 1413 mmc_free_host(mmc);
1361clean_up: 1414ealloch:
1362 if (reg) 1415 iounmap(reg);
1363 iounmap(reg);
1364 return ret; 1416 return ret;
1365} 1417}
1366 1418
1367static int __devexit sh_mmcif_remove(struct platform_device *pdev) 1419static int __devexit sh_mmcif_remove(struct platform_device *pdev)
1368{ 1420{
1369 struct sh_mmcif_host *host = platform_get_drvdata(pdev); 1421 struct sh_mmcif_host *host = platform_get_drvdata(pdev);
1422 struct sh_mmcif_plat_data *pd = pdev->dev.platform_data;
1370 int irq[2]; 1423 int irq[2];
1371 1424
1372 host->dying = true; 1425 host->dying = true;
1426 clk_enable(host->hclk);
1373 pm_runtime_get_sync(&pdev->dev); 1427 pm_runtime_get_sync(&pdev->dev);
1374 1428
1375 dev_pm_qos_hide_latency_limit(&pdev->dev); 1429 dev_pm_qos_hide_latency_limit(&pdev->dev);
1376 1430
1431 if (pd && pd->use_cd_gpio)
1432 mmc_gpio_free_cd(host->mmc);
1433
1377 mmc_remove_host(host->mmc); 1434 mmc_remove_host(host->mmc);
1378 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL); 1435 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL);
1379 1436
@@ -1395,9 +1452,9 @@ static int __devexit sh_mmcif_remove(struct platform_device *pdev)
1395 1452
1396 platform_set_drvdata(pdev, NULL); 1453 platform_set_drvdata(pdev, NULL);
1397 1454
1398 clk_disable(host->hclk);
1399 mmc_free_host(host->mmc); 1455 mmc_free_host(host->mmc);
1400 pm_runtime_put_sync(&pdev->dev); 1456 pm_runtime_put_sync(&pdev->dev);
1457 clk_disable(host->hclk);
1401 pm_runtime_disable(&pdev->dev); 1458 pm_runtime_disable(&pdev->dev);
1402 1459
1403 return 0; 1460 return 0;
@@ -1406,24 +1463,18 @@ static int __devexit sh_mmcif_remove(struct platform_device *pdev)
1406#ifdef CONFIG_PM 1463#ifdef CONFIG_PM
1407static int sh_mmcif_suspend(struct device *dev) 1464static int sh_mmcif_suspend(struct device *dev)
1408{ 1465{
1409 struct platform_device *pdev = to_platform_device(dev); 1466 struct sh_mmcif_host *host = dev_get_drvdata(dev);
1410 struct sh_mmcif_host *host = platform_get_drvdata(pdev);
1411 int ret = mmc_suspend_host(host->mmc); 1467 int ret = mmc_suspend_host(host->mmc);
1412 1468
1413 if (!ret) { 1469 if (!ret)
1414 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL); 1470 sh_mmcif_writel(host->addr, MMCIF_CE_INT_MASK, MASK_ALL);
1415 clk_disable(host->hclk);
1416 }
1417 1471
1418 return ret; 1472 return ret;
1419} 1473}
1420 1474
1421static int sh_mmcif_resume(struct device *dev) 1475static int sh_mmcif_resume(struct device *dev)
1422{ 1476{
1423 struct platform_device *pdev = to_platform_device(dev); 1477 struct sh_mmcif_host *host = dev_get_drvdata(dev);
1424 struct sh_mmcif_host *host = platform_get_drvdata(pdev);
1425
1426 clk_enable(host->hclk);
1427 1478
1428 return mmc_resume_host(host->mmc); 1479 return mmc_resume_host(host->mmc);
1429} 1480}
@@ -1432,6 +1483,12 @@ static int sh_mmcif_resume(struct device *dev)
1432#define sh_mmcif_resume NULL 1483#define sh_mmcif_resume NULL
1433#endif /* CONFIG_PM */ 1484#endif /* CONFIG_PM */
1434 1485
1486static const struct of_device_id mmcif_of_match[] = {
1487 { .compatible = "renesas,sh-mmcif" },
1488 { }
1489};
1490MODULE_DEVICE_TABLE(of, mmcif_of_match);
1491
1435static const struct dev_pm_ops sh_mmcif_dev_pm_ops = { 1492static const struct dev_pm_ops sh_mmcif_dev_pm_ops = {
1436 .suspend = sh_mmcif_suspend, 1493 .suspend = sh_mmcif_suspend,
1437 .resume = sh_mmcif_resume, 1494 .resume = sh_mmcif_resume,
@@ -1443,6 +1500,8 @@ static struct platform_driver sh_mmcif_driver = {
1443 .driver = { 1500 .driver = {
1444 .name = DRIVER_NAME, 1501 .name = DRIVER_NAME,
1445 .pm = &sh_mmcif_dev_pm_ops, 1502 .pm = &sh_mmcif_dev_pm_ops,
1503 .owner = THIS_MODULE,
1504 .of_match_table = mmcif_of_match,
1446 }, 1505 },
1447}; 1506};
1448 1507
diff --git a/drivers/mmc/host/sh_mobile_sdhi.c b/drivers/mmc/host/sh_mobile_sdhi.c
index 934b68e9efc3..a842939e4655 100644
--- a/drivers/mmc/host/sh_mobile_sdhi.c
+++ b/drivers/mmc/host/sh_mobile_sdhi.c
@@ -21,6 +21,7 @@
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/clk.h> 22#include <linux/clk.h>
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/mod_devicetable.h>
24#include <linux/module.h> 25#include <linux/module.h>
25#include <linux/platform_device.h> 26#include <linux/platform_device.h>
26#include <linux/mmc/host.h> 27#include <linux/mmc/host.h>
@@ -39,22 +40,39 @@ struct sh_mobile_sdhi {
39 struct tmio_mmc_dma dma_priv; 40 struct tmio_mmc_dma dma_priv;
40}; 41};
41 42
43static int sh_mobile_sdhi_clk_enable(struct platform_device *pdev, unsigned int *f)
44{
45 struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
46 struct tmio_mmc_host *host = mmc_priv(mmc);
47 struct sh_mobile_sdhi *priv = container_of(host->pdata, struct sh_mobile_sdhi, mmc_data);
48 int ret = clk_enable(priv->clk);
49 if (ret < 0)
50 return ret;
51
52 *f = clk_get_rate(priv->clk);
53 return 0;
54}
55
56static void sh_mobile_sdhi_clk_disable(struct platform_device *pdev)
57{
58 struct mmc_host *mmc = dev_get_drvdata(&pdev->dev);
59 struct tmio_mmc_host *host = mmc_priv(mmc);
60 struct sh_mobile_sdhi *priv = container_of(host->pdata, struct sh_mobile_sdhi, mmc_data);
61 clk_disable(priv->clk);
62}
63
42static void sh_mobile_sdhi_set_pwr(struct platform_device *pdev, int state) 64static void sh_mobile_sdhi_set_pwr(struct platform_device *pdev, int state)
43{ 65{
44 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; 66 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data;
45 67
46 if (p && p->set_pwr) 68 p->set_pwr(pdev, state);
47 p->set_pwr(pdev, state);
48} 69}
49 70
50static int sh_mobile_sdhi_get_cd(struct platform_device *pdev) 71static int sh_mobile_sdhi_get_cd(struct platform_device *pdev)
51{ 72{
52 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; 73 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data;
53 74
54 if (p && p->get_cd) 75 return p->get_cd(pdev);
55 return p->get_cd(pdev);
56 else
57 return -ENOSYS;
58} 76}
59 77
60static int sh_mobile_sdhi_wait_idle(struct tmio_mmc_host *host) 78static int sh_mobile_sdhi_wait_idle(struct tmio_mmc_host *host)
@@ -116,12 +134,14 @@ static int __devinit sh_mobile_sdhi_probe(struct platform_device *pdev)
116 } 134 }
117 135
118 mmc_data = &priv->mmc_data; 136 mmc_data = &priv->mmc_data;
119 p->pdata = mmc_data;
120 137
121 if (p->init) { 138 if (p) {
122 ret = p->init(pdev, &sdhi_ops); 139 p->pdata = mmc_data;
123 if (ret) 140 if (p->init) {
124 goto einit; 141 ret = p->init(pdev, &sdhi_ops);
142 if (ret)
143 goto einit;
144 }
125 } 145 }
126 146
127 snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id); 147 snprintf(clk_name, sizeof(clk_name), "sdhi%d", pdev->id);
@@ -132,9 +152,8 @@ static int __devinit sh_mobile_sdhi_probe(struct platform_device *pdev)
132 goto eclkget; 152 goto eclkget;
133 } 153 }
134 154
135 mmc_data->hclk = clk_get_rate(priv->clk); 155 mmc_data->clk_enable = sh_mobile_sdhi_clk_enable;
136 mmc_data->set_pwr = sh_mobile_sdhi_set_pwr; 156 mmc_data->clk_disable = sh_mobile_sdhi_clk_disable;
137 mmc_data->get_cd = sh_mobile_sdhi_get_cd;
138 mmc_data->capabilities = MMC_CAP_MMC_HIGHSPEED; 157 mmc_data->capabilities = MMC_CAP_MMC_HIGHSPEED;
139 if (p) { 158 if (p) {
140 mmc_data->flags = p->tmio_flags; 159 mmc_data->flags = p->tmio_flags;
@@ -142,7 +161,12 @@ static int __devinit sh_mobile_sdhi_probe(struct platform_device *pdev)
142 mmc_data->write16_hook = sh_mobile_sdhi_write16_hook; 161 mmc_data->write16_hook = sh_mobile_sdhi_write16_hook;
143 mmc_data->ocr_mask = p->tmio_ocr_mask; 162 mmc_data->ocr_mask = p->tmio_ocr_mask;
144 mmc_data->capabilities |= p->tmio_caps; 163 mmc_data->capabilities |= p->tmio_caps;
164 mmc_data->capabilities2 |= p->tmio_caps2;
145 mmc_data->cd_gpio = p->cd_gpio; 165 mmc_data->cd_gpio = p->cd_gpio;
166 if (p->set_pwr)
167 mmc_data->set_pwr = sh_mobile_sdhi_set_pwr;
168 if (p->get_cd)
169 mmc_data->get_cd = sh_mobile_sdhi_get_cd;
146 170
147 if (p->dma_slave_tx > 0 && p->dma_slave_rx > 0) { 171 if (p->dma_slave_tx > 0 && p->dma_slave_rx > 0) {
148 priv->param_tx.slave_id = p->dma_slave_tx; 172 priv->param_tx.slave_id = p->dma_slave_tx;
@@ -248,7 +272,7 @@ eirq_card_detect:
248eprobe: 272eprobe:
249 clk_put(priv->clk); 273 clk_put(priv->clk);
250eclkget: 274eclkget:
251 if (p->cleanup) 275 if (p && p->cleanup)
252 p->cleanup(pdev); 276 p->cleanup(pdev);
253einit: 277einit:
254 kfree(priv); 278 kfree(priv);
@@ -263,7 +287,8 @@ static int sh_mobile_sdhi_remove(struct platform_device *pdev)
263 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data; 287 struct sh_mobile_sdhi_info *p = pdev->dev.platform_data;
264 int i = 0, irq; 288 int i = 0, irq;
265 289
266 p->pdata = NULL; 290 if (p)
291 p->pdata = NULL;
267 292
268 tmio_mmc_host_remove(host); 293 tmio_mmc_host_remove(host);
269 294
@@ -276,7 +301,7 @@ static int sh_mobile_sdhi_remove(struct platform_device *pdev)
276 301
277 clk_put(priv->clk); 302 clk_put(priv->clk);
278 303
279 if (p->cleanup) 304 if (p && p->cleanup)
280 p->cleanup(pdev); 305 p->cleanup(pdev);
281 306
282 kfree(priv); 307 kfree(priv);
@@ -291,11 +316,18 @@ static const struct dev_pm_ops tmio_mmc_dev_pm_ops = {
291 .runtime_resume = tmio_mmc_host_runtime_resume, 316 .runtime_resume = tmio_mmc_host_runtime_resume,
292}; 317};
293 318
319static const struct of_device_id sh_mobile_sdhi_of_match[] = {
320 { .compatible = "renesas,shmobile-sdhi" },
321 { }
322};
323MODULE_DEVICE_TABLE(of, sh_mobile_sdhi_of_match);
324
294static struct platform_driver sh_mobile_sdhi_driver = { 325static struct platform_driver sh_mobile_sdhi_driver = {
295 .driver = { 326 .driver = {
296 .name = "sh_mobile_sdhi", 327 .name = "sh_mobile_sdhi",
297 .owner = THIS_MODULE, 328 .owner = THIS_MODULE,
298 .pm = &tmio_mmc_dev_pm_ops, 329 .pm = &tmio_mmc_dev_pm_ops,
330 .of_match_table = sh_mobile_sdhi_of_match,
299 }, 331 },
300 .probe = sh_mobile_sdhi_probe, 332 .probe = sh_mobile_sdhi_probe,
301 .remove = __devexit_p(sh_mobile_sdhi_remove), 333 .remove = __devexit_p(sh_mobile_sdhi_remove),
diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
index 9a7996ade58e..0d8a9bbe30be 100644
--- a/drivers/mmc/host/tmio_mmc_pio.c
+++ b/drivers/mmc/host/tmio_mmc_pio.c
@@ -34,8 +34,9 @@
34#include <linux/io.h> 34#include <linux/io.h>
35#include <linux/irq.h> 35#include <linux/irq.h>
36#include <linux/mfd/tmio.h> 36#include <linux/mfd/tmio.h>
37#include <linux/mmc/cd-gpio.h>
38#include <linux/mmc/host.h> 37#include <linux/mmc/host.h>
38#include <linux/mmc/mmc.h>
39#include <linux/mmc/slot-gpio.h>
39#include <linux/mmc/tmio.h> 40#include <linux/mmc/tmio.h>
40#include <linux/module.h> 41#include <linux/module.h>
41#include <linux/pagemap.h> 42#include <linux/pagemap.h>
@@ -305,8 +306,8 @@ static int tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command
305 int c = cmd->opcode; 306 int c = cmd->opcode;
306 u32 irq_mask = TMIO_MASK_CMD; 307 u32 irq_mask = TMIO_MASK_CMD;
307 308
308 /* Command 12 is handled by hardware */ 309 /* CMD12 is handled by hardware */
309 if (cmd->opcode == 12 && !cmd->arg) { 310 if (cmd->opcode == MMC_STOP_TRANSMISSION && !cmd->arg) {
310 sd_ctrl_write16(host, CTL_STOP_INTERNAL_ACTION, 0x001); 311 sd_ctrl_write16(host, CTL_STOP_INTERNAL_ACTION, 0x001);
311 return 0; 312 return 0;
312 } 313 }
@@ -449,7 +450,7 @@ void tmio_mmc_do_data_irq(struct tmio_mmc_host *host)
449 } 450 }
450 451
451 if (stop) { 452 if (stop) {
452 if (stop->opcode == 12 && !stop->arg) 453 if (stop->opcode == MMC_STOP_TRANSMISSION && !stop->arg)
453 sd_ctrl_write16(host, CTL_STOP_INTERNAL_ACTION, 0x000); 454 sd_ctrl_write16(host, CTL_STOP_INTERNAL_ACTION, 0x000);
454 else 455 else
455 BUG(); 456 BUG();
@@ -751,6 +752,34 @@ fail:
751 mmc_request_done(mmc, mrq); 752 mmc_request_done(mmc, mrq);
752} 753}
753 754
755static int tmio_mmc_clk_update(struct mmc_host *mmc)
756{
757 struct tmio_mmc_host *host = mmc_priv(mmc);
758 struct tmio_mmc_data *pdata = host->pdata;
759 int ret;
760
761 if (!pdata->clk_enable)
762 return -ENOTSUPP;
763
764 ret = pdata->clk_enable(host->pdev, &mmc->f_max);
765 if (!ret)
766 mmc->f_min = mmc->f_max / 512;
767
768 return ret;
769}
770
771static void tmio_mmc_set_power(struct tmio_mmc_host *host, struct mmc_ios *ios)
772{
773 struct mmc_host *mmc = host->mmc;
774
775 if (host->set_pwr)
776 host->set_pwr(host->pdev, ios->power_mode != MMC_POWER_OFF);
777 if (!IS_ERR(mmc->supply.vmmc))
778 /* Errors ignored... */
779 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc,
780 ios->power_mode ? ios->vdd : 0);
781}
782
754/* Set MMC clock / power. 783/* Set MMC clock / power.
755 * Note: This controller uses a simple divider scheme therefore it cannot 784 * Note: This controller uses a simple divider scheme therefore it cannot
756 * run a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as 785 * run a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as
@@ -797,32 +826,37 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
797 */ 826 */
798 if (ios->power_mode == MMC_POWER_ON && ios->clock) { 827 if (ios->power_mode == MMC_POWER_ON && ios->clock) {
799 if (!host->power) { 828 if (!host->power) {
829 tmio_mmc_clk_update(mmc);
800 pm_runtime_get_sync(dev); 830 pm_runtime_get_sync(dev);
801 host->power = true; 831 host->power = true;
802 } 832 }
803 tmio_mmc_set_clock(host, ios->clock); 833 tmio_mmc_set_clock(host, ios->clock);
804 /* power up SD bus */ 834 /* power up SD bus */
805 if (host->set_pwr) 835 tmio_mmc_set_power(host, ios);
806 host->set_pwr(host->pdev, 1);
807 /* start bus clock */ 836 /* start bus clock */
808 tmio_mmc_clk_start(host); 837 tmio_mmc_clk_start(host);
809 } else if (ios->power_mode != MMC_POWER_UP) { 838 } else if (ios->power_mode != MMC_POWER_UP) {
810 if (host->set_pwr && ios->power_mode == MMC_POWER_OFF) 839 if (ios->power_mode == MMC_POWER_OFF)
811 host->set_pwr(host->pdev, 0); 840 tmio_mmc_set_power(host, ios);
812 if (host->power) { 841 if (host->power) {
842 struct tmio_mmc_data *pdata = host->pdata;
843 tmio_mmc_clk_stop(host);
813 host->power = false; 844 host->power = false;
814 pm_runtime_put(dev); 845 pm_runtime_put(dev);
846 if (pdata->clk_disable)
847 pdata->clk_disable(host->pdev);
815 } 848 }
816 tmio_mmc_clk_stop(host);
817 } 849 }
818 850
819 switch (ios->bus_width) { 851 if (host->power) {
820 case MMC_BUS_WIDTH_1: 852 switch (ios->bus_width) {
821 sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x80e0); 853 case MMC_BUS_WIDTH_1:
822 break; 854 sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x80e0);
823 case MMC_BUS_WIDTH_4: 855 break;
824 sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x00e0); 856 case MMC_BUS_WIDTH_4:
825 break; 857 sd_ctrl_write16(host, CTL_SD_MEM_CARD_OPT, 0x00e0);
858 break;
859 }
826 } 860 }
827 861
828 /* Let things settle. delay taken from winCE driver */ 862 /* Let things settle. delay taken from winCE driver */
@@ -841,6 +875,9 @@ static int tmio_mmc_get_ro(struct mmc_host *mmc)
841{ 875{
842 struct tmio_mmc_host *host = mmc_priv(mmc); 876 struct tmio_mmc_host *host = mmc_priv(mmc);
843 struct tmio_mmc_data *pdata = host->pdata; 877 struct tmio_mmc_data *pdata = host->pdata;
878 int ret = mmc_gpio_get_ro(mmc);
879 if (ret >= 0)
880 return ret;
844 881
845 return !((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) || 882 return !((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||
846 (sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT)); 883 (sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));
@@ -850,6 +887,9 @@ static int tmio_mmc_get_cd(struct mmc_host *mmc)
850{ 887{
851 struct tmio_mmc_host *host = mmc_priv(mmc); 888 struct tmio_mmc_host *host = mmc_priv(mmc);
852 struct tmio_mmc_data *pdata = host->pdata; 889 struct tmio_mmc_data *pdata = host->pdata;
890 int ret = mmc_gpio_get_cd(mmc);
891 if (ret >= 0)
892 return ret;
853 893
854 if (!pdata->get_cd) 894 if (!pdata->get_cd)
855 return -ENOSYS; 895 return -ENOSYS;
@@ -865,6 +905,19 @@ static const struct mmc_host_ops tmio_mmc_ops = {
865 .enable_sdio_irq = tmio_mmc_enable_sdio_irq, 905 .enable_sdio_irq = tmio_mmc_enable_sdio_irq,
866}; 906};
867 907
908static void tmio_mmc_init_ocr(struct tmio_mmc_host *host)
909{
910 struct tmio_mmc_data *pdata = host->pdata;
911 struct mmc_host *mmc = host->mmc;
912
913 mmc_regulator_get_supply(mmc);
914
915 if (!mmc->ocr_avail)
916 mmc->ocr_avail = pdata->ocr_mask ? : MMC_VDD_32_33 | MMC_VDD_33_34;
917 else if (pdata->ocr_mask)
918 dev_warn(mmc_dev(mmc), "Platform OCR mask is ignored\n");
919}
920
868int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host, 921int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
869 struct platform_device *pdev, 922 struct platform_device *pdev,
870 struct tmio_mmc_data *pdata) 923 struct tmio_mmc_data *pdata)
@@ -904,18 +957,14 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
904 957
905 mmc->ops = &tmio_mmc_ops; 958 mmc->ops = &tmio_mmc_ops;
906 mmc->caps = MMC_CAP_4_BIT_DATA | pdata->capabilities; 959 mmc->caps = MMC_CAP_4_BIT_DATA | pdata->capabilities;
907 mmc->f_max = pdata->hclk; 960 mmc->caps2 = pdata->capabilities2;
908 mmc->f_min = mmc->f_max / 512;
909 mmc->max_segs = 32; 961 mmc->max_segs = 32;
910 mmc->max_blk_size = 512; 962 mmc->max_blk_size = 512;
911 mmc->max_blk_count = (PAGE_CACHE_SIZE / mmc->max_blk_size) * 963 mmc->max_blk_count = (PAGE_CACHE_SIZE / mmc->max_blk_size) *
912 mmc->max_segs; 964 mmc->max_segs;
913 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; 965 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
914 mmc->max_seg_size = mmc->max_req_size; 966 mmc->max_seg_size = mmc->max_req_size;
915 if (pdata->ocr_mask) 967 tmio_mmc_init_ocr(_host);
916 mmc->ocr_avail = pdata->ocr_mask;
917 else
918 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
919 968
920 _host->native_hotplug = !(pdata->flags & TMIO_MMC_USE_GPIO_CD || 969 _host->native_hotplug = !(pdata->flags & TMIO_MMC_USE_GPIO_CD ||
921 mmc->caps & MMC_CAP_NEEDS_POLL || 970 mmc->caps & MMC_CAP_NEEDS_POLL ||
@@ -927,6 +976,11 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
927 if (ret < 0) 976 if (ret < 0)
928 goto pm_disable; 977 goto pm_disable;
929 978
979 if (tmio_mmc_clk_update(mmc) < 0) {
980 mmc->f_max = pdata->hclk;
981 mmc->f_min = mmc->f_max / 512;
982 }
983
930 /* 984 /*
931 * There are 4 different scenarios for the card detection: 985 * There are 4 different scenarios for the card detection:
932 * 1) an external gpio irq handles the cd (best for power savings) 986 * 1) an external gpio irq handles the cd (best for power savings)
@@ -937,7 +991,6 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
937 * While we increment the runtime PM counter for all scenarios when 991 * While we increment the runtime PM counter for all scenarios when
938 * the mmc core activates us by calling an appropriate set_ios(), we 992 * the mmc core activates us by calling an appropriate set_ios(), we
939 * must additionally ensure that in case 2) the tmio mmc hardware stays 993 * must additionally ensure that in case 2) the tmio mmc hardware stays
940 * additionally ensure that in case 2) the tmio mmc hardware stays
941 * powered on during runtime for the card detection to work. 994 * powered on during runtime for the card detection to work.
942 */ 995 */
943 if (_host->native_hotplug) 996 if (_host->native_hotplug)
@@ -948,6 +1001,17 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
948 1001
949 _host->sdcard_irq_mask = sd_ctrl_read32(_host, CTL_IRQ_MASK); 1002 _host->sdcard_irq_mask = sd_ctrl_read32(_host, CTL_IRQ_MASK);
950 tmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL); 1003 tmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL);
1004
1005 /* Unmask the IRQs we want to know about */
1006 if (!_host->chan_rx)
1007 irq_mask |= TMIO_MASK_READOP;
1008 if (!_host->chan_tx)
1009 irq_mask |= TMIO_MASK_WRITEOP;
1010 if (!_host->native_hotplug)
1011 irq_mask &= ~(TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT);
1012
1013 _host->sdcard_irq_mask &= ~irq_mask;
1014
951 if (pdata->flags & TMIO_MMC_SDIO_IRQ) 1015 if (pdata->flags & TMIO_MMC_SDIO_IRQ)
952 tmio_mmc_enable_sdio_irq(mmc, 0); 1016 tmio_mmc_enable_sdio_irq(mmc, 0);
953 1017
@@ -961,22 +1025,18 @@ int __devinit tmio_mmc_host_probe(struct tmio_mmc_host **host,
961 /* See if we also get DMA */ 1025 /* See if we also get DMA */
962 tmio_mmc_request_dma(_host, pdata); 1026 tmio_mmc_request_dma(_host, pdata);
963 1027
964 mmc_add_host(mmc); 1028 ret = mmc_add_host(mmc);
1029 if (pdata->clk_disable)
1030 pdata->clk_disable(pdev);
1031 if (ret < 0) {
1032 tmio_mmc_host_remove(_host);
1033 return ret;
1034 }
965 1035
966 dev_pm_qos_expose_latency_limit(&pdev->dev, 100); 1036 dev_pm_qos_expose_latency_limit(&pdev->dev, 100);
967 1037
968 /* Unmask the IRQs we want to know about */
969 if (!_host->chan_rx)
970 irq_mask |= TMIO_MASK_READOP;
971 if (!_host->chan_tx)
972 irq_mask |= TMIO_MASK_WRITEOP;
973 if (!_host->native_hotplug)
974 irq_mask &= ~(TMIO_STAT_CARD_REMOVE | TMIO_STAT_CARD_INSERT);
975
976 tmio_mmc_enable_mmc_irqs(_host, irq_mask);
977
978 if (pdata->flags & TMIO_MMC_USE_GPIO_CD) { 1038 if (pdata->flags & TMIO_MMC_USE_GPIO_CD) {
979 ret = mmc_cd_gpio_request(mmc, pdata->cd_gpio); 1039 ret = mmc_gpio_request_cd(mmc, pdata->cd_gpio);
980 if (ret < 0) { 1040 if (ret < 0) {
981 tmio_mmc_host_remove(_host); 1041 tmio_mmc_host_remove(_host);
982 return ret; 1042 return ret;
@@ -1008,7 +1068,7 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host)
1008 * This means we can miss a card-eject, but this is anyway 1068 * This means we can miss a card-eject, but this is anyway
1009 * possible, because of delayed processing of hotplug events. 1069 * possible, because of delayed processing of hotplug events.
1010 */ 1070 */
1011 mmc_cd_gpio_free(mmc); 1071 mmc_gpio_free_cd(mmc);
1012 1072
1013 if (!host->native_hotplug) 1073 if (!host->native_hotplug)
1014 pm_runtime_get_sync(&pdev->dev); 1074 pm_runtime_get_sync(&pdev->dev);
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c
index a90bfe79916d..334da5f583c0 100644
--- a/drivers/mtd/mtdsuper.c
+++ b/drivers/mtd/mtdsuper.c
@@ -63,7 +63,7 @@ static struct dentry *mount_mtd_aux(struct file_system_type *fs_type, int flags,
63 struct super_block *sb; 63 struct super_block *sb;
64 int ret; 64 int ret;
65 65
66 sb = sget(fs_type, get_sb_mtd_compare, get_sb_mtd_set, mtd); 66 sb = sget(fs_type, get_sb_mtd_compare, get_sb_mtd_set, flags, mtd);
67 if (IS_ERR(sb)) 67 if (IS_ERR(sb))
68 goto out_error; 68 goto out_error;
69 69
@@ -74,8 +74,6 @@ static struct dentry *mount_mtd_aux(struct file_system_type *fs_type, int flags,
74 pr_debug("MTDSB: New superblock for device %d (\"%s\")\n", 74 pr_debug("MTDSB: New superblock for device %d (\"%s\")\n",
75 mtd->index, mtd->name); 75 mtd->index, mtd->name);
76 76
77 sb->s_flags = flags;
78
79 ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); 77 ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
80 if (ret < 0) { 78 if (ret < 0) {
81 deactivate_locked_super(sb); 79 deactivate_locked_super(sb);
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
index 41371ba1a811..f3f6cfedd69e 100644
--- a/drivers/mtd/nand/cafe_nand.c
+++ b/drivers/mtd/nand/cafe_nand.c
@@ -102,7 +102,7 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };
102static int cafe_device_ready(struct mtd_info *mtd) 102static int cafe_device_ready(struct mtd_info *mtd)
103{ 103{
104 struct cafe_priv *cafe = mtd->priv; 104 struct cafe_priv *cafe = mtd->priv;
105 int result = !!(cafe_readl(cafe, NAND_STATUS) | 0x40000000); 105 int result = !!(cafe_readl(cafe, NAND_STATUS) & 0x40000000);
106 uint32_t irqs = cafe_readl(cafe, NAND_IRQ); 106 uint32_t irqs = cafe_readl(cafe, NAND_IRQ);
107 107
108 cafe_writel(cafe, irqs, NAND_IRQ); 108 cafe_writel(cafe, irqs, NAND_IRQ);
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index a05b7b444d4f..a6cad5caba78 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -920,12 +920,12 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
920 */ 920 */
921 memset(chip->oob_poi, ~0, mtd->oobsize); 921 memset(chip->oob_poi, ~0, mtd->oobsize);
922 chip->oob_poi[0] = ((uint8_t *) auxiliary_virt)[0]; 922 chip->oob_poi[0] = ((uint8_t *) auxiliary_virt)[0];
923
924 read_page_swap_end(this, buf, mtd->writesize,
925 this->payload_virt, this->payload_phys,
926 nfc_geo->payload_size,
927 payload_virt, payload_phys);
928 } 923 }
924
925 read_page_swap_end(this, buf, mtd->writesize,
926 this->payload_virt, this->payload_phys,
927 nfc_geo->payload_size,
928 payload_virt, payload_phys);
929exit_nfc: 929exit_nfc:
930 return ret; 930 return ret;
931} 931}
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index c58e6a93f445..6acc790c2fbb 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -273,6 +273,26 @@ static struct nand_ecclayout nandv2_hw_eccoob_4k = {
273 273
274static const char *part_probes[] = { "RedBoot", "cmdlinepart", "ofpart", NULL }; 274static const char *part_probes[] = { "RedBoot", "cmdlinepart", "ofpart", NULL };
275 275
276static void memcpy32_fromio(void *trg, const void __iomem *src, size_t size)
277{
278 int i;
279 u32 *t = trg;
280 const __iomem u32 *s = src;
281
282 for (i = 0; i < (size >> 2); i++)
283 *t++ = __raw_readl(s++);
284}
285
286static void memcpy32_toio(void __iomem *trg, const void *src, int size)
287{
288 int i;
289 u32 __iomem *t = trg;
290 const u32 *s = src;
291
292 for (i = 0; i < (size >> 2); i++)
293 __raw_writel(*s++, t++);
294}
295
276static int check_int_v3(struct mxc_nand_host *host) 296static int check_int_v3(struct mxc_nand_host *host)
277{ 297{
278 uint32_t tmp; 298 uint32_t tmp;
@@ -519,7 +539,7 @@ static void send_read_id_v3(struct mxc_nand_host *host)
519 539
520 wait_op_done(host, true); 540 wait_op_done(host, true);
521 541
522 memcpy_fromio(host->data_buf, host->main_area0, 16); 542 memcpy32_fromio(host->data_buf, host->main_area0, 16);
523} 543}
524 544
525/* Request the NANDFC to perform a read of the NAND device ID. */ 545/* Request the NANDFC to perform a read of the NAND device ID. */
@@ -535,7 +555,7 @@ static void send_read_id_v1_v2(struct mxc_nand_host *host)
535 /* Wait for operation to complete */ 555 /* Wait for operation to complete */
536 wait_op_done(host, true); 556 wait_op_done(host, true);
537 557
538 memcpy_fromio(host->data_buf, host->main_area0, 16); 558 memcpy32_fromio(host->data_buf, host->main_area0, 16);
539 559
540 if (this->options & NAND_BUSWIDTH_16) { 560 if (this->options & NAND_BUSWIDTH_16) {
541 /* compress the ID info */ 561 /* compress the ID info */
@@ -797,16 +817,16 @@ static void copy_spare(struct mtd_info *mtd, bool bfrom)
797 817
798 if (bfrom) { 818 if (bfrom) {
799 for (i = 0; i < n - 1; i++) 819 for (i = 0; i < n - 1; i++)
800 memcpy_fromio(d + i * j, s + i * t, j); 820 memcpy32_fromio(d + i * j, s + i * t, j);
801 821
802 /* the last section */ 822 /* the last section */
803 memcpy_fromio(d + i * j, s + i * t, mtd->oobsize - i * j); 823 memcpy32_fromio(d + i * j, s + i * t, mtd->oobsize - i * j);
804 } else { 824 } else {
805 for (i = 0; i < n - 1; i++) 825 for (i = 0; i < n - 1; i++)
806 memcpy_toio(&s[i * t], &d[i * j], j); 826 memcpy32_toio(&s[i * t], &d[i * j], j);
807 827
808 /* the last section */ 828 /* the last section */
809 memcpy_toio(&s[i * t], &d[i * j], mtd->oobsize - i * j); 829 memcpy32_toio(&s[i * t], &d[i * j], mtd->oobsize - i * j);
810 } 830 }
811} 831}
812 832
@@ -1070,7 +1090,8 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
1070 1090
1071 host->devtype_data->send_page(mtd, NFC_OUTPUT); 1091 host->devtype_data->send_page(mtd, NFC_OUTPUT);
1072 1092
1073 memcpy_fromio(host->data_buf, host->main_area0, mtd->writesize); 1093 memcpy32_fromio(host->data_buf, host->main_area0,
1094 mtd->writesize);
1074 copy_spare(mtd, true); 1095 copy_spare(mtd, true);
1075 break; 1096 break;
1076 1097
@@ -1086,7 +1107,7 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
1086 break; 1107 break;
1087 1108
1088 case NAND_CMD_PAGEPROG: 1109 case NAND_CMD_PAGEPROG:
1089 memcpy_toio(host->main_area0, host->data_buf, mtd->writesize); 1110 memcpy32_toio(host->main_area0, host->data_buf, mtd->writesize);
1090 copy_spare(mtd, false); 1111 copy_spare(mtd, false);
1091 host->devtype_data->send_page(mtd, NFC_INPUT); 1112 host->devtype_data->send_page(mtd, NFC_INPUT);
1092 host->devtype_data->send_cmd(host, command, true); 1113 host->devtype_data->send_cmd(host, command, true);
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index d47586cf64ce..a11253a0fcab 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3501,6 +3501,13 @@ int nand_scan_tail(struct mtd_info *mtd)
3501 /* propagate ecc info to mtd_info */ 3501 /* propagate ecc info to mtd_info */
3502 mtd->ecclayout = chip->ecc.layout; 3502 mtd->ecclayout = chip->ecc.layout;
3503 mtd->ecc_strength = chip->ecc.strength; 3503 mtd->ecc_strength = chip->ecc.strength;
3504 /*
3505 * Initialize bitflip_threshold to its default prior scan_bbt() call.
3506 * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
3507 * properly set.
3508 */
3509 if (!mtd->bitflip_threshold)
3510 mtd->bitflip_threshold = mtd->ecc_strength;
3504 3511
3505 /* Check, if we should skip the bad block table scan */ 3512 /* Check, if we should skip the bad block table scan */
3506 if (chip->options & NAND_SKIP_BBTSCAN) 3513 if (chip->options & NAND_SKIP_BBTSCAN)
diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index 6cc8fbfabb8e..cf0cd3146817 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -28,7 +28,7 @@
28#include <linux/module.h> 28#include <linux/module.h>
29#include <linux/moduleparam.h> 29#include <linux/moduleparam.h>
30#include <linux/vmalloc.h> 30#include <linux/vmalloc.h>
31#include <asm/div64.h> 31#include <linux/math64.h>
32#include <linux/slab.h> 32#include <linux/slab.h>
33#include <linux/errno.h> 33#include <linux/errno.h>
34#include <linux/string.h> 34#include <linux/string.h>
@@ -546,12 +546,6 @@ static char *get_partition_name(int i)
546 return kstrdup(buf, GFP_KERNEL); 546 return kstrdup(buf, GFP_KERNEL);
547} 547}
548 548
549static uint64_t divide(uint64_t n, uint32_t d)
550{
551 do_div(n, d);
552 return n;
553}
554
555/* 549/*
556 * Initialize the nandsim structure. 550 * Initialize the nandsim structure.
557 * 551 *
@@ -580,7 +574,7 @@ static int init_nandsim(struct mtd_info *mtd)
580 ns->geom.oobsz = mtd->oobsize; 574 ns->geom.oobsz = mtd->oobsize;
581 ns->geom.secsz = mtd->erasesize; 575 ns->geom.secsz = mtd->erasesize;
582 ns->geom.pgszoob = ns->geom.pgsz + ns->geom.oobsz; 576 ns->geom.pgszoob = ns->geom.pgsz + ns->geom.oobsz;
583 ns->geom.pgnum = divide(ns->geom.totsz, ns->geom.pgsz); 577 ns->geom.pgnum = div_u64(ns->geom.totsz, ns->geom.pgsz);
584 ns->geom.totszoob = ns->geom.totsz + (uint64_t)ns->geom.pgnum * ns->geom.oobsz; 578 ns->geom.totszoob = ns->geom.totsz + (uint64_t)ns->geom.pgnum * ns->geom.oobsz;
585 ns->geom.secshift = ffs(ns->geom.secsz) - 1; 579 ns->geom.secshift = ffs(ns->geom.secsz) - 1;
586 ns->geom.pgshift = chip->page_shift; 580 ns->geom.pgshift = chip->page_shift;
@@ -921,7 +915,7 @@ static int setup_wear_reporting(struct mtd_info *mtd)
921 915
922 if (!rptwear) 916 if (!rptwear)
923 return 0; 917 return 0;
924 wear_eb_count = divide(mtd->size, mtd->erasesize); 918 wear_eb_count = div_u64(mtd->size, mtd->erasesize);
925 mem = wear_eb_count * sizeof(unsigned long); 919 mem = wear_eb_count * sizeof(unsigned long);
926 if (mem / sizeof(unsigned long) != wear_eb_count) { 920 if (mem / sizeof(unsigned long) != wear_eb_count) {
927 NS_ERR("Too many erase blocks for wear reporting\n"); 921 NS_ERR("Too many erase blocks for wear reporting\n");
diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig
index 738ee8dc16cd..ea4b95b5451c 100644
--- a/drivers/mtd/ubi/Kconfig
+++ b/drivers/mtd/ubi/Kconfig
@@ -29,7 +29,7 @@ config MTD_UBI_WL_THRESHOLD
29 29
30config MTD_UBI_BEB_RESERVE 30config MTD_UBI_BEB_RESERVE
31 int "Percentage of reserved eraseblocks for bad eraseblocks handling" 31 int "Percentage of reserved eraseblocks for bad eraseblocks handling"
32 default 1 32 default 2
33 range 0 25 33 range 0 25
34 help 34 help
35 If the MTD device admits of bad eraseblocks (e.g. NAND flash), UBI 35 If the MTD device admits of bad eraseblocks (e.g. NAND flash), UBI
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c
index acec85deb6af..fb5567878181 100644
--- a/drivers/mtd/ubi/cdev.c
+++ b/drivers/mtd/ubi/cdev.c
@@ -1026,7 +1026,7 @@ static long ctrl_cdev_ioctl(struct file *file, unsigned int cmd,
1026 { 1026 {
1027 int ubi_num; 1027 int ubi_num;
1028 1028
1029 dbg_gen("dettach MTD device"); 1029 dbg_gen("detach MTD device");
1030 err = get_user(ubi_num, (__user int32_t *)argp); 1030 err = get_user(ubi_num, (__user int32_t *)argp);
1031 if (err) { 1031 if (err) {
1032 err = -EFAULT; 1032 err = -EFAULT;
diff --git a/drivers/mtd/ubi/misc.c b/drivers/mtd/ubi/misc.c
index f6a7d7ac4b98..8bbfb444b895 100644
--- a/drivers/mtd/ubi/misc.c
+++ b/drivers/mtd/ubi/misc.c
@@ -92,7 +92,30 @@ int ubi_check_volume(struct ubi_device *ubi, int vol_id)
92} 92}
93 93
94/** 94/**
95 * ubi_calculate_rsvd_pool - calculate how many PEBs must be reserved for bad 95 * ubi_update_reserved - update bad eraseblock handling accounting data.
96 * @ubi: UBI device description object
97 *
98 * This function calculates the gap between current number of PEBs reserved for
99 * bad eraseblock handling and the required level of PEBs that must be
100 * reserved, and if necessary, reserves more PEBs to fill that gap, according
101 * to availability. Should be called with ubi->volumes_lock held.
102 */
103void ubi_update_reserved(struct ubi_device *ubi)
104{
105 int need = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs;
106
107 if (need <= 0 || ubi->avail_pebs == 0)
108 return;
109
110 need = min_t(int, need, ubi->avail_pebs);
111 ubi->avail_pebs -= need;
112 ubi->rsvd_pebs += need;
113 ubi->beb_rsvd_pebs += need;
114 ubi_msg("reserved more %d PEBs for bad PEB handling", need);
115}
116
117/**
118 * ubi_calculate_reserved - calculate how many PEBs must be reserved for bad
96 * eraseblock handling. 119 * eraseblock handling.
97 * @ubi: UBI device description object 120 * @ubi: UBI device description object
98 */ 121 */
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index a1a81c9ea8ce..84f66e3fa05d 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -647,6 +647,7 @@ int ubi_more_leb_change_data(struct ubi_device *ubi, struct ubi_volume *vol,
647int ubi_calc_data_len(const struct ubi_device *ubi, const void *buf, 647int ubi_calc_data_len(const struct ubi_device *ubi, const void *buf,
648 int length); 648 int length);
649int ubi_check_volume(struct ubi_device *ubi, int vol_id); 649int ubi_check_volume(struct ubi_device *ubi, int vol_id);
650void ubi_update_reserved(struct ubi_device *ubi);
650void ubi_calculate_reserved(struct ubi_device *ubi); 651void ubi_calculate_reserved(struct ubi_device *ubi);
651int ubi_check_pattern(const void *buf, uint8_t patt, int size); 652int ubi_check_pattern(const void *buf, uint8_t patt, int size);
652 653
diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c
index 0669cff8ac3c..9169e58c262e 100644
--- a/drivers/mtd/ubi/vmt.c
+++ b/drivers/mtd/ubi/vmt.c
@@ -443,15 +443,7 @@ int ubi_remove_volume(struct ubi_volume_desc *desc, int no_vtbl)
443 spin_lock(&ubi->volumes_lock); 443 spin_lock(&ubi->volumes_lock);
444 ubi->rsvd_pebs -= reserved_pebs; 444 ubi->rsvd_pebs -= reserved_pebs;
445 ubi->avail_pebs += reserved_pebs; 445 ubi->avail_pebs += reserved_pebs;
446 i = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs; 446 ubi_update_reserved(ubi);
447 if (i > 0) {
448 i = ubi->avail_pebs >= i ? i : ubi->avail_pebs;
449 ubi->avail_pebs -= i;
450 ubi->rsvd_pebs += i;
451 ubi->beb_rsvd_pebs += i;
452 if (i > 0)
453 ubi_msg("reserve more %d PEBs", i);
454 }
455 ubi->vol_count -= 1; 447 ubi->vol_count -= 1;
456 spin_unlock(&ubi->volumes_lock); 448 spin_unlock(&ubi->volumes_lock);
457 449
@@ -558,15 +550,7 @@ int ubi_resize_volume(struct ubi_volume_desc *desc, int reserved_pebs)
558 spin_lock(&ubi->volumes_lock); 550 spin_lock(&ubi->volumes_lock);
559 ubi->rsvd_pebs += pebs; 551 ubi->rsvd_pebs += pebs;
560 ubi->avail_pebs -= pebs; 552 ubi->avail_pebs -= pebs;
561 pebs = ubi->beb_rsvd_level - ubi->beb_rsvd_pebs; 553 ubi_update_reserved(ubi);
562 if (pebs > 0) {
563 pebs = ubi->avail_pebs >= pebs ? pebs : ubi->avail_pebs;
564 ubi->avail_pebs -= pebs;
565 ubi->rsvd_pebs += pebs;
566 ubi->beb_rsvd_pebs += pebs;
567 if (pebs > 0)
568 ubi_msg("reserve more %d PEBs", pebs);
569 }
570 for (i = 0; i < reserved_pebs; i++) 554 for (i = 0; i < reserved_pebs; i++)
571 new_mapping[i] = vol->eba_tbl[i]; 555 new_mapping[i] = vol->eba_tbl[i];
572 kfree(vol->eba_tbl); 556 kfree(vol->eba_tbl);
diff --git a/drivers/net/bonding/bond_debugfs.c b/drivers/net/bonding/bond_debugfs.c
index 3680aa251dea..2cf084eb9d52 100644
--- a/drivers/net/bonding/bond_debugfs.c
+++ b/drivers/net/bonding/bond_debugfs.c
@@ -6,7 +6,7 @@
6#include "bonding.h" 6#include "bonding.h"
7#include "bond_alb.h" 7#include "bond_alb.h"
8 8
9#ifdef CONFIG_DEBUG_FS 9#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_NET_NS)
10 10
11#include <linux/debugfs.h> 11#include <linux/debugfs.h>
12#include <linux/seq_file.h> 12#include <linux/seq_file.h>
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index b9c2ae62166d..2ee76993f052 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3227,6 +3227,12 @@ static int bond_master_netdev_event(unsigned long event,
3227 switch (event) { 3227 switch (event) {
3228 case NETDEV_CHANGENAME: 3228 case NETDEV_CHANGENAME:
3229 return bond_event_changename(event_bond); 3229 return bond_event_changename(event_bond);
3230 case NETDEV_UNREGISTER:
3231 bond_remove_proc_entry(event_bond);
3232 break;
3233 case NETDEV_REGISTER:
3234 bond_create_proc_entry(event_bond);
3235 break;
3230 default: 3236 default:
3231 break; 3237 break;
3232 } 3238 }
@@ -4411,8 +4417,6 @@ static void bond_uninit(struct net_device *bond_dev)
4411 4417
4412 bond_work_cancel_all(bond); 4418 bond_work_cancel_all(bond);
4413 4419
4414 bond_remove_proc_entry(bond);
4415
4416 bond_debug_unregister(bond); 4420 bond_debug_unregister(bond);
4417 4421
4418 __hw_addr_flush(&bond->mc_list); 4422 __hw_addr_flush(&bond->mc_list);
@@ -4814,7 +4818,6 @@ static int bond_init(struct net_device *bond_dev)
4814 4818
4815 bond_set_lockdep_class(bond_dev); 4819 bond_set_lockdep_class(bond_dev);
4816 4820
4817 bond_create_proc_entry(bond);
4818 list_add_tail(&bond->bond_list, &bn->dev_list); 4821 list_add_tail(&bond->bond_list, &bn->dev_list);
4819 4822
4820 bond_prepare_sysfs_group(bond); 4823 bond_prepare_sysfs_group(bond);
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 9cc15701101b..1f78b63d5efe 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -261,7 +261,6 @@ static void atl1c_check_link_status(struct atl1c_adapter *adapter)
261 if ((phy_data & BMSR_LSTATUS) == 0) { 261 if ((phy_data & BMSR_LSTATUS) == 0) {
262 /* link down */ 262 /* link down */
263 netif_carrier_off(netdev); 263 netif_carrier_off(netdev);
264 netif_stop_queue(netdev);
265 hw->hibernate = true; 264 hw->hibernate = true;
266 if (atl1c_reset_mac(hw) != 0) 265 if (atl1c_reset_mac(hw) != 0)
267 if (netif_msg_hw(adapter)) 266 if (netif_msg_hw(adapter))
diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c
index 46b8b7d81633..d09c6b583d17 100644
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -656,7 +656,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
656 dma_unmap_single(bp->sdev->dma_dev, mapping, 656 dma_unmap_single(bp->sdev->dma_dev, mapping,
657 RX_PKT_BUF_SZ, DMA_FROM_DEVICE); 657 RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
658 dev_kfree_skb_any(skb); 658 dev_kfree_skb_any(skb);
659 skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA); 659 skb = alloc_skb(RX_PKT_BUF_SZ, GFP_ATOMIC | GFP_DMA);
660 if (skb == NULL) 660 if (skb == NULL)
661 return -ENOMEM; 661 return -ENOMEM;
662 mapping = dma_map_single(bp->sdev->dma_dev, skb->data, 662 mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
@@ -967,7 +967,7 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
967 dma_unmap_single(bp->sdev->dma_dev, mapping, len, 967 dma_unmap_single(bp->sdev->dma_dev, mapping, len,
968 DMA_TO_DEVICE); 968 DMA_TO_DEVICE);
969 969
970 bounce_skb = __netdev_alloc_skb(dev, len, GFP_ATOMIC | GFP_DMA); 970 bounce_skb = alloc_skb(len, GFP_ATOMIC | GFP_DMA);
971 if (!bounce_skb) 971 if (!bounce_skb)
972 goto err_out; 972 goto err_out;
973 973
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index ac7b74488531..1fa4927a45b1 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -5372,7 +5372,7 @@ bnx2_free_tx_skbs(struct bnx2 *bp)
5372 int k, last; 5372 int k, last;
5373 5373
5374 if (skb == NULL) { 5374 if (skb == NULL) {
5375 j++; 5375 j = NEXT_TX_BD(j);
5376 continue; 5376 continue;
5377 } 5377 }
5378 5378
@@ -5384,8 +5384,8 @@ bnx2_free_tx_skbs(struct bnx2 *bp)
5384 tx_buf->skb = NULL; 5384 tx_buf->skb = NULL;
5385 5385
5386 last = tx_buf->nr_frags; 5386 last = tx_buf->nr_frags;
5387 j++; 5387 j = NEXT_TX_BD(j);
5388 for (k = 0; k < last; k++, j++) { 5388 for (k = 0; k < last; k++, j = NEXT_TX_BD(j)) {
5389 tx_buf = &txr->tx_buf_ring[TX_RING_IDX(j)]; 5389 tx_buf = &txr->tx_buf_ring[TX_RING_IDX(j)];
5390 dma_unmap_page(&bp->pdev->dev, 5390 dma_unmap_page(&bp->pdev->dev,
5391 dma_unmap_addr(tx_buf, mapping), 5391 dma_unmap_addr(tx_buf, mapping),
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index c95e7b5e2b85..2c89d17cbb29 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -534,7 +534,8 @@ int cnic_unregister_driver(int ulp_type)
534 } 534 }
535 535
536 if (atomic_read(&ulp_ops->ref_count) != 0) 536 if (atomic_read(&ulp_ops->ref_count) != 0)
537 netdev_warn(dev->netdev, "Failed waiting for ref count to go to zero\n"); 537 pr_warn("%s: Failed waiting for ref count to go to zero\n",
538 __func__);
538 return 0; 539 return 0;
539 540
540out_unlock: 541out_unlock:
@@ -1053,12 +1054,13 @@ static int cnic_init_uio(struct cnic_dev *dev)
1053 1054
1054 uinfo = &udev->cnic_uinfo; 1055 uinfo = &udev->cnic_uinfo;
1055 1056
1056 uinfo->mem[0].addr = dev->netdev->base_addr; 1057 uinfo->mem[0].addr = pci_resource_start(dev->pcidev, 0);
1057 uinfo->mem[0].internal_addr = dev->regview; 1058 uinfo->mem[0].internal_addr = dev->regview;
1058 uinfo->mem[0].size = dev->netdev->mem_end - dev->netdev->mem_start;
1059 uinfo->mem[0].memtype = UIO_MEM_PHYS; 1059 uinfo->mem[0].memtype = UIO_MEM_PHYS;
1060 1060
1061 if (test_bit(CNIC_F_BNX2_CLASS, &dev->flags)) { 1061 if (test_bit(CNIC_F_BNX2_CLASS, &dev->flags)) {
1062 uinfo->mem[0].size = MB_GET_CID_ADDR(TX_TSS_CID +
1063 TX_MAX_TSS_RINGS + 1);
1062 uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & 1064 uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen &
1063 PAGE_MASK; 1065 PAGE_MASK;
1064 if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) 1066 if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX)
@@ -1068,6 +1070,8 @@ static int cnic_init_uio(struct cnic_dev *dev)
1068 1070
1069 uinfo->name = "bnx2_cnic"; 1071 uinfo->name = "bnx2_cnic";
1070 } else if (test_bit(CNIC_F_BNX2X_CLASS, &dev->flags)) { 1072 } else if (test_bit(CNIC_F_BNX2X_CLASS, &dev->flags)) {
1073 uinfo->mem[0].size = pci_resource_len(dev->pcidev, 0);
1074
1071 uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & 1075 uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk &
1072 PAGE_MASK; 1076 PAGE_MASK;
1073 uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); 1077 uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk);
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 0741aded9eb0..ab1d80ff0791 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1804,18 +1804,16 @@ void gfar_configure_coalescing(struct gfar_private *priv,
1804 if (priv->mode == MQ_MG_MODE) { 1804 if (priv->mode == MQ_MG_MODE) {
1805 baddr = &regs->txic0; 1805 baddr = &regs->txic0;
1806 for_each_set_bit(i, &tx_mask, priv->num_tx_queues) { 1806 for_each_set_bit(i, &tx_mask, priv->num_tx_queues) {
1807 if (likely(priv->tx_queue[i]->txcoalescing)) { 1807 gfar_write(baddr + i, 0);
1808 gfar_write(baddr + i, 0); 1808 if (likely(priv->tx_queue[i]->txcoalescing))
1809 gfar_write(baddr + i, priv->tx_queue[i]->txic); 1809 gfar_write(baddr + i, priv->tx_queue[i]->txic);
1810 }
1811 } 1810 }
1812 1811
1813 baddr = &regs->rxic0; 1812 baddr = &regs->rxic0;
1814 for_each_set_bit(i, &rx_mask, priv->num_rx_queues) { 1813 for_each_set_bit(i, &rx_mask, priv->num_rx_queues) {
1815 if (likely(priv->rx_queue[i]->rxcoalescing)) { 1814 gfar_write(baddr + i, 0);
1816 gfar_write(baddr + i, 0); 1815 if (likely(priv->rx_queue[i]->rxcoalescing))
1817 gfar_write(baddr + i, priv->rx_queue[i]->rxic); 1816 gfar_write(baddr + i, priv->rx_queue[i]->rxic);
1818 }
1819 } 1817 }
1820 } 1818 }
1821} 1819}
@@ -2065,10 +2063,9 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
2065 return NETDEV_TX_OK; 2063 return NETDEV_TX_OK;
2066 } 2064 }
2067 2065
2068 /* Steal sock reference for processing TX time stamps */ 2066 if (skb->sk)
2069 swap(skb_new->sk, skb->sk); 2067 skb_set_owner_w(skb_new, skb->sk);
2070 swap(skb_new->destructor, skb->destructor); 2068 consume_skb(skb);
2071 kfree_skb(skb);
2072 skb = skb_new; 2069 skb = skb_new;
2073 } 2070 }
2074 2071
diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
index 36db4df09aed..1f063dcd8f85 100644
--- a/drivers/net/ethernet/intel/e1000e/82571.c
+++ b/drivers/net/ethernet/intel/e1000e/82571.c
@@ -1572,6 +1572,9 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
1572 ctrl = er32(CTRL); 1572 ctrl = er32(CTRL);
1573 status = er32(STATUS); 1573 status = er32(STATUS);
1574 rxcw = er32(RXCW); 1574 rxcw = er32(RXCW);
1575 /* SYNCH bit and IV bit are sticky */
1576 udelay(10);
1577 rxcw = er32(RXCW);
1575 1578
1576 if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) { 1579 if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) {
1577 1580
diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h
index 351a4097b2ba..76edbc1be33b 100644
--- a/drivers/net/ethernet/intel/e1000e/defines.h
+++ b/drivers/net/ethernet/intel/e1000e/defines.h
@@ -103,6 +103,7 @@
103#define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */ 103#define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */
104#define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */ 104#define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */
105#define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */ 105#define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */
106#define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */
106#define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */ 107#define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */
107#define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */ 108#define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */
108 109
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index 238ab2f8a5e7..e3a7b07df629 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -325,24 +325,46 @@ static inline void __ew32flash(struct e1000_hw *hw, unsigned long reg, u32 val)
325 **/ 325 **/
326static bool e1000_phy_is_accessible_pchlan(struct e1000_hw *hw) 326static bool e1000_phy_is_accessible_pchlan(struct e1000_hw *hw)
327{ 327{
328 u16 phy_reg; 328 u16 phy_reg = 0;
329 u32 phy_id; 329 u32 phy_id = 0;
330 s32 ret_val;
331 u16 retry_count;
332
333 for (retry_count = 0; retry_count < 2; retry_count++) {
334 ret_val = e1e_rphy_locked(hw, PHY_ID1, &phy_reg);
335 if (ret_val || (phy_reg == 0xFFFF))
336 continue;
337 phy_id = (u32)(phy_reg << 16);
330 338
331 e1e_rphy_locked(hw, PHY_ID1, &phy_reg); 339 ret_val = e1e_rphy_locked(hw, PHY_ID2, &phy_reg);
332 phy_id = (u32)(phy_reg << 16); 340 if (ret_val || (phy_reg == 0xFFFF)) {
333 e1e_rphy_locked(hw, PHY_ID2, &phy_reg); 341 phy_id = 0;
334 phy_id |= (u32)(phy_reg & PHY_REVISION_MASK); 342 continue;
343 }
344 phy_id |= (u32)(phy_reg & PHY_REVISION_MASK);
345 break;
346 }
335 347
336 if (hw->phy.id) { 348 if (hw->phy.id) {
337 if (hw->phy.id == phy_id) 349 if (hw->phy.id == phy_id)
338 return true; 350 return true;
339 } else { 351 } else if (phy_id) {
340 if ((phy_id != 0) && (phy_id != PHY_REVISION_MASK)) 352 hw->phy.id = phy_id;
341 hw->phy.id = phy_id; 353 hw->phy.revision = (u32)(phy_reg & ~PHY_REVISION_MASK);
342 return true; 354 return true;
343 } 355 }
344 356
345 return false; 357 /*
358 * In case the PHY needs to be in mdio slow mode,
359 * set slow mode and try to get the PHY id again.
360 */
361 hw->phy.ops.release(hw);
362 ret_val = e1000_set_mdio_slow_mode_hv(hw);
363 if (!ret_val)
364 ret_val = e1000e_get_phy_id(hw);
365 hw->phy.ops.acquire(hw);
366
367 return !ret_val;
346} 368}
347 369
348/** 370/**
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 31d37a2b5ba8..623e30b9964d 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -496,7 +496,7 @@ static void e1000_receive_skb(struct e1000_adapter *adapter,
496 * @sk_buff: socket buffer with received data 496 * @sk_buff: socket buffer with received data
497 **/ 497 **/
498static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err, 498static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,
499 __le16 csum, struct sk_buff *skb) 499 struct sk_buff *skb)
500{ 500{
501 u16 status = (u16)status_err; 501 u16 status = (u16)status_err;
502 u8 errors = (u8)(status_err >> 24); 502 u8 errors = (u8)(status_err >> 24);
@@ -511,8 +511,8 @@ static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,
511 if (status & E1000_RXD_STAT_IXSM) 511 if (status & E1000_RXD_STAT_IXSM)
512 return; 512 return;
513 513
514 /* TCP/UDP checksum error bit is set */ 514 /* TCP/UDP checksum error bit or IP checksum error bit is set */
515 if (errors & E1000_RXD_ERR_TCPE) { 515 if (errors & (E1000_RXD_ERR_TCPE | E1000_RXD_ERR_IPE)) {
516 /* let the stack verify checksum errors */ 516 /* let the stack verify checksum errors */
517 adapter->hw_csum_err++; 517 adapter->hw_csum_err++;
518 return; 518 return;
@@ -523,19 +523,7 @@ static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,
523 return; 523 return;
524 524
525 /* It must be a TCP or UDP packet with a valid checksum */ 525 /* It must be a TCP or UDP packet with a valid checksum */
526 if (status & E1000_RXD_STAT_TCPCS) { 526 skb->ip_summed = CHECKSUM_UNNECESSARY;
527 /* TCP checksum is good */
528 skb->ip_summed = CHECKSUM_UNNECESSARY;
529 } else {
530 /*
531 * IP fragment with UDP payload
532 * Hardware complements the payload checksum, so we undo it
533 * and then put the value in host order for further stack use.
534 */
535 __sum16 sum = (__force __sum16)swab16((__force u16)csum);
536 skb->csum = csum_unfold(~sum);
537 skb->ip_summed = CHECKSUM_COMPLETE;
538 }
539 adapter->hw_csum_good++; 527 adapter->hw_csum_good++;
540} 528}
541 529
@@ -954,8 +942,7 @@ static bool e1000_clean_rx_irq(struct e1000_ring *rx_ring, int *work_done,
954 skb_put(skb, length); 942 skb_put(skb, length);
955 943
956 /* Receive Checksum Offload */ 944 /* Receive Checksum Offload */
957 e1000_rx_checksum(adapter, staterr, 945 e1000_rx_checksum(adapter, staterr, skb);
958 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
959 946
960 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb); 947 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
961 948
@@ -1341,8 +1328,7 @@ copydone:
1341 total_rx_bytes += skb->len; 1328 total_rx_bytes += skb->len;
1342 total_rx_packets++; 1329 total_rx_packets++;
1343 1330
1344 e1000_rx_checksum(adapter, staterr, 1331 e1000_rx_checksum(adapter, staterr, skb);
1345 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
1346 1332
1347 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb); 1333 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
1348 1334
@@ -1512,9 +1498,8 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_ring *rx_ring, int *work_done,
1512 } 1498 }
1513 } 1499 }
1514 1500
1515 /* Receive Checksum Offload XXX recompute due to CRC strip? */ 1501 /* Receive Checksum Offload */
1516 e1000_rx_checksum(adapter, staterr, 1502 e1000_rx_checksum(adapter, staterr, skb);
1517 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
1518 1503
1519 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb); 1504 e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
1520 1505
@@ -3098,19 +3083,10 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
3098 3083
3099 /* Enable Receive Checksum Offload for TCP and UDP */ 3084 /* Enable Receive Checksum Offload for TCP and UDP */
3100 rxcsum = er32(RXCSUM); 3085 rxcsum = er32(RXCSUM);
3101 if (adapter->netdev->features & NETIF_F_RXCSUM) { 3086 if (adapter->netdev->features & NETIF_F_RXCSUM)
3102 rxcsum |= E1000_RXCSUM_TUOFL; 3087 rxcsum |= E1000_RXCSUM_TUOFL;
3103 3088 else
3104 /*
3105 * IPv4 payload checksum for UDP fragments must be
3106 * used in conjunction with packet-split.
3107 */
3108 if (adapter->rx_ps_pages)
3109 rxcsum |= E1000_RXCSUM_IPPCSE;
3110 } else {
3111 rxcsum &= ~E1000_RXCSUM_TUOFL; 3089 rxcsum &= ~E1000_RXCSUM_TUOFL;
3112 /* no need to clear IPPCSE as it defaults to 0 */
3113 }
3114 ew32(RXCSUM, rxcsum); 3090 ew32(RXCSUM, rxcsum);
3115 3091
3116 if (adapter->hw.mac.type == e1000_pch2lan) { 3092 if (adapter->hw.mac.type == e1000_pch2lan) {
@@ -5241,22 +5217,10 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
5241 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; 5217 int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
5242 5218
5243 /* Jumbo frame support */ 5219 /* Jumbo frame support */
5244 if (max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) { 5220 if ((max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) &&
5245 if (!(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) { 5221 !(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
5246 e_err("Jumbo Frames not supported.\n"); 5222 e_err("Jumbo Frames not supported.\n");
5247 return -EINVAL; 5223 return -EINVAL;
5248 }
5249
5250 /*
5251 * IP payload checksum (enabled with jumbos/packet-split when
5252 * Rx checksum is enabled) and generation of RSS hash is
5253 * mutually exclusive in the hardware.
5254 */
5255 if ((netdev->features & NETIF_F_RXCSUM) &&
5256 (netdev->features & NETIF_F_RXHASH)) {
5257 e_err("Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled. Disable one of the receive offload features before enabling jumbos.\n");
5258 return -EINVAL;
5259 }
5260 } 5224 }
5261 5225
5262 /* Supported frame sizes */ 5226 /* Supported frame sizes */
@@ -6030,17 +5994,6 @@ static int e1000_set_features(struct net_device *netdev,
6030 NETIF_F_RXALL))) 5994 NETIF_F_RXALL)))
6031 return 0; 5995 return 0;
6032 5996
6033 /*
6034 * IP payload checksum (enabled with jumbos/packet-split when Rx
6035 * checksum is enabled) and generation of RSS hash is mutually
6036 * exclusive in the hardware.
6037 */
6038 if (adapter->rx_ps_pages &&
6039 (features & NETIF_F_RXCSUM) && (features & NETIF_F_RXHASH)) {
6040 e_err("Enabling both receive checksum offload and receive hashing is not possible with jumbo frames. Disable jumbos or enable only one of the receive offload features.\n");
6041 return -EINVAL;
6042 }
6043
6044 if (changed & NETIF_F_RXFCS) { 5997 if (changed & NETIF_F_RXFCS) {
6045 if (features & NETIF_F_RXFCS) { 5998 if (features & NETIF_F_RXFCS) {
6046 adapter->flags2 &= ~FLAG2_CRC_STRIPPING; 5999 adapter->flags2 &= ~FLAG2_CRC_STRIPPING;
diff --git a/drivers/net/ethernet/intel/igbvf/ethtool.c b/drivers/net/ethernet/intel/igbvf/ethtool.c
index 8ce67064b9c5..90eef07943f4 100644
--- a/drivers/net/ethernet/intel/igbvf/ethtool.c
+++ b/drivers/net/ethernet/intel/igbvf/ethtool.c
@@ -357,21 +357,28 @@ static int igbvf_set_coalesce(struct net_device *netdev,
357 struct igbvf_adapter *adapter = netdev_priv(netdev); 357 struct igbvf_adapter *adapter = netdev_priv(netdev);
358 struct e1000_hw *hw = &adapter->hw; 358 struct e1000_hw *hw = &adapter->hw;
359 359
360 if ((ec->rx_coalesce_usecs > IGBVF_MAX_ITR_USECS) || 360 if ((ec->rx_coalesce_usecs >= IGBVF_MIN_ITR_USECS) &&
361 ((ec->rx_coalesce_usecs > 3) && 361 (ec->rx_coalesce_usecs <= IGBVF_MAX_ITR_USECS)) {
362 (ec->rx_coalesce_usecs < IGBVF_MIN_ITR_USECS)) || 362 adapter->current_itr = ec->rx_coalesce_usecs << 2;
363 (ec->rx_coalesce_usecs == 2)) 363 adapter->requested_itr = 1000000000 /
364 return -EINVAL; 364 (adapter->current_itr * 256);
365 365 } else if ((ec->rx_coalesce_usecs == 3) ||
366 /* convert to rate of irq's per second */ 366 (ec->rx_coalesce_usecs == 2)) {
367 if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) {
368 adapter->current_itr = IGBVF_START_ITR; 367 adapter->current_itr = IGBVF_START_ITR;
369 adapter->requested_itr = ec->rx_coalesce_usecs; 368 adapter->requested_itr = ec->rx_coalesce_usecs;
370 } else { 369 } else if (ec->rx_coalesce_usecs == 0) {
371 adapter->current_itr = ec->rx_coalesce_usecs << 2; 370 /*
371 * The user's desire is to turn off interrupt throttling
372 * altogether, but due to HW limitations, we can't do that.
373 * Instead we set a very small value in EITR, which would
374 * allow ~967k interrupts per second, but allow the adapter's
375 * internal clocking to still function properly.
376 */
377 adapter->current_itr = 4;
372 adapter->requested_itr = 1000000000 / 378 adapter->requested_itr = 1000000000 /
373 (adapter->current_itr * 256); 379 (adapter->current_itr * 256);
374 } 380 } else
381 return -EINVAL;
375 382
376 writel(adapter->current_itr, 383 writel(adapter->current_itr,
377 hw->hw_addr + adapter->rx_ring->itr_register); 384 hw->hw_addr + adapter->rx_ring->itr_register);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 18ca3bcadf0c..e242104ab471 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -6647,6 +6647,11 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
6647 return -EINVAL; 6647 return -EINVAL;
6648 } 6648 }
6649 6649
6650 if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) {
6651 e_err(drv, "Enable failed, SR-IOV enabled\n");
6652 return -EINVAL;
6653 }
6654
6650 /* Hardware supports up to 8 traffic classes */ 6655 /* Hardware supports up to 8 traffic classes */
6651 if (tc > adapter->dcb_cfg.num_tcs.pg_tcs || 6656 if (tc > adapter->dcb_cfg.num_tcs.pg_tcs ||
6652 (hw->mac.type == ixgbe_mac_82598EB && 6657 (hw->mac.type == ixgbe_mac_82598EB &&
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index f69ec4288b10..41e32257a4e8 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -201,6 +201,9 @@ static bool ixgbevf_clean_tx_irq(struct ixgbevf_adapter *adapter,
201 unsigned int i, eop, count = 0; 201 unsigned int i, eop, count = 0;
202 unsigned int total_bytes = 0, total_packets = 0; 202 unsigned int total_bytes = 0, total_packets = 0;
203 203
204 if (test_bit(__IXGBEVF_DOWN, &adapter->state))
205 return true;
206
204 i = tx_ring->next_to_clean; 207 i = tx_ring->next_to_clean;
205 eop = tx_ring->tx_buffer_info[i].next_to_watch; 208 eop = tx_ring->tx_buffer_info[i].next_to_watch;
206 eop_desc = IXGBE_TX_DESC_ADV(*tx_ring, eop); 209 eop_desc = IXGBE_TX_DESC_ADV(*tx_ring, eop);
@@ -969,8 +972,6 @@ static irqreturn_t ixgbevf_msix_clean_tx(int irq, void *data)
969 r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues); 972 r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
970 for (i = 0; i < q_vector->txr_count; i++) { 973 for (i = 0; i < q_vector->txr_count; i++) {
971 tx_ring = &(adapter->tx_ring[r_idx]); 974 tx_ring = &(adapter->tx_ring[r_idx]);
972 tx_ring->total_bytes = 0;
973 tx_ring->total_packets = 0;
974 ixgbevf_clean_tx_irq(adapter, tx_ring); 975 ixgbevf_clean_tx_irq(adapter, tx_ring);
975 r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues, 976 r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
976 r_idx + 1); 977 r_idx + 1);
@@ -994,16 +995,6 @@ static irqreturn_t ixgbevf_msix_clean_rx(int irq, void *data)
994 struct ixgbe_hw *hw = &adapter->hw; 995 struct ixgbe_hw *hw = &adapter->hw;
995 struct ixgbevf_ring *rx_ring; 996 struct ixgbevf_ring *rx_ring;
996 int r_idx; 997 int r_idx;
997 int i;
998
999 r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
1000 for (i = 0; i < q_vector->rxr_count; i++) {
1001 rx_ring = &(adapter->rx_ring[r_idx]);
1002 rx_ring->total_bytes = 0;
1003 rx_ring->total_packets = 0;
1004 r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
1005 r_idx + 1);
1006 }
1007 998
1008 if (!q_vector->rxr_count) 999 if (!q_vector->rxr_count)
1009 return IRQ_HANDLED; 1000 return IRQ_HANDLED;
diff --git a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
index fb8377da1687..4b785e10f2ed 100644
--- a/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
+++ b/drivers/net/ethernet/stmicro/stmmac/ring_mode.c
@@ -51,7 +51,7 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
51 desc->des3 = desc->des2 + BUF_SIZE_4KiB; 51 desc->des3 = desc->des2 + BUF_SIZE_4KiB;
52 priv->hw->desc->prepare_tx_desc(desc, 1, bmax, 52 priv->hw->desc->prepare_tx_desc(desc, 1, bmax,
53 csum); 53 csum);
54 54 wmb();
55 entry = (++priv->cur_tx) % txsize; 55 entry = (++priv->cur_tx) % txsize;
56 desc = priv->dma_tx + entry; 56 desc = priv->dma_tx + entry;
57 57
@@ -59,6 +59,7 @@ static unsigned int stmmac_jumbo_frm(void *p, struct sk_buff *skb, int csum)
59 len, DMA_TO_DEVICE); 59 len, DMA_TO_DEVICE);
60 desc->des3 = desc->des2 + BUF_SIZE_4KiB; 60 desc->des3 = desc->des2 + BUF_SIZE_4KiB;
61 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum); 61 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum);
62 wmb();
62 priv->hw->desc->set_tx_owner(desc); 63 priv->hw->desc->set_tx_owner(desc);
63 priv->tx_skbuff[entry] = NULL; 64 priv->tx_skbuff[entry] = NULL;
64 } else { 65 } else {
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 51b3b68528ee..ea3003edde18 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -1212,6 +1212,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
1212 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion); 1212 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion);
1213 wmb(); 1213 wmb();
1214 priv->hw->desc->set_tx_owner(desc); 1214 priv->hw->desc->set_tx_owner(desc);
1215 wmb();
1215 } 1216 }
1216 1217
1217 /* Interrupt on completition only for the latest segment */ 1218 /* Interrupt on completition only for the latest segment */
@@ -1227,6 +1228,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
1227 1228
1228 /* To avoid raise condition */ 1229 /* To avoid raise condition */
1229 priv->hw->desc->set_tx_owner(first); 1230 priv->hw->desc->set_tx_owner(first);
1231 wmb();
1230 1232
1231 priv->cur_tx++; 1233 priv->cur_tx++;
1232 1234
@@ -1290,6 +1292,7 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
1290 } 1292 }
1291 wmb(); 1293 wmb();
1292 priv->hw->desc->set_rx_owner(p + entry); 1294 priv->hw->desc->set_rx_owner(p + entry);
1295 wmb();
1293 } 1296 }
1294} 1297}
1295 1298
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c
index d614c374ed9d..3b5c4571b55e 100644
--- a/drivers/net/ethernet/ti/davinci_cpdma.c
+++ b/drivers/net/ethernet/ti/davinci_cpdma.c
@@ -15,6 +15,7 @@
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/spinlock.h> 16#include <linux/spinlock.h>
17#include <linux/device.h> 17#include <linux/device.h>
18#include <linux/module.h>
18#include <linux/slab.h> 19#include <linux/slab.h>
19#include <linux/err.h> 20#include <linux/err.h>
20#include <linux/dma-mapping.h> 21#include <linux/dma-mapping.h>
diff --git a/drivers/net/phy/mdio-mux.c b/drivers/net/phy/mdio-mux.c
index 39ea0674dcde..5c120189ec86 100644
--- a/drivers/net/phy/mdio-mux.c
+++ b/drivers/net/phy/mdio-mux.c
@@ -46,7 +46,13 @@ static int mdio_mux_read(struct mii_bus *bus, int phy_id, int regnum)
46 struct mdio_mux_parent_bus *pb = cb->parent; 46 struct mdio_mux_parent_bus *pb = cb->parent;
47 int r; 47 int r;
48 48
49 mutex_lock(&pb->mii_bus->mdio_lock); 49 /* In theory multiple mdio_mux could be stacked, thus creating
50 * more than a single level of nesting. But in practice,
51 * SINGLE_DEPTH_NESTING will cover the vast majority of use
52 * cases. We use it, instead of trying to handle the general
53 * case.
54 */
55 mutex_lock_nested(&pb->mii_bus->mdio_lock, SINGLE_DEPTH_NESTING);
50 r = pb->switch_fn(pb->current_child, cb->bus_number, pb->switch_data); 56 r = pb->switch_fn(pb->current_child, cb->bus_number, pb->switch_data);
51 if (r) 57 if (r)
52 goto out; 58 goto out;
@@ -71,7 +77,7 @@ static int mdio_mux_write(struct mii_bus *bus, int phy_id,
71 77
72 int r; 78 int r;
73 79
74 mutex_lock(&pb->mii_bus->mdio_lock); 80 mutex_lock_nested(&pb->mii_bus->mdio_lock, SINGLE_DEPTH_NESTING);
75 r = pb->switch_fn(pb->current_child, cb->bus_number, pb->switch_data); 81 r = pb->switch_fn(pb->current_child, cb->bus_number, pb->switch_data);
76 if (r) 82 if (r)
77 goto out; 83 goto out;
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 3767a1225860..a051cedd64bd 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -197,6 +197,10 @@ err:
197static int qmi_wwan_cdc_wdm_manage_power(struct usb_interface *intf, int on) 197static int qmi_wwan_cdc_wdm_manage_power(struct usb_interface *intf, int on)
198{ 198{
199 struct usbnet *dev = usb_get_intfdata(intf); 199 struct usbnet *dev = usb_get_intfdata(intf);
200
201 /* can be called while disconnecting */
202 if (!dev)
203 return 0;
200 return qmi_wwan_manage_power(dev, on); 204 return qmi_wwan_manage_power(dev, on);
201} 205}
202 206
@@ -342,6 +346,15 @@ static const struct driver_info qmi_wwan_force_int1 = {
342 .data = BIT(1), /* interface whitelist bitmap */ 346 .data = BIT(1), /* interface whitelist bitmap */
343}; 347};
344 348
349static const struct driver_info qmi_wwan_force_int2 = {
350 .description = "Qualcomm WWAN/QMI device",
351 .flags = FLAG_WWAN,
352 .bind = qmi_wwan_bind_shared,
353 .unbind = qmi_wwan_unbind_shared,
354 .manage_power = qmi_wwan_manage_power,
355 .data = BIT(2), /* interface whitelist bitmap */
356};
357
345static const struct driver_info qmi_wwan_force_int3 = { 358static const struct driver_info qmi_wwan_force_int3 = {
346 .description = "Qualcomm WWAN/QMI device", 359 .description = "Qualcomm WWAN/QMI device",
347 .flags = FLAG_WWAN, 360 .flags = FLAG_WWAN,
@@ -494,6 +507,15 @@ static const struct usb_device_id products[] = {
494 .bInterfaceProtocol = 0xff, 507 .bInterfaceProtocol = 0xff,
495 .driver_info = (unsigned long)&qmi_wwan_force_int4, 508 .driver_info = (unsigned long)&qmi_wwan_force_int4,
496 }, 509 },
510 { /* ZTE MF60 */
511 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO,
512 .idVendor = 0x19d2,
513 .idProduct = 0x1402,
514 .bInterfaceClass = 0xff,
515 .bInterfaceSubClass = 0xff,
516 .bInterfaceProtocol = 0xff,
517 .driver_info = (unsigned long)&qmi_wwan_force_int2,
518 },
497 { /* Sierra Wireless MC77xx in QMI mode */ 519 { /* Sierra Wireless MC77xx in QMI mode */
498 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, 520 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO,
499 .idVendor = 0x1199, 521 .idVendor = 0x1199,
diff --git a/drivers/net/wireless/ath/ath.h b/drivers/net/wireless/ath/ath.h
index c54b7d37bff1..420d69b2674c 100644
--- a/drivers/net/wireless/ath/ath.h
+++ b/drivers/net/wireless/ath/ath.h
@@ -143,6 +143,7 @@ struct ath_common {
143 u32 keymax; 143 u32 keymax;
144 DECLARE_BITMAP(keymap, ATH_KEYMAX); 144 DECLARE_BITMAP(keymap, ATH_KEYMAX);
145 DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX); 145 DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX);
146 DECLARE_BITMAP(ccmp_keymap, ATH_KEYMAX);
146 enum ath_crypt_caps crypt_caps; 147 enum ath_crypt_caps crypt_caps;
147 148
148 unsigned int clockrate; 149 unsigned int clockrate;
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 1c68e564f503..995ca8e1302e 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -622,7 +622,7 @@ static int __ath9k_hw_init(struct ath_hw *ah)
622 622
623 if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_AUTO) { 623 if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_AUTO) {
624 if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCI || 624 if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCI ||
625 ((AR_SREV_9160(ah) || AR_SREV_9280(ah)) && 625 ((AR_SREV_9160(ah) || AR_SREV_9280(ah) || AR_SREV_9287(ah)) &&
626 !ah->is_pciexpress)) { 626 !ah->is_pciexpress)) {
627 ah->config.serialize_regmode = 627 ah->config.serialize_regmode =
628 SER_REG_MODE_ON; 628 SER_REG_MODE_ON;
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index e1fcc68124dc..0735aeb3b26c 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -695,9 +695,9 @@ static bool ath_edma_get_buffers(struct ath_softc *sc,
695 __skb_unlink(skb, &rx_edma->rx_fifo); 695 __skb_unlink(skb, &rx_edma->rx_fifo);
696 list_add_tail(&bf->list, &sc->rx.rxbuf); 696 list_add_tail(&bf->list, &sc->rx.rxbuf);
697 ath_rx_edma_buf_link(sc, qtype); 697 ath_rx_edma_buf_link(sc, qtype);
698 } else {
699 bf = NULL;
700 } 698 }
699
700 bf = NULL;
701 } 701 }
702 702
703 *dest = bf; 703 *dest = bf;
@@ -822,7 +822,8 @@ static bool ath9k_rx_accept(struct ath_common *common,
822 * descriptor does contain a valid key index. This has been observed 822 * descriptor does contain a valid key index. This has been observed
823 * mostly with CCMP encryption. 823 * mostly with CCMP encryption.
824 */ 824 */
825 if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID) 825 if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID ||
826 !test_bit(rx_stats->rs_keyix, common->ccmp_keymap))
826 rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS; 827 rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
827 828
828 if (!rx_stats->rs_datalen) { 829 if (!rx_stats->rs_datalen) {
diff --git a/drivers/net/wireless/ath/key.c b/drivers/net/wireless/ath/key.c
index 0e81904956cf..5c54aa43ca2d 100644
--- a/drivers/net/wireless/ath/key.c
+++ b/drivers/net/wireless/ath/key.c
@@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *common,
556 return -EIO; 556 return -EIO;
557 557
558 set_bit(idx, common->keymap); 558 set_bit(idx, common->keymap);
559 if (key->cipher == WLAN_CIPHER_SUITE_CCMP)
560 set_bit(idx, common->ccmp_keymap);
561
559 if (key->cipher == WLAN_CIPHER_SUITE_TKIP) { 562 if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
560 set_bit(idx + 64, common->keymap); 563 set_bit(idx + 64, common->keymap);
561 set_bit(idx, common->tkip_keymap); 564 set_bit(idx, common->tkip_keymap);
@@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key)
582 return; 585 return;
583 586
584 clear_bit(key->hw_key_idx, common->keymap); 587 clear_bit(key->hw_key_idx, common->keymap);
588 clear_bit(key->hw_key_idx, common->ccmp_keymap);
585 if (key->cipher != WLAN_CIPHER_SUITE_TKIP) 589 if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
586 return; 590 return;
587 591
diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
index f1f8bd09bd87..c8baf020c20f 100644
--- a/drivers/net/wireless/b43legacy/dma.c
+++ b/drivers/net/wireless/b43legacy/dma.c
@@ -1072,7 +1072,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
1072 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); 1072 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
1073 /* create a bounce buffer in zone_dma on mapping failure. */ 1073 /* create a bounce buffer in zone_dma on mapping failure. */
1074 if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) { 1074 if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
1075 bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA); 1075 bounce_skb = alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
1076 if (!bounce_skb) { 1076 if (!bounce_skb) {
1077 ring->current_slot = old_top_slot; 1077 ring->current_slot = old_top_slot;
1078 ring->used_slots = old_used_slots; 1078 ring->used_slots = old_used_slots;
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
index 509301a5e7e2..ff5d689e13f3 100644
--- a/drivers/net/wireless/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/iwlegacy/4965-mac.c
@@ -3405,7 +3405,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
3405 return 0; 3405 return 0;
3406 } 3406 }
3407 3407
3408 if (il->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET) { 3408 if (il->stations[sta_id].sta.key.key_flags & STA_KEY_FLG_INVALID) {
3409 IL_WARN("Removing wrong key %d 0x%x\n", keyconf->keyidx, 3409 IL_WARN("Removing wrong key %d 0x%x\n", keyconf->keyidx,
3410 key_flags); 3410 key_flags);
3411 spin_unlock_irqrestore(&il->sta_lock, flags); 3411 spin_unlock_irqrestore(&il->sta_lock, flags);
@@ -3420,7 +3420,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
3420 memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo)); 3420 memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo));
3421 il->stations[sta_id].sta.key.key_flags = 3421 il->stations[sta_id].sta.key.key_flags =
3422 STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; 3422 STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID;
3423 il->stations[sta_id].sta.key.key_offset = WEP_INVALID_OFFSET; 3423 il->stations[sta_id].sta.key.key_offset = keyconf->hw_key_idx;
3424 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; 3424 il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
3425 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; 3425 il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
3426 3426
diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
index cbf2dc18341f..5d4807c2b56d 100644
--- a/drivers/net/wireless/iwlegacy/common.c
+++ b/drivers/net/wireless/iwlegacy/common.c
@@ -4767,14 +4767,12 @@ il_bg_watchdog(unsigned long data)
4767 return; 4767 return;
4768 4768
4769 /* monitor and check for other stuck queues */ 4769 /* monitor and check for other stuck queues */
4770 if (il_is_any_associated(il)) { 4770 for (cnt = 0; cnt < il->hw_params.max_txq_num; cnt++) {
4771 for (cnt = 0; cnt < il->hw_params.max_txq_num; cnt++) { 4771 /* skip as we already checked the command queue */
4772 /* skip as we already checked the command queue */ 4772 if (cnt == il->cmd_queue)
4773 if (cnt == il->cmd_queue) 4773 continue;
4774 continue; 4774 if (il_check_stuck_queue(il, cnt))
4775 if (il_check_stuck_queue(il, cnt)) 4775 return;
4776 return;
4777 }
4778 } 4776 }
4779 4777
4780 mod_timer(&il->watchdog, 4778 mod_timer(&il->watchdog,
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
index 3ee23134c02b..013680332f07 100644
--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c
+++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
@@ -796,6 +796,18 @@ int iwlagn_mac_sta_state(struct ieee80211_hw *hw,
796 switch (op) { 796 switch (op) {
797 case ADD: 797 case ADD:
798 ret = iwlagn_mac_sta_add(hw, vif, sta); 798 ret = iwlagn_mac_sta_add(hw, vif, sta);
799 if (ret)
800 break;
801 /*
802 * Clear the in-progress flag, the AP station entry was added
803 * but we'll initialize LQ only when we've associated (which
804 * would also clear the in-progress flag). This is necessary
805 * in case we never initialize LQ because association fails.
806 */
807 spin_lock_bh(&priv->sta_lock);
808 priv->stations[iwl_sta_id(sta)].used &=
809 ~IWL_STA_UCODE_INPROGRESS;
810 spin_unlock_bh(&priv->sta_lock);
799 break; 811 break;
800 case REMOVE: 812 case REMOVE:
801 ret = iwlagn_mac_sta_remove(hw, vif, sta); 813 ret = iwlagn_mac_sta_remove(hw, vif, sta);
diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.c b/drivers/net/wireless/mwifiex/11n_rxreorder.c
index 9c44088054dd..900ee129e825 100644
--- a/drivers/net/wireless/mwifiex/11n_rxreorder.c
+++ b/drivers/net/wireless/mwifiex/11n_rxreorder.c
@@ -256,7 +256,8 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
256 else 256 else
257 last_seq = priv->rx_seq[tid]; 257 last_seq = priv->rx_seq[tid];
258 258
259 if (last_seq >= new_node->start_win) 259 if (last_seq != MWIFIEX_DEF_11N_RX_SEQ_NUM &&
260 last_seq >= new_node->start_win)
260 new_node->start_win = last_seq + 1; 261 new_node->start_win = last_seq + 1;
261 262
262 new_node->win_size = win_size; 263 new_node->win_size = win_size;
@@ -596,5 +597,5 @@ void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv)
596 spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags); 597 spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags);
597 598
598 INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr); 599 INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr);
599 memset(priv->rx_seq, 0, sizeof(priv->rx_seq)); 600 mwifiex_reset_11n_rx_seq_num(priv);
600} 601}
diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.h b/drivers/net/wireless/mwifiex/11n_rxreorder.h
index f1bffebabc60..6c9815a0f5d8 100644
--- a/drivers/net/wireless/mwifiex/11n_rxreorder.h
+++ b/drivers/net/wireless/mwifiex/11n_rxreorder.h
@@ -37,6 +37,13 @@
37 37
38#define ADDBA_RSP_STATUS_ACCEPT 0 38#define ADDBA_RSP_STATUS_ACCEPT 0
39 39
40#define MWIFIEX_DEF_11N_RX_SEQ_NUM 0xffff
41
42static inline void mwifiex_reset_11n_rx_seq_num(struct mwifiex_private *priv)
43{
44 memset(priv->rx_seq, 0xff, sizeof(priv->rx_seq));
45}
46
40int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *, 47int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *,
41 u16 seqNum, 48 u16 seqNum,
42 u16 tid, u8 *ta, 49 u16 tid, u8 *ta,
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index ce61b6fae1c9..5c7fd185373c 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -958,6 +958,7 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
958 case NL80211_HIDDEN_SSID_ZERO_CONTENTS: 958 case NL80211_HIDDEN_SSID_ZERO_CONTENTS:
959 /* firmware doesn't support this type of hidden SSID */ 959 /* firmware doesn't support this type of hidden SSID */
960 default: 960 default:
961 kfree(bss_cfg);
961 return -EINVAL; 962 return -EINVAL;
962 } 963 }
963 964
diff --git a/drivers/net/wireless/mwifiex/ie.c b/drivers/net/wireless/mwifiex/ie.c
index ceb82cd749cc..383820a52beb 100644
--- a/drivers/net/wireless/mwifiex/ie.c
+++ b/drivers/net/wireless/mwifiex/ie.c
@@ -213,6 +213,7 @@ mwifiex_update_uap_custom_ie(struct mwifiex_private *priv,
213 /* save assoc resp ie index after auto-indexing */ 213 /* save assoc resp ie index after auto-indexing */
214 *assoc_idx = *((u16 *)pos); 214 *assoc_idx = *((u16 *)pos);
215 215
216 kfree(ap_custom_ie);
216 return ret; 217 return ret;
217} 218}
218 219
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index e0377473282f..fc8a9bfa1248 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -978,10 +978,10 @@ static int mwifiex_decode_rx_packet(struct mwifiex_adapter *adapter,
978 dev_dbg(adapter->dev, "info: --- Rx: Event ---\n"); 978 dev_dbg(adapter->dev, "info: --- Rx: Event ---\n");
979 adapter->event_cause = *(u32 *) skb->data; 979 adapter->event_cause = *(u32 *) skb->data;
980 980
981 skb_pull(skb, MWIFIEX_EVENT_HEADER_LEN);
982
983 if ((skb->len > 0) && (skb->len < MAX_EVENT_SIZE)) 981 if ((skb->len > 0) && (skb->len < MAX_EVENT_SIZE))
984 memcpy(adapter->event_body, skb->data, skb->len); 982 memcpy(adapter->event_body,
983 skb->data + MWIFIEX_EVENT_HEADER_LEN,
984 skb->len);
985 985
986 /* event cause has been saved to adapter->event_cause */ 986 /* event cause has been saved to adapter->event_cause */
987 adapter->event_received = true; 987 adapter->event_received = true;
diff --git a/drivers/net/wireless/mwifiex/sta_event.c b/drivers/net/wireless/mwifiex/sta_event.c
index 4ace5a3dcd23..11e731f3581c 100644
--- a/drivers/net/wireless/mwifiex/sta_event.c
+++ b/drivers/net/wireless/mwifiex/sta_event.c
@@ -406,9 +406,9 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
406 break; 406 break;
407 407
408 case EVENT_UAP_STA_ASSOC: 408 case EVENT_UAP_STA_ASSOC:
409 skb_pull(adapter->event_skb, MWIFIEX_UAP_EVENT_EXTRA_HEADER);
410 memset(&sinfo, 0, sizeof(sinfo)); 409 memset(&sinfo, 0, sizeof(sinfo));
411 event = (struct mwifiex_assoc_event *)adapter->event_skb->data; 410 event = (struct mwifiex_assoc_event *)
411 (adapter->event_body + MWIFIEX_UAP_EVENT_EXTRA_HEADER);
412 if (le16_to_cpu(event->type) == TLV_TYPE_UAP_MGMT_FRAME) { 412 if (le16_to_cpu(event->type) == TLV_TYPE_UAP_MGMT_FRAME) {
413 len = -1; 413 len = -1;
414 414
@@ -433,9 +433,8 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
433 GFP_KERNEL); 433 GFP_KERNEL);
434 break; 434 break;
435 case EVENT_UAP_STA_DEAUTH: 435 case EVENT_UAP_STA_DEAUTH:
436 skb_pull(adapter->event_skb, MWIFIEX_UAP_EVENT_EXTRA_HEADER); 436 cfg80211_del_sta(priv->netdev, adapter->event_body +
437 cfg80211_del_sta(priv->netdev, adapter->event_skb->data, 437 MWIFIEX_UAP_EVENT_EXTRA_HEADER, GFP_KERNEL);
438 GFP_KERNEL);
439 break; 438 break;
440 case EVENT_UAP_BSS_IDLE: 439 case EVENT_UAP_BSS_IDLE:
441 priv->media_connected = false; 440 priv->media_connected = false;
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c
index 49ebf20c56eb..22a5916564b8 100644
--- a/drivers/net/wireless/mwifiex/usb.c
+++ b/drivers/net/wireless/mwifiex/usb.c
@@ -49,6 +49,7 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter,
49 struct device *dev = adapter->dev; 49 struct device *dev = adapter->dev;
50 u32 recv_type; 50 u32 recv_type;
51 __le32 tmp; 51 __le32 tmp;
52 int ret;
52 53
53 if (adapter->hs_activated) 54 if (adapter->hs_activated)
54 mwifiex_process_hs_config(adapter); 55 mwifiex_process_hs_config(adapter);
@@ -69,16 +70,19 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter,
69 case MWIFIEX_USB_TYPE_CMD: 70 case MWIFIEX_USB_TYPE_CMD:
70 if (skb->len > MWIFIEX_SIZE_OF_CMD_BUFFER) { 71 if (skb->len > MWIFIEX_SIZE_OF_CMD_BUFFER) {
71 dev_err(dev, "CMD: skb->len too large\n"); 72 dev_err(dev, "CMD: skb->len too large\n");
72 return -1; 73 ret = -1;
74 goto exit_restore_skb;
73 } else if (!adapter->curr_cmd) { 75 } else if (!adapter->curr_cmd) {
74 dev_dbg(dev, "CMD: no curr_cmd\n"); 76 dev_dbg(dev, "CMD: no curr_cmd\n");
75 if (adapter->ps_state == PS_STATE_SLEEP_CFM) { 77 if (adapter->ps_state == PS_STATE_SLEEP_CFM) {
76 mwifiex_process_sleep_confirm_resp( 78 mwifiex_process_sleep_confirm_resp(
77 adapter, skb->data, 79 adapter, skb->data,
78 skb->len); 80 skb->len);
79 return 0; 81 ret = 0;
82 goto exit_restore_skb;
80 } 83 }
81 return -1; 84 ret = -1;
85 goto exit_restore_skb;
82 } 86 }
83 87
84 adapter->curr_cmd->resp_skb = skb; 88 adapter->curr_cmd->resp_skb = skb;
@@ -87,20 +91,22 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter,
87 case MWIFIEX_USB_TYPE_EVENT: 91 case MWIFIEX_USB_TYPE_EVENT:
88 if (skb->len < sizeof(u32)) { 92 if (skb->len < sizeof(u32)) {
89 dev_err(dev, "EVENT: skb->len too small\n"); 93 dev_err(dev, "EVENT: skb->len too small\n");
90 return -1; 94 ret = -1;
95 goto exit_restore_skb;
91 } 96 }
92 skb_copy_from_linear_data(skb, &tmp, sizeof(u32)); 97 skb_copy_from_linear_data(skb, &tmp, sizeof(u32));
93 adapter->event_cause = le32_to_cpu(tmp); 98 adapter->event_cause = le32_to_cpu(tmp);
94 skb_pull(skb, sizeof(u32));
95 dev_dbg(dev, "event_cause %#x\n", adapter->event_cause); 99 dev_dbg(dev, "event_cause %#x\n", adapter->event_cause);
96 100
97 if (skb->len > MAX_EVENT_SIZE) { 101 if (skb->len > MAX_EVENT_SIZE) {
98 dev_err(dev, "EVENT: event body too large\n"); 102 dev_err(dev, "EVENT: event body too large\n");
99 return -1; 103 ret = -1;
104 goto exit_restore_skb;
100 } 105 }
101 106
102 skb_copy_from_linear_data(skb, adapter->event_body, 107 memcpy(adapter->event_body, skb->data +
103 skb->len); 108 MWIFIEX_EVENT_HEADER_LEN, skb->len);
109
104 adapter->event_received = true; 110 adapter->event_received = true;
105 adapter->event_skb = skb; 111 adapter->event_skb = skb;
106 break; 112 break;
@@ -124,6 +130,12 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter,
124 } 130 }
125 131
126 return -EINPROGRESS; 132 return -EINPROGRESS;
133
134exit_restore_skb:
135 /* The buffer will be reused for further cmds/events */
136 skb_push(skb, INTF_HEADER_LEN);
137
138 return ret;
127} 139}
128 140
129static void mwifiex_usb_rx_complete(struct urb *urb) 141static void mwifiex_usb_rx_complete(struct urb *urb)
diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c
index f3fc65515857..3fa4d4176993 100644
--- a/drivers/net/wireless/mwifiex/wmm.c
+++ b/drivers/net/wireless/mwifiex/wmm.c
@@ -404,6 +404,8 @@ mwifiex_wmm_init(struct mwifiex_adapter *adapter)
404 priv->add_ba_param.tx_win_size = MWIFIEX_AMPDU_DEF_TXWINSIZE; 404 priv->add_ba_param.tx_win_size = MWIFIEX_AMPDU_DEF_TXWINSIZE;
405 priv->add_ba_param.rx_win_size = MWIFIEX_AMPDU_DEF_RXWINSIZE; 405 priv->add_ba_param.rx_win_size = MWIFIEX_AMPDU_DEF_RXWINSIZE;
406 406
407 mwifiex_reset_11n_rx_seq_num(priv);
408
407 atomic_set(&priv->wmm.tx_pkts_queued, 0); 409 atomic_set(&priv->wmm.tx_pkts_queued, 0);
408 atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID); 410 atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID);
409 } 411 }
@@ -1221,6 +1223,7 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)
1221 1223
1222 if (!ptr->is_11n_enabled || 1224 if (!ptr->is_11n_enabled ||
1223 mwifiex_is_ba_stream_setup(priv, ptr, tid) || 1225 mwifiex_is_ba_stream_setup(priv, ptr, tid) ||
1226 priv->wps.session_enable ||
1224 ((priv->sec_info.wpa_enabled || 1227 ((priv->sec_info.wpa_enabled ||
1225 priv->sec_info.wpa2_enabled) && 1228 priv->sec_info.wpa2_enabled) &&
1226 !priv->wpa_is_gtk_set)) { 1229 !priv->wpa_is_gtk_set)) {
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index d357d1ed92f6..74ecc33fdd90 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -436,8 +436,8 @@ void rt2x00usb_kick_queue(struct data_queue *queue)
436 case QID_RX: 436 case QID_RX:
437 if (!rt2x00queue_full(queue)) 437 if (!rt2x00queue_full(queue))
438 rt2x00queue_for_each_entry(queue, 438 rt2x00queue_for_each_entry(queue,
439 Q_INDEX_DONE,
440 Q_INDEX, 439 Q_INDEX,
440 Q_INDEX_DONE,
441 NULL, 441 NULL,
442 rt2x00usb_kick_rx_entry); 442 rt2x00usb_kick_rx_entry);
443 break; 443 break;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
index d228358e6a40..9970c2b1b199 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
@@ -301,9 +301,11 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
301 {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ 301 {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
302 {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ 302 {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
303 {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/ 303 {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/
304 {RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
304 {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ 305 {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
305 {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ 306 {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
306 {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ 307 {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
308 {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
307 /* HP - Lite-On ,8188CUS Slim Combo */ 309 /* HP - Lite-On ,8188CUS Slim Combo */
308 {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)}, 310 {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)},
309 {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */ 311 {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */
@@ -346,6 +348,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
346 {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/ 348 {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/
347 {RTL_USB_DEVICE(0x0846, 0x9021, rtl92cu_hal_cfg)}, /*Netgear-Sercomm*/ 349 {RTL_USB_DEVICE(0x0846, 0x9021, rtl92cu_hal_cfg)}, /*Netgear-Sercomm*/
348 {RTL_USB_DEVICE(0x0b05, 0x17ab, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/ 350 {RTL_USB_DEVICE(0x0b05, 0x17ab, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/
351 {RTL_USB_DEVICE(0x0bda, 0x8186, rtl92cu_hal_cfg)}, /*Realtek 92CE-VAU*/
349 {RTL_USB_DEVICE(0x0df6, 0x0061, rtl92cu_hal_cfg)}, /*Sitecom-Edimax*/ 352 {RTL_USB_DEVICE(0x0df6, 0x0061, rtl92cu_hal_cfg)}, /*Sitecom-Edimax*/
350 {RTL_USB_DEVICE(0x0e66, 0x0019, rtl92cu_hal_cfg)}, /*Hawking-Edimax*/ 353 {RTL_USB_DEVICE(0x0e66, 0x0019, rtl92cu_hal_cfg)}, /*Hawking-Edimax*/
351 {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ 354 {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/
diff --git a/drivers/net/wireless/ti/wlcore/Kconfig b/drivers/net/wireless/ti/wlcore/Kconfig
index 54156b0b5c2d..d7b907e67170 100644
--- a/drivers/net/wireless/ti/wlcore/Kconfig
+++ b/drivers/net/wireless/ti/wlcore/Kconfig
@@ -1,7 +1,6 @@
1config WLCORE 1config WLCORE
2 tristate "TI wlcore support" 2 tristate "TI wlcore support"
3 depends on WL_TI && GENERIC_HARDIRQS && MAC80211 3 depends on WL_TI && GENERIC_HARDIRQS && MAC80211
4 depends on INET
5 select FW_LOADER 4 select FW_LOADER
6 ---help--- 5 ---help---
7 This module contains the main code for TI WLAN chips. It abstracts 6 This module contains the main code for TI WLAN chips. It abstracts
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 343ad29e211c..e44f8c2d239d 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -317,10 +317,9 @@ static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *l
317 for(; lookup->compatible != NULL; lookup++) { 317 for(; lookup->compatible != NULL; lookup++) {
318 if (!of_device_is_compatible(np, lookup->compatible)) 318 if (!of_device_is_compatible(np, lookup->compatible))
319 continue; 319 continue;
320 if (of_address_to_resource(np, 0, &res)) 320 if (!of_address_to_resource(np, 0, &res))
321 continue; 321 if (res.start != lookup->phys_addr)
322 if (res.start != lookup->phys_addr) 322 continue;
323 continue;
324 pr_debug("%s: devname=%s\n", np->full_name, lookup->name); 323 pr_debug("%s: devname=%s\n", np->full_name, lookup->name);
325 return lookup; 324 return lookup;
326 } 325 }
@@ -462,4 +461,5 @@ int of_platform_populate(struct device_node *root,
462 of_node_put(root); 461 of_node_put(root);
463 return rc; 462 return rc;
464} 463}
464EXPORT_SYMBOL_GPL(of_platform_populate);
465#endif /* CONFIG_OF_ADDRESS */ 465#endif /* CONFIG_OF_ADDRESS */
diff --git a/drivers/oprofile/oprofile_perf.c b/drivers/oprofile/oprofile_perf.c
index efc4b7f308cf..f3cfa0b9adfa 100644
--- a/drivers/oprofile/oprofile_perf.c
+++ b/drivers/oprofile/oprofile_perf.c
@@ -1,5 +1,6 @@
1/* 1/*
2 * Copyright 2010 ARM Ltd. 2 * Copyright 2010 ARM Ltd.
3 * Copyright 2012 Advanced Micro Devices, Inc., Robert Richter
3 * 4 *
4 * Perf-events backend for OProfile. 5 * Perf-events backend for OProfile.
5 */ 6 */
@@ -25,7 +26,7 @@ static int oprofile_perf_enabled;
25static DEFINE_MUTEX(oprofile_perf_mutex); 26static DEFINE_MUTEX(oprofile_perf_mutex);
26 27
27static struct op_counter_config *counter_config; 28static struct op_counter_config *counter_config;
28static struct perf_event **perf_events[NR_CPUS]; 29static DEFINE_PER_CPU(struct perf_event **, perf_events);
29static int num_counters; 30static int num_counters;
30 31
31/* 32/*
@@ -38,7 +39,7 @@ static void op_overflow_handler(struct perf_event *event,
38 u32 cpu = smp_processor_id(); 39 u32 cpu = smp_processor_id();
39 40
40 for (id = 0; id < num_counters; ++id) 41 for (id = 0; id < num_counters; ++id)
41 if (perf_events[cpu][id] == event) 42 if (per_cpu(perf_events, cpu)[id] == event)
42 break; 43 break;
43 44
44 if (id != num_counters) 45 if (id != num_counters)
@@ -74,7 +75,7 @@ static int op_create_counter(int cpu, int event)
74{ 75{
75 struct perf_event *pevent; 76 struct perf_event *pevent;
76 77
77 if (!counter_config[event].enabled || perf_events[cpu][event]) 78 if (!counter_config[event].enabled || per_cpu(perf_events, cpu)[event])
78 return 0; 79 return 0;
79 80
80 pevent = perf_event_create_kernel_counter(&counter_config[event].attr, 81 pevent = perf_event_create_kernel_counter(&counter_config[event].attr,
@@ -91,18 +92,18 @@ static int op_create_counter(int cpu, int event)
91 return -EBUSY; 92 return -EBUSY;
92 } 93 }
93 94
94 perf_events[cpu][event] = pevent; 95 per_cpu(perf_events, cpu)[event] = pevent;
95 96
96 return 0; 97 return 0;
97} 98}
98 99
99static void op_destroy_counter(int cpu, int event) 100static void op_destroy_counter(int cpu, int event)
100{ 101{
101 struct perf_event *pevent = perf_events[cpu][event]; 102 struct perf_event *pevent = per_cpu(perf_events, cpu)[event];
102 103
103 if (pevent) { 104 if (pevent) {
104 perf_event_release_kernel(pevent); 105 perf_event_release_kernel(pevent);
105 perf_events[cpu][event] = NULL; 106 per_cpu(perf_events, cpu)[event] = NULL;
106 } 107 }
107} 108}
108 109
@@ -257,12 +258,12 @@ void oprofile_perf_exit(void)
257 258
258 for_each_possible_cpu(cpu) { 259 for_each_possible_cpu(cpu) {
259 for (id = 0; id < num_counters; ++id) { 260 for (id = 0; id < num_counters; ++id) {
260 event = perf_events[cpu][id]; 261 event = per_cpu(perf_events, cpu)[id];
261 if (event) 262 if (event)
262 perf_event_release_kernel(event); 263 perf_event_release_kernel(event);
263 } 264 }
264 265
265 kfree(perf_events[cpu]); 266 kfree(per_cpu(perf_events, cpu));
266 } 267 }
267 268
268 kfree(counter_config); 269 kfree(counter_config);
@@ -277,8 +278,6 @@ int __init oprofile_perf_init(struct oprofile_operations *ops)
277 if (ret) 278 if (ret)
278 return ret; 279 return ret;
279 280
280 memset(&perf_events, 0, sizeof(perf_events));
281
282 num_counters = perf_num_counters(); 281 num_counters = perf_num_counters();
283 if (num_counters <= 0) { 282 if (num_counters <= 0) {
284 pr_info("oprofile: no performance counters\n"); 283 pr_info("oprofile: no performance counters\n");
@@ -298,9 +297,9 @@ int __init oprofile_perf_init(struct oprofile_operations *ops)
298 } 297 }
299 298
300 for_each_possible_cpu(cpu) { 299 for_each_possible_cpu(cpu) {
301 perf_events[cpu] = kcalloc(num_counters, 300 per_cpu(perf_events, cpu) = kcalloc(num_counters,
302 sizeof(struct perf_event *), GFP_KERNEL); 301 sizeof(struct perf_event *), GFP_KERNEL);
303 if (!perf_events[cpu]) { 302 if (!per_cpu(perf_events, cpu)) {
304 pr_info("oprofile: failed to allocate %d perf events " 303 pr_info("oprofile: failed to allocate %d perf events "
305 "for cpu %d\n", num_counters, cpu); 304 "for cpu %d\n", num_counters, cpu);
306 ret = -ENOMEM; 305 ret = -ENOMEM;
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index bf0cee629b60..099f46cd8e87 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -748,6 +748,18 @@ static int pci_pm_suspend_noirq(struct device *dev)
748 748
749 pci_pm_set_unknown_state(pci_dev); 749 pci_pm_set_unknown_state(pci_dev);
750 750
751 /*
752 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
753 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
754 * hasn't been quiesced and tries to turn it off. If the controller
755 * is already in D3, this can hang or cause memory corruption.
756 *
757 * Since the value of the COMMAND register doesn't matter once the
758 * device has been suspended, we can safely set it to 0 here.
759 */
760 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
761 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
762
751 return 0; 763 return 0;
752} 764}
753 765
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 77cb54a65cde..447e83472c01 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1744,11 +1744,6 @@ int pci_prepare_to_sleep(struct pci_dev *dev)
1744 if (target_state == PCI_POWER_ERROR) 1744 if (target_state == PCI_POWER_ERROR)
1745 return -EIO; 1745 return -EIO;
1746 1746
1747 /* Some devices mustn't be in D3 during system sleep */
1748 if (target_state == PCI_D3hot &&
1749 (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP))
1750 return 0;
1751
1752 pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev)); 1747 pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
1753 1748
1754 error = pci_set_power_state(dev, target_state); 1749 error = pci_set_power_state(dev, target_state);
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 194b243a2817..2a7521677541 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2929,32 +2929,6 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev)
2929DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); 2929DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
2930DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); 2930DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
2931 2931
2932/*
2933 * The Intel 6 Series/C200 Series chipset's EHCI controllers on many
2934 * ASUS motherboards will cause memory corruption or a system crash
2935 * if they are in D3 while the system is put into S3 sleep.
2936 */
2937static void __devinit asus_ehci_no_d3(struct pci_dev *dev)
2938{
2939 const char *sys_info;
2940 static const char good_Asus_board[] = "P8Z68-V";
2941
2942 if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)
2943 return;
2944 if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK)
2945 return;
2946 sys_info = dmi_get_system_info(DMI_BOARD_NAME);
2947 if (sys_info && memcmp(sys_info, good_Asus_board,
2948 sizeof(good_Asus_board) - 1) == 0)
2949 return;
2950
2951 dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n");
2952 dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP;
2953 device_set_wakeup_capable(&dev->dev, false);
2954}
2955DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3);
2956DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3);
2957
2958static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, 2932static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
2959 struct pci_fixup *end) 2933 struct pci_fixup *end)
2960{ 2934{
diff --git a/drivers/pinctrl/pinctrl-imx.c b/drivers/pinctrl/pinctrl-imx.c
index dd6d93aa5334..90c837f469a6 100644
--- a/drivers/pinctrl/pinctrl-imx.c
+++ b/drivers/pinctrl/pinctrl-imx.c
@@ -474,7 +474,9 @@ static int __devinit imx_pinctrl_parse_groups(struct device_node *np,
474 grp->configs[j] = config & ~IMX_PAD_SION; 474 grp->configs[j] = config & ~IMX_PAD_SION;
475 } 475 }
476 476
477#ifdef DEBUG
477 IMX_PMX_DUMP(info, grp->pins, grp->mux_mode, grp->configs, grp->npins); 478 IMX_PMX_DUMP(info, grp->pins, grp->mux_mode, grp->configs, grp->npins);
479#endif
478 480
479 return 0; 481 return 0;
480} 482}
diff --git a/drivers/pinctrl/pinctrl-imx6q.c b/drivers/pinctrl/pinctrl-imx6q.c
index 7737d4d71a3c..e9bf71fbedca 100644
--- a/drivers/pinctrl/pinctrl-imx6q.c
+++ b/drivers/pinctrl/pinctrl-imx6q.c
@@ -1950,6 +1950,8 @@ static struct imx_pin_reg imx6q_pin_regs[] = {
1950 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 5, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__GPIO_1_12 */ 1950 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 5, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__GPIO_1_12 */
1951 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 6, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__SJC_DONE */ 1951 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 6, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__SJC_DONE */
1952 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 7, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 */ 1952 IMX_PIN_REG(MX6Q_PAD_SD2_DAT3, 0x0744, 0x035C, 7, 0x0000, 0), /* MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 */
1953 IMX_PIN_REG(MX6Q_PAD_ENET_RX_ER, 0x04EC, 0x01D8, 0, 0x0000, 0), /* MX6Q_PAD_ENET_RX_ER__ANATOP_USBOTG_ID */
1954 IMX_PIN_REG(MX6Q_PAD_GPIO_1, 0x05F4, 0x0224, 3, 0x0000, 0), /* MX6Q_PAD_GPIO_1__ANATOP_USBOTG_ID */
1953}; 1955};
1954 1956
1955/* Pad names for the pinmux subsystem */ 1957/* Pad names for the pinmux subsystem */
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index ce875dc365e5..c8f40c9c0428 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -1877,8 +1877,7 @@ static int acer_platform_remove(struct platform_device *device)
1877 return 0; 1877 return 0;
1878} 1878}
1879 1879
1880static int acer_platform_suspend(struct platform_device *dev, 1880static int acer_suspend(struct device *dev)
1881pm_message_t state)
1882{ 1881{
1883 u32 value; 1882 u32 value;
1884 struct acer_data *data = &interface->data; 1883 struct acer_data *data = &interface->data;
@@ -1900,7 +1899,7 @@ pm_message_t state)
1900 return 0; 1899 return 0;
1901} 1900}
1902 1901
1903static int acer_platform_resume(struct platform_device *device) 1902static int acer_resume(struct device *dev)
1904{ 1903{
1905 struct acer_data *data = &interface->data; 1904 struct acer_data *data = &interface->data;
1906 1905
@@ -1916,6 +1915,8 @@ static int acer_platform_resume(struct platform_device *device)
1916 return 0; 1915 return 0;
1917} 1916}
1918 1917
1918static SIMPLE_DEV_PM_OPS(acer_pm, acer_suspend, acer_resume);
1919
1919static void acer_platform_shutdown(struct platform_device *device) 1920static void acer_platform_shutdown(struct platform_device *device)
1920{ 1921{
1921 struct acer_data *data = &interface->data; 1922 struct acer_data *data = &interface->data;
@@ -1931,11 +1932,10 @@ static struct platform_driver acer_platform_driver = {
1931 .driver = { 1932 .driver = {
1932 .name = "acer-wmi", 1933 .name = "acer-wmi",
1933 .owner = THIS_MODULE, 1934 .owner = THIS_MODULE,
1935 .pm = &acer_pm,
1934 }, 1936 },
1935 .probe = acer_platform_probe, 1937 .probe = acer_platform_probe,
1936 .remove = acer_platform_remove, 1938 .remove = acer_platform_remove,
1937 .suspend = acer_platform_suspend,
1938 .resume = acer_platform_resume,
1939 .shutdown = acer_platform_shutdown, 1939 .shutdown = acer_platform_shutdown,
1940}; 1940};
1941 1941
diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c
index 94f93b621d7b..e2230a2b2f8e 100644
--- a/drivers/platform/x86/classmate-laptop.c
+++ b/drivers/platform/x86/classmate-laptop.c
@@ -362,15 +362,18 @@ static int cmpc_tablet_remove(struct acpi_device *acpi, int type)
362 return cmpc_remove_acpi_notify_device(acpi); 362 return cmpc_remove_acpi_notify_device(acpi);
363} 363}
364 364
365static int cmpc_tablet_resume(struct acpi_device *acpi) 365static int cmpc_tablet_resume(struct device *dev)
366{ 366{
367 struct input_dev *inputdev = dev_get_drvdata(&acpi->dev); 367 struct input_dev *inputdev = dev_get_drvdata(dev);
368
368 unsigned long long val = 0; 369 unsigned long long val = 0;
369 if (ACPI_SUCCESS(cmpc_get_tablet(acpi->handle, &val))) 370 if (ACPI_SUCCESS(cmpc_get_tablet(to_acpi_device(dev)->handle, &val)))
370 input_report_switch(inputdev, SW_TABLET_MODE, !val); 371 input_report_switch(inputdev, SW_TABLET_MODE, !val);
371 return 0; 372 return 0;
372} 373}
373 374
375static SIMPLE_DEV_PM_OPS(cmpc_tablet_pm, NULL, cmpc_tablet_resume);
376
374static const struct acpi_device_id cmpc_tablet_device_ids[] = { 377static const struct acpi_device_id cmpc_tablet_device_ids[] = {
375 {CMPC_TABLET_HID, 0}, 378 {CMPC_TABLET_HID, 0},
376 {"", 0} 379 {"", 0}
@@ -384,9 +387,9 @@ static struct acpi_driver cmpc_tablet_acpi_driver = {
384 .ops = { 387 .ops = {
385 .add = cmpc_tablet_add, 388 .add = cmpc_tablet_add,
386 .remove = cmpc_tablet_remove, 389 .remove = cmpc_tablet_remove,
387 .resume = cmpc_tablet_resume,
388 .notify = cmpc_tablet_handler, 390 .notify = cmpc_tablet_handler,
389 } 391 },
392 .drv.pm = &cmpc_tablet_pm,
390}; 393};
391 394
392 395
diff --git a/drivers/platform/x86/fujitsu-tablet.c b/drivers/platform/x86/fujitsu-tablet.c
index da267eae8ba8..d2e41735a47b 100644
--- a/drivers/platform/x86/fujitsu-tablet.c
+++ b/drivers/platform/x86/fujitsu-tablet.c
@@ -440,12 +440,14 @@ static int __devexit acpi_fujitsu_remove(struct acpi_device *adev, int type)
440 return 0; 440 return 0;
441} 441}
442 442
443static int acpi_fujitsu_resume(struct acpi_device *adev) 443static int acpi_fujitsu_resume(struct device *dev)
444{ 444{
445 fujitsu_reset(); 445 fujitsu_reset();
446 return 0; 446 return 0;
447} 447}
448 448
449static SIMPLE_DEV_PM_OPS(acpi_fujitsu_pm, NULL, acpi_fujitsu_resume);
450
449static struct acpi_driver acpi_fujitsu_driver = { 451static struct acpi_driver acpi_fujitsu_driver = {
450 .name = MODULENAME, 452 .name = MODULENAME,
451 .class = "hotkey", 453 .class = "hotkey",
@@ -453,8 +455,8 @@ static struct acpi_driver acpi_fujitsu_driver = {
453 .ops = { 455 .ops = {
454 .add = acpi_fujitsu_add, 456 .add = acpi_fujitsu_add,
455 .remove = acpi_fujitsu_remove, 457 .remove = acpi_fujitsu_remove,
456 .resume = acpi_fujitsu_resume, 458 },
457 } 459 .drv.pm = &acpi_fujitsu_pm,
458}; 460};
459 461
460static int __init fujitsu_module_init(void) 462static int __init fujitsu_module_init(void)
diff --git a/drivers/platform/x86/hdaps.c b/drivers/platform/x86/hdaps.c
index 24a3ae065f1b..d9ab6f64dcec 100644
--- a/drivers/platform/x86/hdaps.c
+++ b/drivers/platform/x86/hdaps.c
@@ -305,17 +305,19 @@ static int hdaps_probe(struct platform_device *dev)
305 return 0; 305 return 0;
306} 306}
307 307
308static int hdaps_resume(struct platform_device *dev) 308static int hdaps_resume(struct device *dev)
309{ 309{
310 return hdaps_device_init(); 310 return hdaps_device_init();
311} 311}
312 312
313static SIMPLE_DEV_PM_OPS(hdaps_pm, NULL, hdaps_resume);
314
313static struct platform_driver hdaps_driver = { 315static struct platform_driver hdaps_driver = {
314 .probe = hdaps_probe, 316 .probe = hdaps_probe,
315 .resume = hdaps_resume,
316 .driver = { 317 .driver = {
317 .name = "hdaps", 318 .name = "hdaps",
318 .owner = THIS_MODULE, 319 .owner = THIS_MODULE,
320 .pm = &hdaps_pm,
319 }, 321 },
320}; 322};
321 323
diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c
index 22b2dfa73148..f4d91154ad67 100644
--- a/drivers/platform/x86/hp_accel.c
+++ b/drivers/platform/x86/hp_accel.c
@@ -353,20 +353,22 @@ static int lis3lv02d_remove(struct acpi_device *device, int type)
353 353
354 354
355#ifdef CONFIG_PM 355#ifdef CONFIG_PM
356static int lis3lv02d_suspend(struct acpi_device *device, pm_message_t state) 356static int lis3lv02d_suspend(struct device *dev)
357{ 357{
358 /* make sure the device is off when we suspend */ 358 /* make sure the device is off when we suspend */
359 lis3lv02d_poweroff(&lis3_dev); 359 lis3lv02d_poweroff(&lis3_dev);
360 return 0; 360 return 0;
361} 361}
362 362
363static int lis3lv02d_resume(struct acpi_device *device) 363static int lis3lv02d_resume(struct device *dev)
364{ 364{
365 return lis3lv02d_poweron(&lis3_dev); 365 return lis3lv02d_poweron(&lis3_dev);
366} 366}
367
368static SIMPLE_DEV_PM_OPS(hp_accel_pm, lis3lv02d_suspend, lis3lv02d_resume);
369#define HP_ACCEL_PM (&hp_accel_pm)
367#else 370#else
368#define lis3lv02d_suspend NULL 371#define HP_ACCEL_PM NULL
369#define lis3lv02d_resume NULL
370#endif 372#endif
371 373
372/* For the HP MDPS aka 3D Driveguard */ 374/* For the HP MDPS aka 3D Driveguard */
@@ -377,9 +379,8 @@ static struct acpi_driver lis3lv02d_driver = {
377 .ops = { 379 .ops = {
378 .add = lis3lv02d_add, 380 .add = lis3lv02d_add,
379 .remove = lis3lv02d_remove, 381 .remove = lis3lv02d_remove,
380 .suspend = lis3lv02d_suspend, 382 },
381 .resume = lis3lv02d_resume, 383 .drv.pm = HP_ACCEL_PM,
382 }
383}; 384};
384 385
385static int __init lis3lv02d_init_module(void) 386static int __init lis3lv02d_init_module(void)
diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
index 4f20f8dd3d7c..17f6dfd8dbfb 100644
--- a/drivers/platform/x86/ideapad-laptop.c
+++ b/drivers/platform/x86/ideapad-laptop.c
@@ -694,10 +694,10 @@ MODULE_DEVICE_TABLE(acpi, ideapad_device_ids);
694static int __devinit ideapad_acpi_add(struct acpi_device *adevice) 694static int __devinit ideapad_acpi_add(struct acpi_device *adevice)
695{ 695{
696 int ret, i; 696 int ret, i;
697 unsigned long cfg; 697 int cfg;
698 struct ideapad_private *priv; 698 struct ideapad_private *priv;
699 699
700 if (read_method_int(adevice->handle, "_CFG", (int *)&cfg)) 700 if (read_method_int(adevice->handle, "_CFG", &cfg))
701 return -ENODEV; 701 return -ENODEV;
702 702
703 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 703 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
@@ -721,7 +721,7 @@ static int __devinit ideapad_acpi_add(struct acpi_device *adevice)
721 goto input_failed; 721 goto input_failed;
722 722
723 for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++) { 723 for (i = 0; i < IDEAPAD_RFKILL_DEV_NUM; i++) {
724 if (test_bit(ideapad_rfk_data[i].cfgbit, &cfg)) 724 if (test_bit(ideapad_rfk_data[i].cfgbit, &priv->cfg))
725 ideapad_register_rfkill(adevice, i); 725 ideapad_register_rfkill(adevice, i);
726 else 726 else
727 priv->rfk[i] = NULL; 727 priv->rfk[i] = NULL;
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index 0ffdb3cde2bb..5051aa970e0a 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -72,6 +72,7 @@
72#include <linux/string.h> 72#include <linux/string.h>
73#include <linux/tick.h> 73#include <linux/tick.h>
74#include <linux/timer.h> 74#include <linux/timer.h>
75#include <linux/dmi.h>
75#include <drm/i915_drm.h> 76#include <drm/i915_drm.h>
76#include <asm/msr.h> 77#include <asm/msr.h>
77#include <asm/processor.h> 78#include <asm/processor.h>
@@ -1485,6 +1486,24 @@ static DEFINE_PCI_DEVICE_TABLE(ips_id_table) = {
1485 1486
1486MODULE_DEVICE_TABLE(pci, ips_id_table); 1487MODULE_DEVICE_TABLE(pci, ips_id_table);
1487 1488
1489static int ips_blacklist_callback(const struct dmi_system_id *id)
1490{
1491 pr_info("Blacklisted intel_ips for %s\n", id->ident);
1492 return 1;
1493}
1494
1495static const struct dmi_system_id ips_blacklist[] = {
1496 {
1497 .callback = ips_blacklist_callback,
1498 .ident = "HP ProBook",
1499 .matches = {
1500 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1501 DMI_MATCH(DMI_PRODUCT_NAME, "HP ProBook"),
1502 },
1503 },
1504 { } /* terminating entry */
1505};
1506
1488static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id) 1507static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
1489{ 1508{
1490 u64 platform_info; 1509 u64 platform_info;
@@ -1494,6 +1513,9 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
1494 u16 htshi, trc, trc_required_mask; 1513 u16 htshi, trc, trc_required_mask;
1495 u8 tse; 1514 u8 tse;
1496 1515
1516 if (dmi_check_system(ips_blacklist))
1517 return -ENODEV;
1518
1497 ips = kzalloc(sizeof(struct ips_driver), GFP_KERNEL); 1519 ips = kzalloc(sizeof(struct ips_driver), GFP_KERNEL);
1498 if (!ips) 1520 if (!ips)
1499 return -ENOMEM; 1521 return -ENOMEM;
@@ -1697,21 +1719,6 @@ static void ips_remove(struct pci_dev *dev)
1697 dev_dbg(&dev->dev, "IPS driver removed\n"); 1719 dev_dbg(&dev->dev, "IPS driver removed\n");
1698} 1720}
1699 1721
1700#ifdef CONFIG_PM
1701static int ips_suspend(struct pci_dev *dev, pm_message_t state)
1702{
1703 return 0;
1704}
1705
1706static int ips_resume(struct pci_dev *dev)
1707{
1708 return 0;
1709}
1710#else
1711#define ips_suspend NULL
1712#define ips_resume NULL
1713#endif /* CONFIG_PM */
1714
1715static void ips_shutdown(struct pci_dev *dev) 1722static void ips_shutdown(struct pci_dev *dev)
1716{ 1723{
1717} 1724}
@@ -1721,8 +1728,6 @@ static struct pci_driver ips_pci_driver = {
1721 .id_table = ips_id_table, 1728 .id_table = ips_id_table,
1722 .probe = ips_probe, 1729 .probe = ips_probe,
1723 .remove = ips_remove, 1730 .remove = ips_remove,
1724 .suspend = ips_suspend,
1725 .resume = ips_resume,
1726 .shutdown = ips_shutdown, 1731 .shutdown = ips_shutdown,
1727}; 1732};
1728 1733
diff --git a/drivers/platform/x86/intel_mid_thermal.c b/drivers/platform/x86/intel_mid_thermal.c
index 5ae9cd9c7e6e..ea7422f6fa03 100644
--- a/drivers/platform/x86/intel_mid_thermal.c
+++ b/drivers/platform/x86/intel_mid_thermal.c
@@ -418,23 +418,23 @@ static struct thermal_device_info *initialize_sensor(int index)
418 418
419/** 419/**
420 * mid_thermal_resume - resume routine 420 * mid_thermal_resume - resume routine
421 * @pdev: platform device structure 421 * @dev: device structure
422 * 422 *
423 * mid thermal resume: re-initializes the adc. Can sleep. 423 * mid thermal resume: re-initializes the adc. Can sleep.
424 */ 424 */
425static int mid_thermal_resume(struct platform_device *pdev) 425static int mid_thermal_resume(struct device *dev)
426{ 426{
427 return mid_initialize_adc(&pdev->dev); 427 return mid_initialize_adc(dev);
428} 428}
429 429
430/** 430/**
431 * mid_thermal_suspend - suspend routine 431 * mid_thermal_suspend - suspend routine
432 * @pdev: platform device structure 432 * @dev: device structure
433 * 433 *
434 * mid thermal suspend implements the suspend functionality 434 * mid thermal suspend implements the suspend functionality
435 * by stopping the ADC. Can sleep. 435 * by stopping the ADC. Can sleep.
436 */ 436 */
437static int mid_thermal_suspend(struct platform_device *pdev, pm_message_t mesg) 437static int mid_thermal_suspend(struct device *dev)
438{ 438{
439 /* 439 /*
440 * This just stops the ADC and does not disable it. 440 * This just stops the ADC and does not disable it.
@@ -444,6 +444,9 @@ static int mid_thermal_suspend(struct platform_device *pdev, pm_message_t mesg)
444 return configure_adc(0); 444 return configure_adc(0);
445} 445}
446 446
447static SIMPLE_DEV_PM_OPS(mid_thermal_pm,
448 mid_thermal_suspend, mid_thermal_resume);
449
447/** 450/**
448 * read_curr_temp - reads the current temperature and stores in temp 451 * read_curr_temp - reads the current temperature and stores in temp
449 * @temp: holds the current temperature value after reading 452 * @temp: holds the current temperature value after reading
@@ -557,10 +560,9 @@ static struct platform_driver mid_thermal_driver = {
557 .driver = { 560 .driver = {
558 .name = DRIVER_NAME, 561 .name = DRIVER_NAME,
559 .owner = THIS_MODULE, 562 .owner = THIS_MODULE,
563 .pm = &mid_thermal_pm,
560 }, 564 },
561 .probe = mid_thermal_probe, 565 .probe = mid_thermal_probe,
562 .suspend = mid_thermal_suspend,
563 .resume = mid_thermal_resume,
564 .remove = __devexit_p(mid_thermal_remove), 566 .remove = __devexit_p(mid_thermal_remove),
565 .id_table = therm_id_table, 567 .id_table = therm_id_table,
566}; 568};
diff --git a/drivers/platform/x86/msi-laptop.c b/drivers/platform/x86/msi-laptop.c
index bb5132128b33..f64441844317 100644
--- a/drivers/platform/x86/msi-laptop.c
+++ b/drivers/platform/x86/msi-laptop.c
@@ -85,7 +85,8 @@
85#define MSI_STANDARD_EC_TOUCHPAD_ADDRESS 0xe4 85#define MSI_STANDARD_EC_TOUCHPAD_ADDRESS 0xe4
86#define MSI_STANDARD_EC_TOUCHPAD_MASK (1 << 4) 86#define MSI_STANDARD_EC_TOUCHPAD_MASK (1 << 4)
87 87
88static int msi_laptop_resume(struct platform_device *device); 88static int msi_laptop_resume(struct device *device);
89static SIMPLE_DEV_PM_OPS(msi_laptop_pm, NULL, msi_laptop_resume);
89 90
90#define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f 91#define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f
91 92
@@ -437,8 +438,8 @@ static struct platform_driver msipf_driver = {
437 .driver = { 438 .driver = {
438 .name = "msi-laptop-pf", 439 .name = "msi-laptop-pf",
439 .owner = THIS_MODULE, 440 .owner = THIS_MODULE,
441 .pm = &msi_laptop_pm,
440 }, 442 },
441 .resume = msi_laptop_resume,
442}; 443};
443 444
444static struct platform_device *msipf_device; 445static struct platform_device *msipf_device;
@@ -752,7 +753,7 @@ err_bluetooth:
752 return retval; 753 return retval;
753} 754}
754 755
755static int msi_laptop_resume(struct platform_device *device) 756static int msi_laptop_resume(struct device *device)
756{ 757{
757 u8 data; 758 u8 data;
758 int result; 759 int result;
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c
index ffff8b4b4949..24480074bcf0 100644
--- a/drivers/platform/x86/panasonic-laptop.c
+++ b/drivers/platform/x86/panasonic-laptop.c
@@ -177,7 +177,6 @@ enum SINF_BITS { SINF_NUM_BATTERIES = 0,
177 177
178static int acpi_pcc_hotkey_add(struct acpi_device *device); 178static int acpi_pcc_hotkey_add(struct acpi_device *device);
179static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type); 179static int acpi_pcc_hotkey_remove(struct acpi_device *device, int type);
180static int acpi_pcc_hotkey_resume(struct acpi_device *device);
181static void acpi_pcc_hotkey_notify(struct acpi_device *device, u32 event); 180static void acpi_pcc_hotkey_notify(struct acpi_device *device, u32 event);
182 181
183static const struct acpi_device_id pcc_device_ids[] = { 182static const struct acpi_device_id pcc_device_ids[] = {
@@ -189,6 +188,9 @@ static const struct acpi_device_id pcc_device_ids[] = {
189}; 188};
190MODULE_DEVICE_TABLE(acpi, pcc_device_ids); 189MODULE_DEVICE_TABLE(acpi, pcc_device_ids);
191 190
191static int acpi_pcc_hotkey_resume(struct device *dev);
192static SIMPLE_DEV_PM_OPS(acpi_pcc_hotkey_pm, NULL, acpi_pcc_hotkey_resume);
193
192static struct acpi_driver acpi_pcc_driver = { 194static struct acpi_driver acpi_pcc_driver = {
193 .name = ACPI_PCC_DRIVER_NAME, 195 .name = ACPI_PCC_DRIVER_NAME,
194 .class = ACPI_PCC_CLASS, 196 .class = ACPI_PCC_CLASS,
@@ -196,9 +198,9 @@ static struct acpi_driver acpi_pcc_driver = {
196 .ops = { 198 .ops = {
197 .add = acpi_pcc_hotkey_add, 199 .add = acpi_pcc_hotkey_add,
198 .remove = acpi_pcc_hotkey_remove, 200 .remove = acpi_pcc_hotkey_remove,
199 .resume = acpi_pcc_hotkey_resume,
200 .notify = acpi_pcc_hotkey_notify, 201 .notify = acpi_pcc_hotkey_notify,
201 }, 202 },
203 .drv.pm = &acpi_pcc_hotkey_pm,
202}; 204};
203 205
204static const struct key_entry panasonic_keymap[] = { 206static const struct key_entry panasonic_keymap[] = {
@@ -538,11 +540,15 @@ static void acpi_pcc_destroy_input(struct pcc_acpi *pcc)
538 540
539/* kernel module interface */ 541/* kernel module interface */
540 542
541static int acpi_pcc_hotkey_resume(struct acpi_device *device) 543static int acpi_pcc_hotkey_resume(struct device *dev)
542{ 544{
543 struct pcc_acpi *pcc = acpi_driver_data(device); 545 struct pcc_acpi *pcc;
546
547 if (!dev)
548 return -EINVAL;
544 549
545 if (device == NULL || pcc == NULL) 550 pcc = acpi_driver_data(to_acpi_device(dev));
551 if (!pcc)
546 return -EINVAL; 552 return -EINVAL;
547 553
548 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Sticky mode restore: %d\n", 554 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Sticky mode restore: %d\n",
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 210d4ae547c2..9363969ad07a 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -973,7 +973,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
973 struct device_attribute *attr, 973 struct device_attribute *attr,
974 const char *buffer, size_t count) 974 const char *buffer, size_t count)
975{ 975{
976 unsigned long value = 0; 976 int value;
977 int ret = 0; 977 int ret = 0;
978 struct sony_nc_value *item = 978 struct sony_nc_value *item =
979 container_of(attr, struct sony_nc_value, devattr); 979 container_of(attr, struct sony_nc_value, devattr);
@@ -984,7 +984,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
984 if (count > 31) 984 if (count > 31)
985 return -EINVAL; 985 return -EINVAL;
986 986
987 if (kstrtoul(buffer, 10, &value)) 987 if (kstrtoint(buffer, 10, &value))
988 return -EINVAL; 988 return -EINVAL;
989 989
990 if (item->validate) 990 if (item->validate)
@@ -994,7 +994,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
994 return value; 994 return value;
995 995
996 ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset, 996 ret = sony_nc_int_call(sony_nc_acpi_handle, *item->acpiset,
997 (int *)&value, NULL); 997 &value, NULL);
998 if (ret < 0) 998 if (ret < 0)
999 return -EIO; 999 return -EIO;
1000 1000
@@ -1010,6 +1010,7 @@ static ssize_t sony_nc_sysfs_store(struct device *dev,
1010struct sony_backlight_props { 1010struct sony_backlight_props {
1011 struct backlight_device *dev; 1011 struct backlight_device *dev;
1012 int handle; 1012 int handle;
1013 int cmd_base;
1013 u8 offset; 1014 u8 offset;
1014 u8 maxlvl; 1015 u8 maxlvl;
1015}; 1016};
@@ -1037,7 +1038,7 @@ static int sony_nc_get_brightness_ng(struct backlight_device *bd)
1037 struct sony_backlight_props *sdev = 1038 struct sony_backlight_props *sdev =
1038 (struct sony_backlight_props *)bl_get_data(bd); 1039 (struct sony_backlight_props *)bl_get_data(bd);
1039 1040
1040 sony_call_snc_handle(sdev->handle, 0x0200, &result); 1041 sony_call_snc_handle(sdev->handle, sdev->cmd_base + 0x100, &result);
1041 1042
1042 return (result & 0xff) - sdev->offset; 1043 return (result & 0xff) - sdev->offset;
1043} 1044}
@@ -1049,7 +1050,8 @@ static int sony_nc_update_status_ng(struct backlight_device *bd)
1049 (struct sony_backlight_props *)bl_get_data(bd); 1050 (struct sony_backlight_props *)bl_get_data(bd);
1050 1051
1051 value = bd->props.brightness + sdev->offset; 1052 value = bd->props.brightness + sdev->offset;
1052 if (sony_call_snc_handle(sdev->handle, 0x0100 | (value << 16), &result)) 1053 if (sony_call_snc_handle(sdev->handle, sdev->cmd_base | (value << 0x10),
1054 &result))
1053 return -EIO; 1055 return -EIO;
1054 1056
1055 return value; 1057 return value;
@@ -1172,6 +1174,11 @@ static int sony_nc_hotkeys_decode(u32 event, unsigned int handle)
1172/* 1174/*
1173 * ACPI callbacks 1175 * ACPI callbacks
1174 */ 1176 */
1177enum event_types {
1178 HOTKEY = 1,
1179 KILLSWITCH,
1180 GFX_SWITCH
1181};
1175static void sony_nc_notify(struct acpi_device *device, u32 event) 1182static void sony_nc_notify(struct acpi_device *device, u32 event)
1176{ 1183{
1177 u32 real_ev = event; 1184 u32 real_ev = event;
@@ -1196,7 +1203,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
1196 /* hotkey event */ 1203 /* hotkey event */
1197 case 0x0100: 1204 case 0x0100:
1198 case 0x0127: 1205 case 0x0127:
1199 ev_type = 1; 1206 ev_type = HOTKEY;
1200 real_ev = sony_nc_hotkeys_decode(event, handle); 1207 real_ev = sony_nc_hotkeys_decode(event, handle);
1201 1208
1202 if (real_ev > 0) 1209 if (real_ev > 0)
@@ -1216,7 +1223,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
1216 * update the rfkill device status when the 1223 * update the rfkill device status when the
1217 * switch is moved. 1224 * switch is moved.
1218 */ 1225 */
1219 ev_type = 2; 1226 ev_type = KILLSWITCH;
1220 sony_call_snc_handle(handle, 0x0100, &result); 1227 sony_call_snc_handle(handle, 0x0100, &result);
1221 real_ev = result & 0x03; 1228 real_ev = result & 0x03;
1222 1229
@@ -1226,6 +1233,24 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
1226 1233
1227 break; 1234 break;
1228 1235
1236 case 0x0128:
1237 case 0x0146:
1238 /* Hybrid GFX switching */
1239 sony_call_snc_handle(handle, 0x0000, &result);
1240 dprintk("GFX switch event received (reason: %s)\n",
1241 (result & 0x01) ?
1242 "switch change" : "unknown");
1243
1244 /* verify the switch state
1245 * 1: discrete GFX
1246 * 0: integrated GFX
1247 */
1248 sony_call_snc_handle(handle, 0x0100, &result);
1249
1250 ev_type = GFX_SWITCH;
1251 real_ev = result & 0xff;
1252 break;
1253
1229 default: 1254 default:
1230 dprintk("Unknown event 0x%x for handle 0x%x\n", 1255 dprintk("Unknown event 0x%x for handle 0x%x\n",
1231 event, handle); 1256 event, handle);
@@ -1238,7 +1263,7 @@ static void sony_nc_notify(struct acpi_device *device, u32 event)
1238 1263
1239 } else { 1264 } else {
1240 /* old style event */ 1265 /* old style event */
1241 ev_type = 1; 1266 ev_type = HOTKEY;
1242 sony_laptop_report_input_event(real_ev); 1267 sony_laptop_report_input_event(real_ev);
1243 } 1268 }
1244 1269
@@ -1452,7 +1477,7 @@ static void sony_nc_function_resume(void)
1452 &result); 1477 &result);
1453} 1478}
1454 1479
1455static int sony_nc_resume(struct acpi_device *device) 1480static int sony_nc_resume(struct device *dev)
1456{ 1481{
1457 struct sony_nc_value *item; 1482 struct sony_nc_value *item;
1458 acpi_handle handle; 1483 acpi_handle handle;
@@ -1484,6 +1509,8 @@ static int sony_nc_resume(struct acpi_device *device)
1484 return 0; 1509 return 0;
1485} 1510}
1486 1511
1512static SIMPLE_DEV_PM_OPS(sony_nc_pm, NULL, sony_nc_resume);
1513
1487static void sony_nc_rfkill_cleanup(void) 1514static void sony_nc_rfkill_cleanup(void)
1488{ 1515{
1489 int i; 1516 int i;
@@ -1893,32 +1920,33 @@ static ssize_t sony_nc_battery_care_limit_store(struct device *dev,
1893 * bits 4,5: store the limit into the EC 1920 * bits 4,5: store the limit into the EC
1894 * bits 6,7: store the limit into the battery 1921 * bits 6,7: store the limit into the battery
1895 */ 1922 */
1923 cmd = 0;
1896 1924
1897 /* 1925 if (value > 0) {
1898 * handle 0x0115 should allow storing on battery too; 1926 if (value <= 50)
1899 * handle 0x0136 same as 0x0115 + health status; 1927 cmd = 0x20;
1900 * handle 0x013f, same as 0x0136 but no storing on the battery
1901 *
1902 * Store only inside the EC for now, regardless the handle number
1903 */
1904 if (value == 0)
1905 /* disable limits */
1906 cmd = 0x0;
1907 1928
1908 else if (value <= 50) 1929 else if (value <= 80)
1909 cmd = 0x21; 1930 cmd = 0x10;
1910 1931
1911 else if (value <= 80) 1932 else if (value <= 100)
1912 cmd = 0x11; 1933 cmd = 0x30;
1913 1934
1914 else if (value <= 100) 1935 else
1915 cmd = 0x31; 1936 return -EINVAL;
1916 1937
1917 else 1938 /*
1918 return -EINVAL; 1939 * handle 0x0115 should allow storing on battery too;
1940 * handle 0x0136 same as 0x0115 + health status;
1941 * handle 0x013f, same as 0x0136 but no storing on the battery
1942 */
1943 if (bcare_ctl->handle != 0x013f)
1944 cmd = cmd | (cmd << 2);
1919 1945
1920 if (sony_call_snc_handle(bcare_ctl->handle, (cmd << 0x10) | 0x0100, 1946 cmd = (cmd | 0x1) << 0x10;
1921 &result)) 1947 }
1948
1949 if (sony_call_snc_handle(bcare_ctl->handle, cmd | 0x0100, &result))
1922 return -EIO; 1950 return -EIO;
1923 1951
1924 return count; 1952 return count;
@@ -2113,7 +2141,7 @@ static ssize_t sony_nc_thermal_mode_show(struct device *dev,
2113 struct device_attribute *attr, char *buffer) 2141 struct device_attribute *attr, char *buffer)
2114{ 2142{
2115 ssize_t count = 0; 2143 ssize_t count = 0;
2116 unsigned int mode = sony_nc_thermal_mode_get(); 2144 int mode = sony_nc_thermal_mode_get();
2117 2145
2118 if (mode < 0) 2146 if (mode < 0)
2119 return mode; 2147 return mode;
@@ -2472,6 +2500,7 @@ static void sony_nc_backlight_ng_read_limits(int handle,
2472{ 2500{
2473 u64 offset; 2501 u64 offset;
2474 int i; 2502 int i;
2503 int lvl_table_len = 0;
2475 u8 min = 0xff, max = 0x00; 2504 u8 min = 0xff, max = 0x00;
2476 unsigned char buffer[32] = { 0 }; 2505 unsigned char buffer[32] = { 0 };
2477 2506
@@ -2480,8 +2509,6 @@ static void sony_nc_backlight_ng_read_limits(int handle,
2480 props->maxlvl = 0xff; 2509 props->maxlvl = 0xff;
2481 2510
2482 offset = sony_find_snc_handle(handle); 2511 offset = sony_find_snc_handle(handle);
2483 if (offset < 0)
2484 return;
2485 2512
2486 /* try to read the boundaries from ACPI tables, if we fail the above 2513 /* try to read the boundaries from ACPI tables, if we fail the above
2487 * defaults should be reasonable 2514 * defaults should be reasonable
@@ -2491,11 +2518,21 @@ static void sony_nc_backlight_ng_read_limits(int handle,
2491 if (i < 0) 2518 if (i < 0)
2492 return; 2519 return;
2493 2520
2521 switch (handle) {
2522 case 0x012f:
2523 case 0x0137:
2524 lvl_table_len = 9;
2525 break;
2526 case 0x143:
2527 lvl_table_len = 16;
2528 break;
2529 }
2530
2494 /* the buffer lists brightness levels available, brightness levels are 2531 /* the buffer lists brightness levels available, brightness levels are
2495 * from position 0 to 8 in the array, other values are used by ALS 2532 * from position 0 to 8 in the array, other values are used by ALS
2496 * control. 2533 * control.
2497 */ 2534 */
2498 for (i = 0; i < 9 && i < ARRAY_SIZE(buffer); i++) { 2535 for (i = 0; i < lvl_table_len && i < ARRAY_SIZE(buffer); i++) {
2499 2536
2500 dprintk("Brightness level: %d\n", buffer[i]); 2537 dprintk("Brightness level: %d\n", buffer[i]);
2501 2538
@@ -2520,16 +2557,24 @@ static void sony_nc_backlight_setup(void)
2520 const struct backlight_ops *ops = NULL; 2557 const struct backlight_ops *ops = NULL;
2521 struct backlight_properties props; 2558 struct backlight_properties props;
2522 2559
2523 if (sony_find_snc_handle(0x12f) != -1) { 2560 if (sony_find_snc_handle(0x12f) >= 0) {
2524 ops = &sony_backlight_ng_ops; 2561 ops = &sony_backlight_ng_ops;
2562 sony_bl_props.cmd_base = 0x0100;
2525 sony_nc_backlight_ng_read_limits(0x12f, &sony_bl_props); 2563 sony_nc_backlight_ng_read_limits(0x12f, &sony_bl_props);
2526 max_brightness = sony_bl_props.maxlvl - sony_bl_props.offset; 2564 max_brightness = sony_bl_props.maxlvl - sony_bl_props.offset;
2527 2565
2528 } else if (sony_find_snc_handle(0x137) != -1) { 2566 } else if (sony_find_snc_handle(0x137) >= 0) {
2529 ops = &sony_backlight_ng_ops; 2567 ops = &sony_backlight_ng_ops;
2568 sony_bl_props.cmd_base = 0x0100;
2530 sony_nc_backlight_ng_read_limits(0x137, &sony_bl_props); 2569 sony_nc_backlight_ng_read_limits(0x137, &sony_bl_props);
2531 max_brightness = sony_bl_props.maxlvl - sony_bl_props.offset; 2570 max_brightness = sony_bl_props.maxlvl - sony_bl_props.offset;
2532 2571
2572 } else if (sony_find_snc_handle(0x143) >= 0) {
2573 ops = &sony_backlight_ng_ops;
2574 sony_bl_props.cmd_base = 0x3000;
2575 sony_nc_backlight_ng_read_limits(0x143, &sony_bl_props);
2576 max_brightness = sony_bl_props.maxlvl - sony_bl_props.offset;
2577
2533 } else if (ACPI_SUCCESS(acpi_get_handle(sony_nc_acpi_handle, "GBRT", 2578 } else if (ACPI_SUCCESS(acpi_get_handle(sony_nc_acpi_handle, "GBRT",
2534 &unused))) { 2579 &unused))) {
2535 ops = &sony_backlight_ops; 2580 ops = &sony_backlight_ops;
@@ -2597,6 +2642,12 @@ static int sony_nc_add(struct acpi_device *device)
2597 } 2642 }
2598 } 2643 }
2599 2644
2645 result = sony_laptop_setup_input(device);
2646 if (result) {
2647 pr_err("Unable to create input devices\n");
2648 goto outplatform;
2649 }
2650
2600 if (ACPI_SUCCESS(acpi_get_handle(sony_nc_acpi_handle, "ECON", 2651 if (ACPI_SUCCESS(acpi_get_handle(sony_nc_acpi_handle, "ECON",
2601 &handle))) { 2652 &handle))) {
2602 int arg = 1; 2653 int arg = 1;
@@ -2614,12 +2665,6 @@ static int sony_nc_add(struct acpi_device *device)
2614 } 2665 }
2615 2666
2616 /* setup input devices and helper fifo */ 2667 /* setup input devices and helper fifo */
2617 result = sony_laptop_setup_input(device);
2618 if (result) {
2619 pr_err("Unable to create input devices\n");
2620 goto outsnc;
2621 }
2622
2623 if (acpi_video_backlight_support()) { 2668 if (acpi_video_backlight_support()) {
2624 pr_info("brightness ignored, must be controlled by ACPI video driver\n"); 2669 pr_info("brightness ignored, must be controlled by ACPI video driver\n");
2625 } else { 2670 } else {
@@ -2667,22 +2712,21 @@ static int sony_nc_add(struct acpi_device *device)
2667 2712
2668 return 0; 2713 return 0;
2669 2714
2670 out_sysfs: 2715out_sysfs:
2671 for (item = sony_nc_values; item->name; ++item) { 2716 for (item = sony_nc_values; item->name; ++item) {
2672 device_remove_file(&sony_pf_device->dev, &item->devattr); 2717 device_remove_file(&sony_pf_device->dev, &item->devattr);
2673 } 2718 }
2674 sony_nc_backlight_cleanup(); 2719 sony_nc_backlight_cleanup();
2675
2676 sony_laptop_remove_input();
2677
2678 outsnc:
2679 sony_nc_function_cleanup(sony_pf_device); 2720 sony_nc_function_cleanup(sony_pf_device);
2680 sony_nc_handles_cleanup(sony_pf_device); 2721 sony_nc_handles_cleanup(sony_pf_device);
2681 2722
2682 outpresent: 2723outplatform:
2724 sony_laptop_remove_input();
2725
2726outpresent:
2683 sony_pf_remove(); 2727 sony_pf_remove();
2684 2728
2685 outwalk: 2729outwalk:
2686 sony_nc_rfkill_cleanup(); 2730 sony_nc_rfkill_cleanup();
2687 return result; 2731 return result;
2688} 2732}
@@ -2728,9 +2772,9 @@ static struct acpi_driver sony_nc_driver = {
2728 .ops = { 2772 .ops = {
2729 .add = sony_nc_add, 2773 .add = sony_nc_add,
2730 .remove = sony_nc_remove, 2774 .remove = sony_nc_remove,
2731 .resume = sony_nc_resume,
2732 .notify = sony_nc_notify, 2775 .notify = sony_nc_notify,
2733 }, 2776 },
2777 .drv.pm = &sony_nc_pm,
2734}; 2778};
2735 2779
2736/*********** SPIC (SNY6001) Device ***********/ 2780/*********** SPIC (SNY6001) Device ***********/
@@ -4243,19 +4287,22 @@ err_free_resources:
4243 return result; 4287 return result;
4244} 4288}
4245 4289
4246static int sony_pic_suspend(struct acpi_device *device, pm_message_t state) 4290static int sony_pic_suspend(struct device *dev)
4247{ 4291{
4248 if (sony_pic_disable(device)) 4292 if (sony_pic_disable(to_acpi_device(dev)))
4249 return -ENXIO; 4293 return -ENXIO;
4250 return 0; 4294 return 0;
4251} 4295}
4252 4296
4253static int sony_pic_resume(struct acpi_device *device) 4297static int sony_pic_resume(struct device *dev)
4254{ 4298{
4255 sony_pic_enable(device, spic_dev.cur_ioport, spic_dev.cur_irq); 4299 sony_pic_enable(to_acpi_device(dev),
4300 spic_dev.cur_ioport, spic_dev.cur_irq);
4256 return 0; 4301 return 0;
4257} 4302}
4258 4303
4304static SIMPLE_DEV_PM_OPS(sony_pic_pm, sony_pic_suspend, sony_pic_resume);
4305
4259static const struct acpi_device_id sony_pic_device_ids[] = { 4306static const struct acpi_device_id sony_pic_device_ids[] = {
4260 {SONY_PIC_HID, 0}, 4307 {SONY_PIC_HID, 0},
4261 {"", 0}, 4308 {"", 0},
@@ -4269,9 +4316,8 @@ static struct acpi_driver sony_pic_driver = {
4269 .ops = { 4316 .ops = {
4270 .add = sony_pic_add, 4317 .add = sony_pic_add,
4271 .remove = sony_pic_remove, 4318 .remove = sony_pic_remove,
4272 .suspend = sony_pic_suspend,
4273 .resume = sony_pic_resume,
4274 }, 4319 },
4320 .drv.pm = &sony_pic_pm,
4275}; 4321};
4276 4322
4277static struct dmi_system_id __initdata sonypi_dmi_table[] = { 4323static struct dmi_system_id __initdata sonypi_dmi_table[] = {
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index 8b5610d88418..d5fd4a1193f8 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -277,7 +277,7 @@ struct ibm_struct {
277 int (*write) (char *); 277 int (*write) (char *);
278 void (*exit) (void); 278 void (*exit) (void);
279 void (*resume) (void); 279 void (*resume) (void);
280 void (*suspend) (pm_message_t state); 280 void (*suspend) (void);
281 void (*shutdown) (void); 281 void (*shutdown) (void);
282 282
283 struct list_head all_drivers; 283 struct list_head all_drivers;
@@ -922,8 +922,7 @@ static struct input_dev *tpacpi_inputdev;
922static struct mutex tpacpi_inputdev_send_mutex; 922static struct mutex tpacpi_inputdev_send_mutex;
923static LIST_HEAD(tpacpi_all_drivers); 923static LIST_HEAD(tpacpi_all_drivers);
924 924
925static int tpacpi_suspend_handler(struct platform_device *pdev, 925static int tpacpi_suspend_handler(struct device *dev)
926 pm_message_t state)
927{ 926{
928 struct ibm_struct *ibm, *itmp; 927 struct ibm_struct *ibm, *itmp;
929 928
@@ -931,13 +930,13 @@ static int tpacpi_suspend_handler(struct platform_device *pdev,
931 &tpacpi_all_drivers, 930 &tpacpi_all_drivers,
932 all_drivers) { 931 all_drivers) {
933 if (ibm->suspend) 932 if (ibm->suspend)
934 (ibm->suspend)(state); 933 (ibm->suspend)();
935 } 934 }
936 935
937 return 0; 936 return 0;
938} 937}
939 938
940static int tpacpi_resume_handler(struct platform_device *pdev) 939static int tpacpi_resume_handler(struct device *dev)
941{ 940{
942 struct ibm_struct *ibm, *itmp; 941 struct ibm_struct *ibm, *itmp;
943 942
@@ -951,6 +950,9 @@ static int tpacpi_resume_handler(struct platform_device *pdev)
951 return 0; 950 return 0;
952} 951}
953 952
953static SIMPLE_DEV_PM_OPS(tpacpi_pm,
954 tpacpi_suspend_handler, tpacpi_resume_handler);
955
954static void tpacpi_shutdown_handler(struct platform_device *pdev) 956static void tpacpi_shutdown_handler(struct platform_device *pdev)
955{ 957{
956 struct ibm_struct *ibm, *itmp; 958 struct ibm_struct *ibm, *itmp;
@@ -967,9 +969,8 @@ static struct platform_driver tpacpi_pdriver = {
967 .driver = { 969 .driver = {
968 .name = TPACPI_DRVR_NAME, 970 .name = TPACPI_DRVR_NAME,
969 .owner = THIS_MODULE, 971 .owner = THIS_MODULE,
972 .pm = &tpacpi_pm,
970 }, 973 },
971 .suspend = tpacpi_suspend_handler,
972 .resume = tpacpi_resume_handler,
973 .shutdown = tpacpi_shutdown_handler, 974 .shutdown = tpacpi_shutdown_handler,
974}; 975};
975 976
@@ -3758,7 +3759,7 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
3758 } 3759 }
3759} 3760}
3760 3761
3761static void hotkey_suspend(pm_message_t state) 3762static void hotkey_suspend(void)
3762{ 3763{
3763 /* Do these on suspend, we get the events on early resume! */ 3764 /* Do these on suspend, we get the events on early resume! */
3764 hotkey_wakeup_reason = TP_ACPI_WAKEUP_NONE; 3765 hotkey_wakeup_reason = TP_ACPI_WAKEUP_NONE;
@@ -6329,7 +6330,7 @@ static int __init brightness_init(struct ibm_init_struct *iibm)
6329 return 0; 6330 return 0;
6330} 6331}
6331 6332
6332static void brightness_suspend(pm_message_t state) 6333static void brightness_suspend(void)
6333{ 6334{
6334 tpacpi_brightness_checkpoint_nvram(); 6335 tpacpi_brightness_checkpoint_nvram();
6335} 6336}
@@ -6748,7 +6749,7 @@ static struct snd_kcontrol_new volume_alsa_control_mute __devinitdata = {
6748 .get = volume_alsa_mute_get, 6749 .get = volume_alsa_mute_get,
6749}; 6750};
6750 6751
6751static void volume_suspend(pm_message_t state) 6752static void volume_suspend(void)
6752{ 6753{
6753 tpacpi_volume_checkpoint_nvram(); 6754 tpacpi_volume_checkpoint_nvram();
6754} 6755}
@@ -8107,7 +8108,7 @@ static void fan_exit(void)
8107 flush_workqueue(tpacpi_wq); 8108 flush_workqueue(tpacpi_wq);
8108} 8109}
8109 8110
8110static void fan_suspend(pm_message_t state) 8111static void fan_suspend(void)
8111{ 8112{
8112 int rc; 8113 int rc;
8113 8114
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index dab10f6edcd4..c13ba5bac93f 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -1296,10 +1296,9 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
1296 } 1296 }
1297} 1297}
1298 1298
1299static int toshiba_acpi_suspend(struct acpi_device *acpi_dev, 1299static int toshiba_acpi_suspend(struct device *device)
1300 pm_message_t state)
1301{ 1300{
1302 struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev); 1301 struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
1303 u32 result; 1302 u32 result;
1304 1303
1305 if (dev->hotkey_dev) 1304 if (dev->hotkey_dev)
@@ -1308,9 +1307,9 @@ static int toshiba_acpi_suspend(struct acpi_device *acpi_dev,
1308 return 0; 1307 return 0;
1309} 1308}
1310 1309
1311static int toshiba_acpi_resume(struct acpi_device *acpi_dev) 1310static int toshiba_acpi_resume(struct device *device)
1312{ 1311{
1313 struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev); 1312 struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
1314 u32 result; 1313 u32 result;
1315 1314
1316 if (dev->hotkey_dev) 1315 if (dev->hotkey_dev)
@@ -1319,6 +1318,9 @@ static int toshiba_acpi_resume(struct acpi_device *acpi_dev)
1319 return 0; 1318 return 0;
1320} 1319}
1321 1320
1321static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
1322 toshiba_acpi_suspend, toshiba_acpi_resume);
1323
1322static struct acpi_driver toshiba_acpi_driver = { 1324static struct acpi_driver toshiba_acpi_driver = {
1323 .name = "Toshiba ACPI driver", 1325 .name = "Toshiba ACPI driver",
1324 .owner = THIS_MODULE, 1326 .owner = THIS_MODULE,
@@ -1328,9 +1330,8 @@ static struct acpi_driver toshiba_acpi_driver = {
1328 .add = toshiba_acpi_add, 1330 .add = toshiba_acpi_add,
1329 .remove = toshiba_acpi_remove, 1331 .remove = toshiba_acpi_remove,
1330 .notify = toshiba_acpi_notify, 1332 .notify = toshiba_acpi_notify,
1331 .suspend = toshiba_acpi_suspend,
1332 .resume = toshiba_acpi_resume,
1333 }, 1333 },
1334 .drv.pm = &toshiba_acpi_pm,
1334}; 1335};
1335 1336
1336static int __init toshiba_acpi_init(void) 1337static int __init toshiba_acpi_init(void)
diff --git a/drivers/platform/x86/toshiba_bluetooth.c b/drivers/platform/x86/toshiba_bluetooth.c
index 5fb7186694df..715a43cb5e3c 100644
--- a/drivers/platform/x86/toshiba_bluetooth.c
+++ b/drivers/platform/x86/toshiba_bluetooth.c
@@ -34,7 +34,6 @@ MODULE_LICENSE("GPL");
34static int toshiba_bt_rfkill_add(struct acpi_device *device); 34static int toshiba_bt_rfkill_add(struct acpi_device *device);
35static int toshiba_bt_rfkill_remove(struct acpi_device *device, int type); 35static int toshiba_bt_rfkill_remove(struct acpi_device *device, int type);
36static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event); 36static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event);
37static int toshiba_bt_resume(struct acpi_device *device);
38 37
39static const struct acpi_device_id bt_device_ids[] = { 38static const struct acpi_device_id bt_device_ids[] = {
40 { "TOS6205", 0}, 39 { "TOS6205", 0},
@@ -42,6 +41,9 @@ static const struct acpi_device_id bt_device_ids[] = {
42}; 41};
43MODULE_DEVICE_TABLE(acpi, bt_device_ids); 42MODULE_DEVICE_TABLE(acpi, bt_device_ids);
44 43
44static int toshiba_bt_resume(struct device *dev);
45static SIMPLE_DEV_PM_OPS(toshiba_bt_pm, NULL, toshiba_bt_resume);
46
45static struct acpi_driver toshiba_bt_rfkill_driver = { 47static struct acpi_driver toshiba_bt_rfkill_driver = {
46 .name = "Toshiba BT", 48 .name = "Toshiba BT",
47 .class = "Toshiba", 49 .class = "Toshiba",
@@ -50,9 +52,9 @@ static struct acpi_driver toshiba_bt_rfkill_driver = {
50 .add = toshiba_bt_rfkill_add, 52 .add = toshiba_bt_rfkill_add,
51 .remove = toshiba_bt_rfkill_remove, 53 .remove = toshiba_bt_rfkill_remove,
52 .notify = toshiba_bt_rfkill_notify, 54 .notify = toshiba_bt_rfkill_notify,
53 .resume = toshiba_bt_resume,
54 }, 55 },
55 .owner = THIS_MODULE, 56 .owner = THIS_MODULE,
57 .drv.pm = &toshiba_bt_pm,
56}; 58};
57 59
58 60
@@ -88,9 +90,9 @@ static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event)
88 toshiba_bluetooth_enable(device->handle); 90 toshiba_bluetooth_enable(device->handle);
89} 91}
90 92
91static int toshiba_bt_resume(struct acpi_device *device) 93static int toshiba_bt_resume(struct device *dev)
92{ 94{
93 return toshiba_bluetooth_enable(device->handle); 95 return toshiba_bluetooth_enable(to_acpi_device(dev)->handle);
94} 96}
95 97
96static int toshiba_bt_rfkill_add(struct acpi_device *device) 98static int toshiba_bt_rfkill_add(struct acpi_device *device)
diff --git a/drivers/platform/x86/xo15-ebook.c b/drivers/platform/x86/xo15-ebook.c
index fad153dc0355..849c07c13bf6 100644
--- a/drivers/platform/x86/xo15-ebook.c
+++ b/drivers/platform/x86/xo15-ebook.c
@@ -77,11 +77,13 @@ static void ebook_switch_notify(struct acpi_device *device, u32 event)
77 } 77 }
78} 78}
79 79
80static int ebook_switch_resume(struct acpi_device *device) 80static int ebook_switch_resume(struct device *dev)
81{ 81{
82 return ebook_send_state(device); 82 return ebook_send_state(to_acpi_device(dev));
83} 83}
84 84
85static SIMPLE_DEV_PM_OPS(ebook_switch_pm, NULL, ebook_switch_resume);
86
85static int ebook_switch_add(struct acpi_device *device) 87static int ebook_switch_add(struct acpi_device *device)
86{ 88{
87 struct ebook_switch *button; 89 struct ebook_switch *button;
@@ -161,10 +163,10 @@ static struct acpi_driver xo15_ebook_driver = {
161 .ids = ebook_device_ids, 163 .ids = ebook_device_ids,
162 .ops = { 164 .ops = {
163 .add = ebook_switch_add, 165 .add = ebook_switch_add,
164 .resume = ebook_switch_resume,
165 .remove = ebook_switch_remove, 166 .remove = ebook_switch_remove,
166 .notify = ebook_switch_notify, 167 .notify = ebook_switch_notify,
167 }, 168 },
169 .drv.pm = &ebook_switch_pm,
168}; 170};
169 171
170static int __init xo15_ebook_init(void) 172static int __init xo15_ebook_init(void)
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index c86b8864e411..f34c3be6c9fe 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -20,6 +20,7 @@ menuconfig REGULATOR
20 20
21 If unsure, say no. 21 If unsure, say no.
22 22
23
23if REGULATOR 24if REGULATOR
24 25
25config REGULATOR_DEBUG 26config REGULATOR_DEBUG
@@ -88,6 +89,13 @@ config REGULATOR_AAT2870
88 If you have a AnalogicTech AAT2870 say Y to enable the 89 If you have a AnalogicTech AAT2870 say Y to enable the
89 regulator driver. 90 regulator driver.
90 91
92config REGULATOR_ARIZONA
93 tristate "Wolfson Arizona class devices"
94 depends on MFD_ARIZONA
95 help
96 Support for the regulators found on Wolfson Arizona class
97 devices.
98
91config REGULATOR_DA903X 99config REGULATOR_DA903X
92 tristate "Dialog Semiconductor DA9030/DA9034 regulators" 100 tristate "Dialog Semiconductor DA9030/DA9034 regulators"
93 depends on PMIC_DA903X 101 depends on PMIC_DA903X
@@ -195,6 +203,14 @@ config REGULATOR_MAX8998
195 via I2C bus. The provided regulator is suitable for S3C6410 203 via I2C bus. The provided regulator is suitable for S3C6410
196 and S5PC1XX chips to control VCC_CORE and VCC_USIM voltages. 204 and S5PC1XX chips to control VCC_CORE and VCC_USIM voltages.
197 205
206config REGULATOR_MAX77686
207 tristate "Maxim 77686 regulator"
208 depends on MFD_MAX77686
209 help
210 This driver controls a Maxim 77686 regulator
211 via I2C bus. The provided regulator is suitable for
212 Exynos-4 chips to control VARM and VINT voltages.
213
198config REGULATOR_PCAP 214config REGULATOR_PCAP
199 tristate "Motorola PCAP2 regulator driver" 215 tristate "Motorola PCAP2 regulator driver"
200 depends on EZX_PCAP 216 depends on EZX_PCAP
@@ -216,6 +232,19 @@ config REGULATOR_LP3972
216 Say Y here to support the voltage regulators and convertors 232 Say Y here to support the voltage regulators and convertors
217 on National Semiconductors LP3972 PMIC 233 on National Semiconductors LP3972 PMIC
218 234
235config REGULATOR_LP872X
236 bool "TI/National Semiconductor LP8720/LP8725 voltage regulators"
237 depends on I2C=y
238 select REGMAP_I2C
239 help
240 This driver supports LP8720/LP8725 PMIC
241
242config REGULATOR_LP8788
243 bool "TI LP8788 Power Regulators"
244 depends on MFD_LP8788
245 help
246 This driver supports LP8788 voltage regulator chip.
247
219config REGULATOR_PCF50633 248config REGULATOR_PCF50633
220 tristate "NXP PCF50633 regulator driver" 249 tristate "NXP PCF50633 regulator driver"
221 depends on MFD_PCF50633 250 depends on MFD_PCF50633
@@ -233,6 +262,14 @@ config REGULATOR_RC5T583
233 through regulator interface. The device supports multiple DCDC/LDO 262 through regulator interface. The device supports multiple DCDC/LDO
234 outputs which can be controlled by i2c communication. 263 outputs which can be controlled by i2c communication.
235 264
265config REGULATOR_S2MPS11
266 tristate "Samsung S2MPS11 voltage regulator"
267 depends on MFD_SEC_CORE
268 help
269 This driver supports a Samsung S2MPS11 voltage output regulator
270 via I2C bus. S2MPS11 is comprised of high efficient Buck converters
271 including Dual-Phase Buck converter, Buck-Boost converter, various LDOs.
272
236config REGULATOR_S5M8767 273config REGULATOR_S5M8767
237 tristate "Samsung S5M8767A voltage regulator" 274 tristate "Samsung S5M8767A voltage regulator"
238 depends on MFD_S5M_CORE 275 depends on MFD_S5M_CORE
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 977fd46909ab..3342615cf25e 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_REGULATOR_AB3100) += ab3100.o
15obj-$(CONFIG_REGULATOR_AB8500) += ab8500.o 15obj-$(CONFIG_REGULATOR_AB8500) += ab8500.o
16obj-$(CONFIG_REGULATOR_AD5398) += ad5398.o 16obj-$(CONFIG_REGULATOR_AD5398) += ad5398.o
17obj-$(CONFIG_REGULATOR_ANATOP) += anatop-regulator.o 17obj-$(CONFIG_REGULATOR_ANATOP) += anatop-regulator.o
18obj-$(CONFIG_REGULATOR_ARIZONA) += arizona-micsupp.o arizona-ldo1.o
18obj-$(CONFIG_REGULATOR_DA903X) += da903x.o 19obj-$(CONFIG_REGULATOR_DA903X) += da903x.o
19obj-$(CONFIG_REGULATOR_DA9052) += da9052-regulator.o 20obj-$(CONFIG_REGULATOR_DA9052) += da9052-regulator.o
20obj-$(CONFIG_REGULATOR_DBX500_PRCMU) += dbx500-prcmu.o 21obj-$(CONFIG_REGULATOR_DBX500_PRCMU) += dbx500-prcmu.o
@@ -23,6 +24,9 @@ obj-$(CONFIG_REGULATOR_GPIO) += gpio-regulator.o
23obj-$(CONFIG_REGULATOR_ISL6271A) += isl6271a-regulator.o 24obj-$(CONFIG_REGULATOR_ISL6271A) += isl6271a-regulator.o
24obj-$(CONFIG_REGULATOR_LP3971) += lp3971.o 25obj-$(CONFIG_REGULATOR_LP3971) += lp3971.o
25obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o 26obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o
27obj-$(CONFIG_REGULATOR_LP872X) += lp872x.o
28obj-$(CONFIG_REGULATOR_LP8788) += lp8788-buck.o
29obj-$(CONFIG_REGULATOR_LP8788) += lp8788-ldo.o
26obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o 30obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o
27obj-$(CONFIG_REGULATOR_MAX8649) += max8649.o 31obj-$(CONFIG_REGULATOR_MAX8649) += max8649.o
28obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o 32obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o
@@ -30,6 +34,7 @@ obj-$(CONFIG_REGULATOR_MAX8925) += max8925-regulator.o
30obj-$(CONFIG_REGULATOR_MAX8952) += max8952.o 34obj-$(CONFIG_REGULATOR_MAX8952) += max8952.o
31obj-$(CONFIG_REGULATOR_MAX8997) += max8997.o 35obj-$(CONFIG_REGULATOR_MAX8997) += max8997.o
32obj-$(CONFIG_REGULATOR_MAX8998) += max8998.o 36obj-$(CONFIG_REGULATOR_MAX8998) += max8998.o
37obj-$(CONFIG_REGULATOR_MAX77686) += max77686.o
33obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o 38obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o
34obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o 39obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o
35obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o 40obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o
@@ -37,6 +42,7 @@ obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o
37obj-$(CONFIG_REGULATOR_PCAP) += pcap-regulator.o 42obj-$(CONFIG_REGULATOR_PCAP) += pcap-regulator.o
38obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o 43obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o
39obj-$(CONFIG_REGULATOR_RC5T583) += rc5t583-regulator.o 44obj-$(CONFIG_REGULATOR_RC5T583) += rc5t583-regulator.o
45obj-$(CONFIG_REGULATOR_S2MPS11) += s2mps11.o
40obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o 46obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o
41obj-$(CONFIG_REGULATOR_TPS6105X) += tps6105x-regulator.o 47obj-$(CONFIG_REGULATOR_TPS6105X) += tps6105x-regulator.o
42obj-$(CONFIG_REGULATOR_TPS62360) += tps62360-regulator.o 48obj-$(CONFIG_REGULATOR_TPS62360) += tps62360-regulator.o
diff --git a/drivers/regulator/aat2870-regulator.c b/drivers/regulator/aat2870-regulator.c
index 06776ca945f2..6f45bfd22e83 100644
--- a/drivers/regulator/aat2870-regulator.c
+++ b/drivers/regulator/aat2870-regulator.c
@@ -33,11 +33,6 @@ struct aat2870_regulator {
33 struct aat2870_data *aat2870; 33 struct aat2870_data *aat2870;
34 struct regulator_desc desc; 34 struct regulator_desc desc;
35 35
36 const int *voltages; /* uV */
37
38 int min_uV;
39 int max_uV;
40
41 u8 enable_addr; 36 u8 enable_addr;
42 u8 enable_shift; 37 u8 enable_shift;
43 u8 enable_mask; 38 u8 enable_mask;
@@ -47,14 +42,6 @@ struct aat2870_regulator {
47 u8 voltage_mask; 42 u8 voltage_mask;
48}; 43};
49 44
50static int aat2870_ldo_list_voltage(struct regulator_dev *rdev,
51 unsigned selector)
52{
53 struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
54
55 return ri->voltages[selector];
56}
57
58static int aat2870_ldo_set_voltage_sel(struct regulator_dev *rdev, 45static int aat2870_ldo_set_voltage_sel(struct regulator_dev *rdev,
59 unsigned selector) 46 unsigned selector)
60{ 47{
@@ -111,7 +98,7 @@ static int aat2870_ldo_is_enabled(struct regulator_dev *rdev)
111} 98}
112 99
113static struct regulator_ops aat2870_ldo_ops = { 100static struct regulator_ops aat2870_ldo_ops = {
114 .list_voltage = aat2870_ldo_list_voltage, 101 .list_voltage = regulator_list_voltage_table,
115 .set_voltage_sel = aat2870_ldo_set_voltage_sel, 102 .set_voltage_sel = aat2870_ldo_set_voltage_sel,
116 .get_voltage_sel = aat2870_ldo_get_voltage_sel, 103 .get_voltage_sel = aat2870_ldo_get_voltage_sel,
117 .enable = aat2870_ldo_enable, 104 .enable = aat2870_ldo_enable,
@@ -119,7 +106,7 @@ static struct regulator_ops aat2870_ldo_ops = {
119 .is_enabled = aat2870_ldo_is_enabled, 106 .is_enabled = aat2870_ldo_is_enabled,
120}; 107};
121 108
122static const int aat2870_ldo_voltages[] = { 109static const unsigned int aat2870_ldo_voltages[] = {
123 1200000, 1300000, 1500000, 1600000, 110 1200000, 1300000, 1500000, 1600000,
124 1800000, 2000000, 2200000, 2500000, 111 1800000, 2000000, 2200000, 2500000,
125 2600000, 2700000, 2800000, 2900000, 112 2600000, 2700000, 2800000, 2900000,
@@ -132,13 +119,11 @@ static const int aat2870_ldo_voltages[] = {
132 .name = #ids, \ 119 .name = #ids, \
133 .id = AAT2870_ID_##ids, \ 120 .id = AAT2870_ID_##ids, \
134 .n_voltages = ARRAY_SIZE(aat2870_ldo_voltages), \ 121 .n_voltages = ARRAY_SIZE(aat2870_ldo_voltages), \
122 .volt_table = aat2870_ldo_voltages, \
135 .ops = &aat2870_ldo_ops, \ 123 .ops = &aat2870_ldo_ops, \
136 .type = REGULATOR_VOLTAGE, \ 124 .type = REGULATOR_VOLTAGE, \
137 .owner = THIS_MODULE, \ 125 .owner = THIS_MODULE, \
138 }, \ 126 }, \
139 .voltages = aat2870_ldo_voltages, \
140 .min_uV = 1200000, \
141 .max_uV = 3300000, \
142 } 127 }
143 128
144static struct aat2870_regulator aat2870_regulators[] = { 129static struct aat2870_regulator aat2870_regulators[] = {
diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c
index 03f4d9c604ec..182b553059c9 100644
--- a/drivers/regulator/ab3100.c
+++ b/drivers/regulator/ab3100.c
@@ -43,20 +43,12 @@
43 * @dev: handle to the device 43 * @dev: handle to the device
44 * @plfdata: AB3100 platform data passed in at probe time 44 * @plfdata: AB3100 platform data passed in at probe time
45 * @regreg: regulator register number in the AB3100 45 * @regreg: regulator register number in the AB3100
46 * @fixed_voltage: a fixed voltage for this regulator, if this
47 * 0 the voltages array is used instead.
48 * @typ_voltages: an array of available typical voltages for
49 * this regulator
50 * @voltages_len: length of the array of available voltages
51 */ 46 */
52struct ab3100_regulator { 47struct ab3100_regulator {
53 struct regulator_dev *rdev; 48 struct regulator_dev *rdev;
54 struct device *dev; 49 struct device *dev;
55 struct ab3100_platform_data *plfdata; 50 struct ab3100_platform_data *plfdata;
56 u8 regreg; 51 u8 regreg;
57 int fixed_voltage;
58 int const *typ_voltages;
59 u8 voltages_len;
60}; 52};
61 53
62/* The order in which registers are initialized */ 54/* The order in which registers are initialized */
@@ -80,7 +72,7 @@ static const u8 ab3100_reg_init_order[AB3100_NUM_REGULATORS+2] = {
80#define LDO_C_VOLTAGE 2650000 72#define LDO_C_VOLTAGE 2650000
81#define LDO_D_VOLTAGE 2650000 73#define LDO_D_VOLTAGE 2650000
82 74
83static const int ldo_e_buck_typ_voltages[] = { 75static const unsigned int ldo_e_buck_typ_voltages[] = {
84 1800000, 76 1800000,
85 1400000, 77 1400000,
86 1300000, 78 1300000,
@@ -90,7 +82,7 @@ static const int ldo_e_buck_typ_voltages[] = {
90 900000, 82 900000,
91}; 83};
92 84
93static const int ldo_f_typ_voltages[] = { 85static const unsigned int ldo_f_typ_voltages[] = {
94 1800000, 86 1800000,
95 1400000, 87 1400000,
96 1300000, 88 1300000,
@@ -101,21 +93,21 @@ static const int ldo_f_typ_voltages[] = {
101 2650000, 93 2650000,
102}; 94};
103 95
104static const int ldo_g_typ_voltages[] = { 96static const unsigned int ldo_g_typ_voltages[] = {
105 2850000, 97 2850000,
106 2750000, 98 2750000,
107 1800000, 99 1800000,
108 1500000, 100 1500000,
109}; 101};
110 102
111static const int ldo_h_typ_voltages[] = { 103static const unsigned int ldo_h_typ_voltages[] = {
112 2750000, 104 2750000,
113 1800000, 105 1800000,
114 1500000, 106 1500000,
115 1200000, 107 1200000,
116}; 108};
117 109
118static const int ldo_k_typ_voltages[] = { 110static const unsigned int ldo_k_typ_voltages[] = {
119 2750000, 111 2750000,
120 1800000, 112 1800000,
121}; 113};
@@ -126,40 +118,27 @@ static struct ab3100_regulator
126ab3100_regulators[AB3100_NUM_REGULATORS] = { 118ab3100_regulators[AB3100_NUM_REGULATORS] = {
127 { 119 {
128 .regreg = AB3100_LDO_A, 120 .regreg = AB3100_LDO_A,
129 .fixed_voltage = LDO_A_VOLTAGE,
130 }, 121 },
131 { 122 {
132 .regreg = AB3100_LDO_C, 123 .regreg = AB3100_LDO_C,
133 .fixed_voltage = LDO_C_VOLTAGE,
134 }, 124 },
135 { 125 {
136 .regreg = AB3100_LDO_D, 126 .regreg = AB3100_LDO_D,
137 .fixed_voltage = LDO_D_VOLTAGE,
138 }, 127 },
139 { 128 {
140 .regreg = AB3100_LDO_E, 129 .regreg = AB3100_LDO_E,
141 .typ_voltages = ldo_e_buck_typ_voltages,
142 .voltages_len = ARRAY_SIZE(ldo_e_buck_typ_voltages),
143 }, 130 },
144 { 131 {
145 .regreg = AB3100_LDO_F, 132 .regreg = AB3100_LDO_F,
146 .typ_voltages = ldo_f_typ_voltages,
147 .voltages_len = ARRAY_SIZE(ldo_f_typ_voltages),
148 }, 133 },
149 { 134 {
150 .regreg = AB3100_LDO_G, 135 .regreg = AB3100_LDO_G,
151 .typ_voltages = ldo_g_typ_voltages,
152 .voltages_len = ARRAY_SIZE(ldo_g_typ_voltages),
153 }, 136 },
154 { 137 {
155 .regreg = AB3100_LDO_H, 138 .regreg = AB3100_LDO_H,
156 .typ_voltages = ldo_h_typ_voltages,
157 .voltages_len = ARRAY_SIZE(ldo_h_typ_voltages),
158 }, 139 },
159 { 140 {
160 .regreg = AB3100_LDO_K, 141 .regreg = AB3100_LDO_K,
161 .typ_voltages = ldo_k_typ_voltages,
162 .voltages_len = ARRAY_SIZE(ldo_k_typ_voltages),
163 }, 142 },
164 { 143 {
165 .regreg = AB3100_LDO_EXT, 144 .regreg = AB3100_LDO_EXT,
@@ -167,8 +146,6 @@ ab3100_regulators[AB3100_NUM_REGULATORS] = {
167 }, 146 },
168 { 147 {
169 .regreg = AB3100_BUCK, 148 .regreg = AB3100_BUCK,
170 .typ_voltages = ldo_e_buck_typ_voltages,
171 .voltages_len = ARRAY_SIZE(ldo_e_buck_typ_voltages),
172 }, 149 },
173}; 150};
174 151
@@ -178,7 +155,7 @@ ab3100_regulators[AB3100_NUM_REGULATORS] = {
178 */ 155 */
179static int ab3100_enable_regulator(struct regulator_dev *reg) 156static int ab3100_enable_regulator(struct regulator_dev *reg)
180{ 157{
181 struct ab3100_regulator *abreg = reg->reg_data; 158 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
182 int err; 159 int err;
183 u8 regval; 160 u8 regval;
184 161
@@ -209,7 +186,7 @@ static int ab3100_enable_regulator(struct regulator_dev *reg)
209 186
210static int ab3100_disable_regulator(struct regulator_dev *reg) 187static int ab3100_disable_regulator(struct regulator_dev *reg)
211{ 188{
212 struct ab3100_regulator *abreg = reg->reg_data; 189 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
213 int err; 190 int err;
214 u8 regval; 191 u8 regval;
215 192
@@ -242,7 +219,7 @@ static int ab3100_disable_regulator(struct regulator_dev *reg)
242 219
243static int ab3100_is_enabled_regulator(struct regulator_dev *reg) 220static int ab3100_is_enabled_regulator(struct regulator_dev *reg)
244{ 221{
245 struct ab3100_regulator *abreg = reg->reg_data; 222 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
246 u8 regval; 223 u8 regval;
247 int err; 224 int err;
248 225
@@ -257,26 +234,12 @@ static int ab3100_is_enabled_regulator(struct regulator_dev *reg)
257 return regval & AB3100_REG_ON_MASK; 234 return regval & AB3100_REG_ON_MASK;
258} 235}
259 236
260static int ab3100_list_voltage_regulator(struct regulator_dev *reg,
261 unsigned selector)
262{
263 struct ab3100_regulator *abreg = reg->reg_data;
264
265 if (selector >= abreg->voltages_len)
266 return -EINVAL;
267 return abreg->typ_voltages[selector];
268}
269
270static int ab3100_get_voltage_regulator(struct regulator_dev *reg) 237static int ab3100_get_voltage_regulator(struct regulator_dev *reg)
271{ 238{
272 struct ab3100_regulator *abreg = reg->reg_data; 239 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
273 u8 regval; 240 u8 regval;
274 int err; 241 int err;
275 242
276 /* Return the voltage for fixed regulators immediately */
277 if (abreg->fixed_voltage)
278 return abreg->fixed_voltage;
279
280 /* 243 /*
281 * For variable types, read out setting and index into 244 * For variable types, read out setting and index into
282 * supplied voltage list. 245 * supplied voltage list.
@@ -294,20 +257,20 @@ static int ab3100_get_voltage_regulator(struct regulator_dev *reg)
294 regval &= 0xE0; 257 regval &= 0xE0;
295 regval >>= 5; 258 regval >>= 5;
296 259
297 if (regval >= abreg->voltages_len) { 260 if (regval >= reg->desc->n_voltages) {
298 dev_err(&reg->dev, 261 dev_err(&reg->dev,
299 "regulator register %02x contains an illegal voltage setting\n", 262 "regulator register %02x contains an illegal voltage setting\n",
300 abreg->regreg); 263 abreg->regreg);
301 return -EINVAL; 264 return -EINVAL;
302 } 265 }
303 266
304 return abreg->typ_voltages[regval]; 267 return reg->desc->volt_table[regval];
305} 268}
306 269
307static int ab3100_set_voltage_regulator_sel(struct regulator_dev *reg, 270static int ab3100_set_voltage_regulator_sel(struct regulator_dev *reg,
308 unsigned selector) 271 unsigned selector)
309{ 272{
310 struct ab3100_regulator *abreg = reg->reg_data; 273 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
311 u8 regval; 274 u8 regval;
312 int err; 275 int err;
313 276
@@ -336,7 +299,7 @@ static int ab3100_set_voltage_regulator_sel(struct regulator_dev *reg,
336static int ab3100_set_suspend_voltage_regulator(struct regulator_dev *reg, 299static int ab3100_set_suspend_voltage_regulator(struct regulator_dev *reg,
337 int uV) 300 int uV)
338{ 301{
339 struct ab3100_regulator *abreg = reg->reg_data; 302 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
340 u8 regval; 303 u8 regval;
341 int err; 304 int err;
342 int bestindex; 305 int bestindex;
@@ -379,42 +342,22 @@ static int ab3100_set_suspend_voltage_regulator(struct regulator_dev *reg,
379 */ 342 */
380static int ab3100_get_voltage_regulator_external(struct regulator_dev *reg) 343static int ab3100_get_voltage_regulator_external(struct regulator_dev *reg)
381{ 344{
382 struct ab3100_regulator *abreg = reg->reg_data; 345 struct ab3100_regulator *abreg = rdev_get_drvdata(reg);
383 346
384 return abreg->plfdata->external_voltage; 347 return abreg->plfdata->external_voltage;
385} 348}
386 349
387static int ab3100_enable_time_regulator(struct regulator_dev *reg) 350static int ab3100_get_fixed_voltage_regulator(struct regulator_dev *reg)
388{ 351{
389 struct ab3100_regulator *abreg = reg->reg_data; 352 return reg->desc->min_uV;
390
391 /* Per-regulator power on delay from spec */
392 switch (abreg->regreg) {
393 case AB3100_LDO_A: /* Fallthrough */
394 case AB3100_LDO_C: /* Fallthrough */
395 case AB3100_LDO_D: /* Fallthrough */
396 case AB3100_LDO_E: /* Fallthrough */
397 case AB3100_LDO_H: /* Fallthrough */
398 case AB3100_LDO_K:
399 return 200;
400 case AB3100_LDO_F:
401 return 600;
402 case AB3100_LDO_G:
403 return 400;
404 case AB3100_BUCK:
405 return 1000;
406 default:
407 break;
408 }
409 return 0;
410} 353}
411 354
412static struct regulator_ops regulator_ops_fixed = { 355static struct regulator_ops regulator_ops_fixed = {
356 .list_voltage = regulator_list_voltage_linear,
413 .enable = ab3100_enable_regulator, 357 .enable = ab3100_enable_regulator,
414 .disable = ab3100_disable_regulator, 358 .disable = ab3100_disable_regulator,
415 .is_enabled = ab3100_is_enabled_regulator, 359 .is_enabled = ab3100_is_enabled_regulator,
416 .get_voltage = ab3100_get_voltage_regulator, 360 .get_voltage = ab3100_get_fixed_voltage_regulator,
417 .enable_time = ab3100_enable_time_regulator,
418}; 361};
419 362
420static struct regulator_ops regulator_ops_variable = { 363static struct regulator_ops regulator_ops_variable = {
@@ -423,8 +366,7 @@ static struct regulator_ops regulator_ops_variable = {
423 .is_enabled = ab3100_is_enabled_regulator, 366 .is_enabled = ab3100_is_enabled_regulator,
424 .get_voltage = ab3100_get_voltage_regulator, 367 .get_voltage = ab3100_get_voltage_regulator,
425 .set_voltage_sel = ab3100_set_voltage_regulator_sel, 368 .set_voltage_sel = ab3100_set_voltage_regulator_sel,
426 .list_voltage = ab3100_list_voltage_regulator, 369 .list_voltage = regulator_list_voltage_table,
427 .enable_time = ab3100_enable_time_regulator,
428}; 370};
429 371
430static struct regulator_ops regulator_ops_variable_sleepable = { 372static struct regulator_ops regulator_ops_variable_sleepable = {
@@ -434,8 +376,7 @@ static struct regulator_ops regulator_ops_variable_sleepable = {
434 .get_voltage = ab3100_get_voltage_regulator, 376 .get_voltage = ab3100_get_voltage_regulator,
435 .set_voltage_sel = ab3100_set_voltage_regulator_sel, 377 .set_voltage_sel = ab3100_set_voltage_regulator_sel,
436 .set_suspend_voltage = ab3100_set_suspend_voltage_regulator, 378 .set_suspend_voltage = ab3100_set_suspend_voltage_regulator,
437 .list_voltage = ab3100_list_voltage_regulator, 379 .list_voltage = regulator_list_voltage_table,
438 .enable_time = ab3100_enable_time_regulator,
439}; 380};
440 381
441/* 382/*
@@ -457,62 +398,81 @@ ab3100_regulator_desc[AB3100_NUM_REGULATORS] = {
457 .name = "LDO_A", 398 .name = "LDO_A",
458 .id = AB3100_LDO_A, 399 .id = AB3100_LDO_A,
459 .ops = &regulator_ops_fixed, 400 .ops = &regulator_ops_fixed,
401 .n_voltages = 1,
460 .type = REGULATOR_VOLTAGE, 402 .type = REGULATOR_VOLTAGE,
461 .owner = THIS_MODULE, 403 .owner = THIS_MODULE,
404 .min_uV = LDO_A_VOLTAGE,
405 .enable_time = 200,
462 }, 406 },
463 { 407 {
464 .name = "LDO_C", 408 .name = "LDO_C",
465 .id = AB3100_LDO_C, 409 .id = AB3100_LDO_C,
466 .ops = &regulator_ops_fixed, 410 .ops = &regulator_ops_fixed,
411 .n_voltages = 1,
467 .type = REGULATOR_VOLTAGE, 412 .type = REGULATOR_VOLTAGE,
468 .owner = THIS_MODULE, 413 .owner = THIS_MODULE,
414 .min_uV = LDO_C_VOLTAGE,
415 .enable_time = 200,
469 }, 416 },
470 { 417 {
471 .name = "LDO_D", 418 .name = "LDO_D",
472 .id = AB3100_LDO_D, 419 .id = AB3100_LDO_D,
473 .ops = &regulator_ops_fixed, 420 .ops = &regulator_ops_fixed,
421 .n_voltages = 1,
474 .type = REGULATOR_VOLTAGE, 422 .type = REGULATOR_VOLTAGE,
475 .owner = THIS_MODULE, 423 .owner = THIS_MODULE,
424 .min_uV = LDO_D_VOLTAGE,
425 .enable_time = 200,
476 }, 426 },
477 { 427 {
478 .name = "LDO_E", 428 .name = "LDO_E",
479 .id = AB3100_LDO_E, 429 .id = AB3100_LDO_E,
480 .ops = &regulator_ops_variable_sleepable, 430 .ops = &regulator_ops_variable_sleepable,
481 .n_voltages = ARRAY_SIZE(ldo_e_buck_typ_voltages), 431 .n_voltages = ARRAY_SIZE(ldo_e_buck_typ_voltages),
432 .volt_table = ldo_e_buck_typ_voltages,
482 .type = REGULATOR_VOLTAGE, 433 .type = REGULATOR_VOLTAGE,
483 .owner = THIS_MODULE, 434 .owner = THIS_MODULE,
435 .enable_time = 200,
484 }, 436 },
485 { 437 {
486 .name = "LDO_F", 438 .name = "LDO_F",
487 .id = AB3100_LDO_F, 439 .id = AB3100_LDO_F,
488 .ops = &regulator_ops_variable, 440 .ops = &regulator_ops_variable,
489 .n_voltages = ARRAY_SIZE(ldo_f_typ_voltages), 441 .n_voltages = ARRAY_SIZE(ldo_f_typ_voltages),
442 .volt_table = ldo_f_typ_voltages,
490 .type = REGULATOR_VOLTAGE, 443 .type = REGULATOR_VOLTAGE,
491 .owner = THIS_MODULE, 444 .owner = THIS_MODULE,
445 .enable_time = 600,
492 }, 446 },
493 { 447 {
494 .name = "LDO_G", 448 .name = "LDO_G",
495 .id = AB3100_LDO_G, 449 .id = AB3100_LDO_G,
496 .ops = &regulator_ops_variable, 450 .ops = &regulator_ops_variable,
497 .n_voltages = ARRAY_SIZE(ldo_g_typ_voltages), 451 .n_voltages = ARRAY_SIZE(ldo_g_typ_voltages),
452 .volt_table = ldo_g_typ_voltages,
498 .type = REGULATOR_VOLTAGE, 453 .type = REGULATOR_VOLTAGE,
499 .owner = THIS_MODULE, 454 .owner = THIS_MODULE,
455 .enable_time = 400,
500 }, 456 },
501 { 457 {
502 .name = "LDO_H", 458 .name = "LDO_H",
503 .id = AB3100_LDO_H, 459 .id = AB3100_LDO_H,
504 .ops = &regulator_ops_variable, 460 .ops = &regulator_ops_variable,
505 .n_voltages = ARRAY_SIZE(ldo_h_typ_voltages), 461 .n_voltages = ARRAY_SIZE(ldo_h_typ_voltages),
462 .volt_table = ldo_h_typ_voltages,
506 .type = REGULATOR_VOLTAGE, 463 .type = REGULATOR_VOLTAGE,
507 .owner = THIS_MODULE, 464 .owner = THIS_MODULE,
465 .enable_time = 200,
508 }, 466 },
509 { 467 {
510 .name = "LDO_K", 468 .name = "LDO_K",
511 .id = AB3100_LDO_K, 469 .id = AB3100_LDO_K,
512 .ops = &regulator_ops_variable, 470 .ops = &regulator_ops_variable,
513 .n_voltages = ARRAY_SIZE(ldo_k_typ_voltages), 471 .n_voltages = ARRAY_SIZE(ldo_k_typ_voltages),
472 .volt_table = ldo_k_typ_voltages,
514 .type = REGULATOR_VOLTAGE, 473 .type = REGULATOR_VOLTAGE,
515 .owner = THIS_MODULE, 474 .owner = THIS_MODULE,
475 .enable_time = 200,
516 }, 476 },
517 { 477 {
518 .name = "LDO_EXT", 478 .name = "LDO_EXT",
@@ -528,6 +488,7 @@ ab3100_regulator_desc[AB3100_NUM_REGULATORS] = {
528 .n_voltages = ARRAY_SIZE(ldo_e_buck_typ_voltages), 488 .n_voltages = ARRAY_SIZE(ldo_e_buck_typ_voltages),
529 .type = REGULATOR_VOLTAGE, 489 .type = REGULATOR_VOLTAGE,
530 .owner = THIS_MODULE, 490 .owner = THIS_MODULE,
491 .enable_time = 1000,
531 }, 492 },
532}; 493};
533 494
diff --git a/drivers/regulator/ab8500.c b/drivers/regulator/ab8500.c
index a739f5ca936a..13d424fc1c14 100644
--- a/drivers/regulator/ab8500.c
+++ b/drivers/regulator/ab8500.c
@@ -30,9 +30,6 @@
30 * @dev: device pointer 30 * @dev: device pointer
31 * @desc: regulator description 31 * @desc: regulator description
32 * @regulator_dev: regulator device 32 * @regulator_dev: regulator device
33 * @max_uV: maximum voltage (for variable voltage supplies)
34 * @min_uV: minimum voltage (for variable voltage supplies)
35 * @fixed_uV: typical voltage (for fixed voltage supplies)
36 * @update_bank: bank to control on/off 33 * @update_bank: bank to control on/off
37 * @update_reg: register to control on/off 34 * @update_reg: register to control on/off
38 * @update_mask: mask to enable/disable regulator 35 * @update_mask: mask to enable/disable regulator
@@ -40,17 +37,12 @@
40 * @voltage_bank: bank to control regulator voltage 37 * @voltage_bank: bank to control regulator voltage
41 * @voltage_reg: register to control regulator voltage 38 * @voltage_reg: register to control regulator voltage
42 * @voltage_mask: mask to control regulator voltage 39 * @voltage_mask: mask to control regulator voltage
43 * @voltages: supported voltage table
44 * @voltages_len: number of supported voltages for the regulator
45 * @delay: startup/set voltage delay in us 40 * @delay: startup/set voltage delay in us
46 */ 41 */
47struct ab8500_regulator_info { 42struct ab8500_regulator_info {
48 struct device *dev; 43 struct device *dev;
49 struct regulator_desc desc; 44 struct regulator_desc desc;
50 struct regulator_dev *regulator; 45 struct regulator_dev *regulator;
51 int max_uV;
52 int min_uV;
53 int fixed_uV;
54 u8 update_bank; 46 u8 update_bank;
55 u8 update_reg; 47 u8 update_reg;
56 u8 update_mask; 48 u8 update_mask;
@@ -58,13 +50,11 @@ struct ab8500_regulator_info {
58 u8 voltage_bank; 50 u8 voltage_bank;
59 u8 voltage_reg; 51 u8 voltage_reg;
60 u8 voltage_mask; 52 u8 voltage_mask;
61 int const *voltages;
62 int voltages_len;
63 unsigned int delay; 53 unsigned int delay;
64}; 54};
65 55
66/* voltage tables for the vauxn/vintcore supplies */ 56/* voltage tables for the vauxn/vintcore supplies */
67static const int ldo_vauxn_voltages[] = { 57static const unsigned int ldo_vauxn_voltages[] = {
68 1100000, 58 1100000,
69 1200000, 59 1200000,
70 1300000, 60 1300000,
@@ -83,7 +73,7 @@ static const int ldo_vauxn_voltages[] = {
83 3300000, 73 3300000,
84}; 74};
85 75
86static const int ldo_vaux3_voltages[] = { 76static const unsigned int ldo_vaux3_voltages[] = {
87 1200000, 77 1200000,
88 1500000, 78 1500000,
89 1800000, 79 1800000,
@@ -94,7 +84,7 @@ static const int ldo_vaux3_voltages[] = {
94 2910000, 84 2910000,
95}; 85};
96 86
97static const int ldo_vintcore_voltages[] = { 87static const unsigned int ldo_vintcore_voltages[] = {
98 1200000, 88 1200000,
99 1225000, 89 1225000,
100 1250000, 90 1250000,
@@ -185,25 +175,6 @@ static int ab8500_regulator_is_enabled(struct regulator_dev *rdev)
185 return false; 175 return false;
186} 176}
187 177
188static int ab8500_list_voltage(struct regulator_dev *rdev, unsigned selector)
189{
190 struct ab8500_regulator_info *info = rdev_get_drvdata(rdev);
191
192 if (info == NULL) {
193 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n");
194 return -EINVAL;
195 }
196
197 /* return the uV for the fixed regulators */
198 if (info->fixed_uV)
199 return info->fixed_uV;
200
201 if (selector >= info->voltages_len)
202 return -EINVAL;
203
204 return info->voltages[selector];
205}
206
207static int ab8500_regulator_get_voltage_sel(struct regulator_dev *rdev) 178static int ab8500_regulator_get_voltage_sel(struct regulator_dev *rdev)
208{ 179{
209 int ret, val; 180 int ret, val;
@@ -279,14 +250,7 @@ static int ab8500_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
279 unsigned int new_sel) 250 unsigned int new_sel)
280{ 251{
281 struct ab8500_regulator_info *info = rdev_get_drvdata(rdev); 252 struct ab8500_regulator_info *info = rdev_get_drvdata(rdev);
282 int ret;
283 253
284 /* If the regulator isn't on, it won't take time here */
285 ret = ab8500_regulator_is_enabled(rdev);
286 if (ret < 0)
287 return ret;
288 if (!ret)
289 return 0;
290 return info->delay; 254 return info->delay;
291} 255}
292 256
@@ -296,21 +260,14 @@ static struct regulator_ops ab8500_regulator_ops = {
296 .is_enabled = ab8500_regulator_is_enabled, 260 .is_enabled = ab8500_regulator_is_enabled,
297 .get_voltage_sel = ab8500_regulator_get_voltage_sel, 261 .get_voltage_sel = ab8500_regulator_get_voltage_sel,
298 .set_voltage_sel = ab8500_regulator_set_voltage_sel, 262 .set_voltage_sel = ab8500_regulator_set_voltage_sel,
299 .list_voltage = ab8500_list_voltage, 263 .list_voltage = regulator_list_voltage_table,
300 .enable_time = ab8500_regulator_enable_time, 264 .enable_time = ab8500_regulator_enable_time,
301 .set_voltage_time_sel = ab8500_regulator_set_voltage_time_sel, 265 .set_voltage_time_sel = ab8500_regulator_set_voltage_time_sel,
302}; 266};
303 267
304static int ab8500_fixed_get_voltage(struct regulator_dev *rdev) 268static int ab8500_fixed_get_voltage(struct regulator_dev *rdev)
305{ 269{
306 struct ab8500_regulator_info *info = rdev_get_drvdata(rdev); 270 return rdev->desc->min_uV;
307
308 if (info == NULL) {
309 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n");
310 return -EINVAL;
311 }
312
313 return info->fixed_uV;
314} 271}
315 272
316static struct regulator_ops ab8500_regulator_fixed_ops = { 273static struct regulator_ops ab8500_regulator_fixed_ops = {
@@ -318,9 +275,8 @@ static struct regulator_ops ab8500_regulator_fixed_ops = {
318 .disable = ab8500_regulator_disable, 275 .disable = ab8500_regulator_disable,
319 .is_enabled = ab8500_regulator_is_enabled, 276 .is_enabled = ab8500_regulator_is_enabled,
320 .get_voltage = ab8500_fixed_get_voltage, 277 .get_voltage = ab8500_fixed_get_voltage,
321 .list_voltage = ab8500_list_voltage, 278 .list_voltage = regulator_list_voltage_linear,
322 .enable_time = ab8500_regulator_enable_time, 279 .enable_time = ab8500_regulator_enable_time,
323 .set_voltage_time_sel = ab8500_regulator_set_voltage_time_sel,
324}; 280};
325 281
326static struct ab8500_regulator_info 282static struct ab8500_regulator_info
@@ -329,7 +285,7 @@ static struct ab8500_regulator_info
329 * Variable Voltage Regulators 285 * Variable Voltage Regulators
330 * name, min mV, max mV, 286 * name, min mV, max mV,
331 * update bank, reg, mask, enable val 287 * update bank, reg, mask, enable val
332 * volt bank, reg, mask, table, table length 288 * volt bank, reg, mask
333 */ 289 */
334 [AB8500_LDO_AUX1] = { 290 [AB8500_LDO_AUX1] = {
335 .desc = { 291 .desc = {
@@ -339,9 +295,8 @@ static struct ab8500_regulator_info
339 .id = AB8500_LDO_AUX1, 295 .id = AB8500_LDO_AUX1,
340 .owner = THIS_MODULE, 296 .owner = THIS_MODULE,
341 .n_voltages = ARRAY_SIZE(ldo_vauxn_voltages), 297 .n_voltages = ARRAY_SIZE(ldo_vauxn_voltages),
298 .volt_table = ldo_vauxn_voltages,
342 }, 299 },
343 .min_uV = 1100000,
344 .max_uV = 3300000,
345 .update_bank = 0x04, 300 .update_bank = 0x04,
346 .update_reg = 0x09, 301 .update_reg = 0x09,
347 .update_mask = 0x03, 302 .update_mask = 0x03,
@@ -349,8 +304,6 @@ static struct ab8500_regulator_info
349 .voltage_bank = 0x04, 304 .voltage_bank = 0x04,
350 .voltage_reg = 0x1f, 305 .voltage_reg = 0x1f,
351 .voltage_mask = 0x0f, 306 .voltage_mask = 0x0f,
352 .voltages = ldo_vauxn_voltages,
353 .voltages_len = ARRAY_SIZE(ldo_vauxn_voltages),
354 }, 307 },
355 [AB8500_LDO_AUX2] = { 308 [AB8500_LDO_AUX2] = {
356 .desc = { 309 .desc = {
@@ -360,9 +313,8 @@ static struct ab8500_regulator_info
360 .id = AB8500_LDO_AUX2, 313 .id = AB8500_LDO_AUX2,
361 .owner = THIS_MODULE, 314 .owner = THIS_MODULE,
362 .n_voltages = ARRAY_SIZE(ldo_vauxn_voltages), 315 .n_voltages = ARRAY_SIZE(ldo_vauxn_voltages),
316 .volt_table = ldo_vauxn_voltages,
363 }, 317 },
364 .min_uV = 1100000,
365 .max_uV = 3300000,
366 .update_bank = 0x04, 318 .update_bank = 0x04,
367 .update_reg = 0x09, 319 .update_reg = 0x09,
368 .update_mask = 0x0c, 320 .update_mask = 0x0c,
@@ -370,8 +322,6 @@ static struct ab8500_regulator_info
370 .voltage_bank = 0x04, 322 .voltage_bank = 0x04,
371 .voltage_reg = 0x20, 323 .voltage_reg = 0x20,
372 .voltage_mask = 0x0f, 324 .voltage_mask = 0x0f,
373 .voltages = ldo_vauxn_voltages,
374 .voltages_len = ARRAY_SIZE(ldo_vauxn_voltages),
375 }, 325 },
376 [AB8500_LDO_AUX3] = { 326 [AB8500_LDO_AUX3] = {
377 .desc = { 327 .desc = {
@@ -381,9 +331,8 @@ static struct ab8500_regulator_info
381 .id = AB8500_LDO_AUX3, 331 .id = AB8500_LDO_AUX3,
382 .owner = THIS_MODULE, 332 .owner = THIS_MODULE,
383 .n_voltages = ARRAY_SIZE(ldo_vaux3_voltages), 333 .n_voltages = ARRAY_SIZE(ldo_vaux3_voltages),
334 .volt_table = ldo_vaux3_voltages,
384 }, 335 },
385 .min_uV = 1100000,
386 .max_uV = 3300000,
387 .update_bank = 0x04, 336 .update_bank = 0x04,
388 .update_reg = 0x0a, 337 .update_reg = 0x0a,
389 .update_mask = 0x03, 338 .update_mask = 0x03,
@@ -391,8 +340,6 @@ static struct ab8500_regulator_info
391 .voltage_bank = 0x04, 340 .voltage_bank = 0x04,
392 .voltage_reg = 0x21, 341 .voltage_reg = 0x21,
393 .voltage_mask = 0x07, 342 .voltage_mask = 0x07,
394 .voltages = ldo_vaux3_voltages,
395 .voltages_len = ARRAY_SIZE(ldo_vaux3_voltages),
396 }, 343 },
397 [AB8500_LDO_INTCORE] = { 344 [AB8500_LDO_INTCORE] = {
398 .desc = { 345 .desc = {
@@ -402,9 +349,8 @@ static struct ab8500_regulator_info
402 .id = AB8500_LDO_INTCORE, 349 .id = AB8500_LDO_INTCORE,
403 .owner = THIS_MODULE, 350 .owner = THIS_MODULE,
404 .n_voltages = ARRAY_SIZE(ldo_vintcore_voltages), 351 .n_voltages = ARRAY_SIZE(ldo_vintcore_voltages),
352 .volt_table = ldo_vintcore_voltages,
405 }, 353 },
406 .min_uV = 1100000,
407 .max_uV = 3300000,
408 .update_bank = 0x03, 354 .update_bank = 0x03,
409 .update_reg = 0x80, 355 .update_reg = 0x80,
410 .update_mask = 0x44, 356 .update_mask = 0x44,
@@ -412,8 +358,6 @@ static struct ab8500_regulator_info
412 .voltage_bank = 0x03, 358 .voltage_bank = 0x03,
413 .voltage_reg = 0x80, 359 .voltage_reg = 0x80,
414 .voltage_mask = 0x38, 360 .voltage_mask = 0x38,
415 .voltages = ldo_vintcore_voltages,
416 .voltages_len = ARRAY_SIZE(ldo_vintcore_voltages),
417 }, 361 },
418 362
419 /* 363 /*
@@ -429,9 +373,9 @@ static struct ab8500_regulator_info
429 .id = AB8500_LDO_TVOUT, 373 .id = AB8500_LDO_TVOUT,
430 .owner = THIS_MODULE, 374 .owner = THIS_MODULE,
431 .n_voltages = 1, 375 .n_voltages = 1,
376 .min_uV = 2000000,
432 }, 377 },
433 .delay = 10000, 378 .delay = 10000,
434 .fixed_uV = 2000000,
435 .update_bank = 0x03, 379 .update_bank = 0x03,
436 .update_reg = 0x80, 380 .update_reg = 0x80,
437 .update_mask = 0x82, 381 .update_mask = 0x82,
@@ -445,8 +389,8 @@ static struct ab8500_regulator_info
445 .id = AB8500_LDO_USB, 389 .id = AB8500_LDO_USB,
446 .owner = THIS_MODULE, 390 .owner = THIS_MODULE,
447 .n_voltages = 1, 391 .n_voltages = 1,
392 .min_uV = 3300000,
448 }, 393 },
449 .fixed_uV = 3300000,
450 .update_bank = 0x03, 394 .update_bank = 0x03,
451 .update_reg = 0x82, 395 .update_reg = 0x82,
452 .update_mask = 0x03, 396 .update_mask = 0x03,
@@ -460,8 +404,8 @@ static struct ab8500_regulator_info
460 .id = AB8500_LDO_AUDIO, 404 .id = AB8500_LDO_AUDIO,
461 .owner = THIS_MODULE, 405 .owner = THIS_MODULE,
462 .n_voltages = 1, 406 .n_voltages = 1,
407 .min_uV = 2000000,
463 }, 408 },
464 .fixed_uV = 2000000,
465 .update_bank = 0x03, 409 .update_bank = 0x03,
466 .update_reg = 0x83, 410 .update_reg = 0x83,
467 .update_mask = 0x02, 411 .update_mask = 0x02,
@@ -475,8 +419,8 @@ static struct ab8500_regulator_info
475 .id = AB8500_LDO_ANAMIC1, 419 .id = AB8500_LDO_ANAMIC1,
476 .owner = THIS_MODULE, 420 .owner = THIS_MODULE,
477 .n_voltages = 1, 421 .n_voltages = 1,
422 .min_uV = 2050000,
478 }, 423 },
479 .fixed_uV = 2050000,
480 .update_bank = 0x03, 424 .update_bank = 0x03,
481 .update_reg = 0x83, 425 .update_reg = 0x83,
482 .update_mask = 0x08, 426 .update_mask = 0x08,
@@ -490,8 +434,8 @@ static struct ab8500_regulator_info
490 .id = AB8500_LDO_ANAMIC2, 434 .id = AB8500_LDO_ANAMIC2,
491 .owner = THIS_MODULE, 435 .owner = THIS_MODULE,
492 .n_voltages = 1, 436 .n_voltages = 1,
437 .min_uV = 2050000,
493 }, 438 },
494 .fixed_uV = 2050000,
495 .update_bank = 0x03, 439 .update_bank = 0x03,
496 .update_reg = 0x83, 440 .update_reg = 0x83,
497 .update_mask = 0x10, 441 .update_mask = 0x10,
@@ -505,8 +449,8 @@ static struct ab8500_regulator_info
505 .id = AB8500_LDO_DMIC, 449 .id = AB8500_LDO_DMIC,
506 .owner = THIS_MODULE, 450 .owner = THIS_MODULE,
507 .n_voltages = 1, 451 .n_voltages = 1,
452 .min_uV = 1800000,
508 }, 453 },
509 .fixed_uV = 1800000,
510 .update_bank = 0x03, 454 .update_bank = 0x03,
511 .update_reg = 0x83, 455 .update_reg = 0x83,
512 .update_mask = 0x04, 456 .update_mask = 0x04,
@@ -520,8 +464,8 @@ static struct ab8500_regulator_info
520 .id = AB8500_LDO_ANA, 464 .id = AB8500_LDO_ANA,
521 .owner = THIS_MODULE, 465 .owner = THIS_MODULE,
522 .n_voltages = 1, 466 .n_voltages = 1,
467 .min_uV = 1200000,
523 }, 468 },
524 .fixed_uV = 1200000,
525 .update_bank = 0x04, 469 .update_bank = 0x04,
526 .update_reg = 0x06, 470 .update_reg = 0x06,
527 .update_mask = 0x0c, 471 .update_mask = 0x0c,
@@ -769,9 +713,7 @@ static __devinit int ab8500_regulator_register(struct platform_device *pdev,
769 if (info->desc.id == AB8500_LDO_AUX3) { 713 if (info->desc.id == AB8500_LDO_AUX3) {
770 info->desc.n_voltages = 714 info->desc.n_voltages =
771 ARRAY_SIZE(ldo_vauxn_voltages); 715 ARRAY_SIZE(ldo_vauxn_voltages);
772 info->voltages = ldo_vauxn_voltages; 716 info->desc.volt_table = ldo_vauxn_voltages;
773 info->voltages_len =
774 ARRAY_SIZE(ldo_vauxn_voltages);
775 info->voltage_mask = 0xf; 717 info->voltage_mask = 0xf;
776 } 718 }
777 } 719 }
diff --git a/drivers/regulator/ad5398.c b/drivers/regulator/ad5398.c
index 46d05f38baf8..f123f7e3b752 100644
--- a/drivers/regulator/ad5398.c
+++ b/drivers/regulator/ad5398.c
@@ -89,9 +89,12 @@ static int ad5398_set_current_limit(struct regulator_dev *rdev, int min_uA, int
89 unsigned short data; 89 unsigned short data;
90 int ret; 90 int ret;
91 91
92 if (min_uA > chip->max_uA || min_uA < chip->min_uA) 92 if (min_uA < chip->min_uA)
93 return -EINVAL; 93 min_uA = chip->min_uA;
94 if (max_uA > chip->max_uA || max_uA < chip->min_uA) 94 if (max_uA > chip->max_uA)
95 max_uA = chip->max_uA;
96
97 if (min_uA > chip->max_uA || max_uA < chip->min_uA)
95 return -EINVAL; 98 return -EINVAL;
96 99
97 selector = DIV_ROUND_UP((min_uA - chip->min_uA) * chip->current_level, 100 selector = DIV_ROUND_UP((min_uA - chip->min_uA) * chip->current_level,
diff --git a/drivers/regulator/anatop-regulator.c b/drivers/regulator/anatop-regulator.c
index e82e7eaac0f1..e9c2085f9dfb 100644
--- a/drivers/regulator/anatop-regulator.c
+++ b/drivers/regulator/anatop-regulator.c
@@ -43,33 +43,15 @@ struct anatop_regulator {
43 struct regulator_init_data *initdata; 43 struct regulator_init_data *initdata;
44}; 44};
45 45
46static int anatop_set_voltage(struct regulator_dev *reg, int min_uV, 46static int anatop_set_voltage_sel(struct regulator_dev *reg, unsigned selector)
47 int max_uV, unsigned *selector)
48{ 47{
49 struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg); 48 struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg);
50 u32 val, sel, mask; 49 u32 val, mask;
51 int uv;
52
53 uv = min_uV;
54 dev_dbg(&reg->dev, "%s: uv %d, min %d, max %d\n", __func__,
55 uv, anatop_reg->min_voltage,
56 anatop_reg->max_voltage);
57
58 if (uv < anatop_reg->min_voltage) {
59 if (max_uV > anatop_reg->min_voltage)
60 uv = anatop_reg->min_voltage;
61 else
62 return -EINVAL;
63 }
64 50
65 if (!anatop_reg->control_reg) 51 if (!anatop_reg->control_reg)
66 return -ENOTSUPP; 52 return -ENOTSUPP;
67 53
68 sel = DIV_ROUND_UP(uv - anatop_reg->min_voltage, 25000); 54 val = anatop_reg->min_bit_val + selector;
69 if (sel * 25000 + anatop_reg->min_voltage > anatop_reg->max_voltage)
70 return -EINVAL;
71 val = anatop_reg->min_bit_val + sel;
72 *selector = sel;
73 dev_dbg(&reg->dev, "%s: calculated val %d\n", __func__, val); 55 dev_dbg(&reg->dev, "%s: calculated val %d\n", __func__, val);
74 mask = ((1 << anatop_reg->vol_bit_width) - 1) << 56 mask = ((1 << anatop_reg->vol_bit_width) - 1) <<
75 anatop_reg->vol_bit_shift; 57 anatop_reg->vol_bit_shift;
@@ -94,21 +76,11 @@ static int anatop_get_voltage_sel(struct regulator_dev *reg)
94 return val - anatop_reg->min_bit_val; 76 return val - anatop_reg->min_bit_val;
95} 77}
96 78
97static int anatop_list_voltage(struct regulator_dev *reg, unsigned selector)
98{
99 struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg);
100 int uv;
101
102 uv = anatop_reg->min_voltage + selector * 25000;
103 dev_dbg(&reg->dev, "vddio = %d, selector = %u\n", uv, selector);
104
105 return uv;
106}
107
108static struct regulator_ops anatop_rops = { 79static struct regulator_ops anatop_rops = {
109 .set_voltage = anatop_set_voltage, 80 .set_voltage_sel = anatop_set_voltage_sel,
110 .get_voltage_sel = anatop_get_voltage_sel, 81 .get_voltage_sel = anatop_get_voltage_sel,
111 .list_voltage = anatop_list_voltage, 82 .list_voltage = regulator_list_voltage_linear,
83 .map_voltage = regulator_map_voltage_linear,
112}; 84};
113 85
114static int __devinit anatop_regulator_probe(struct platform_device *pdev) 86static int __devinit anatop_regulator_probe(struct platform_device *pdev)
@@ -176,6 +148,8 @@ static int __devinit anatop_regulator_probe(struct platform_device *pdev)
176 148
177 rdesc->n_voltages = (sreg->max_voltage - sreg->min_voltage) 149 rdesc->n_voltages = (sreg->max_voltage - sreg->min_voltage)
178 / 25000 + 1; 150 / 25000 + 1;
151 rdesc->min_uV = sreg->min_voltage;
152 rdesc->uV_step = 25000;
179 153
180 config.dev = &pdev->dev; 154 config.dev = &pdev->dev;
181 config.init_data = initdata; 155 config.init_data = initdata;
diff --git a/drivers/regulator/arizona-ldo1.c b/drivers/regulator/arizona-ldo1.c
new file mode 100644
index 000000000000..c8f95c07adb6
--- /dev/null
+++ b/drivers/regulator/arizona-ldo1.c
@@ -0,0 +1,138 @@
1/*
2 * arizona-ldo1.c -- LDO1 supply for Arizona devices
3 *
4 * Copyright 2012 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 */
13
14#include <linux/module.h>
15#include <linux/moduleparam.h>
16#include <linux/init.h>
17#include <linux/bitops.h>
18#include <linux/err.h>
19#include <linux/platform_device.h>
20#include <linux/regulator/driver.h>
21#include <linux/regulator/machine.h>
22#include <linux/gpio.h>
23#include <linux/slab.h>
24
25#include <linux/mfd/arizona/core.h>
26#include <linux/mfd/arizona/pdata.h>
27#include <linux/mfd/arizona/registers.h>
28
29struct arizona_ldo1 {
30 struct regulator_dev *regulator;
31 struct arizona *arizona;
32
33 struct regulator_consumer_supply supply;
34 struct regulator_init_data init_data;
35};
36
37static struct regulator_ops arizona_ldo1_ops = {
38 .list_voltage = regulator_list_voltage_linear,
39 .map_voltage = regulator_map_voltage_linear,
40 .get_voltage_sel = regulator_get_voltage_sel_regmap,
41 .set_voltage_sel = regulator_set_voltage_sel_regmap,
42};
43
44static const struct regulator_desc arizona_ldo1 = {
45 .name = "LDO1",
46 .supply_name = "LDOVDD",
47 .type = REGULATOR_VOLTAGE,
48 .ops = &arizona_ldo1_ops,
49
50 .vsel_reg = ARIZONA_LDO1_CONTROL_1,
51 .vsel_mask = ARIZONA_LDO1_VSEL_MASK,
52 .min_uV = 900000,
53 .uV_step = 50000,
54 .n_voltages = 7,
55
56 .owner = THIS_MODULE,
57};
58
59static const struct regulator_init_data arizona_ldo1_default = {
60 .constraints = {
61 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
62 },
63 .num_consumer_supplies = 1,
64};
65
66static __devinit int arizona_ldo1_probe(struct platform_device *pdev)
67{
68 struct arizona *arizona = dev_get_drvdata(pdev->dev.parent);
69 struct regulator_config config = { };
70 struct arizona_ldo1 *ldo1;
71 int ret;
72
73 ldo1 = devm_kzalloc(&pdev->dev, sizeof(*ldo1), GFP_KERNEL);
74 if (ldo1 == NULL) {
75 dev_err(&pdev->dev, "Unable to allocate private data\n");
76 return -ENOMEM;
77 }
78
79 ldo1->arizona = arizona;
80
81 /*
82 * Since the chip usually supplies itself we provide some
83 * default init_data for it. This will be overridden with
84 * platform data if provided.
85 */
86 ldo1->init_data = arizona_ldo1_default;
87 ldo1->init_data.consumer_supplies = &ldo1->supply;
88 ldo1->supply.supply = "DCVDD";
89 ldo1->supply.dev_name = dev_name(arizona->dev);
90
91 config.dev = arizona->dev;
92 config.driver_data = ldo1;
93 config.regmap = arizona->regmap;
94 config.ena_gpio = arizona->pdata.ldoena;
95
96 if (arizona->pdata.ldo1)
97 config.init_data = arizona->pdata.ldo1;
98 else
99 config.init_data = &ldo1->init_data;
100
101 ldo1->regulator = regulator_register(&arizona_ldo1, &config);
102 if (IS_ERR(ldo1->regulator)) {
103 ret = PTR_ERR(ldo1->regulator);
104 dev_err(arizona->dev, "Failed to register LDO1 supply: %d\n",
105 ret);
106 return ret;
107 }
108
109 platform_set_drvdata(pdev, ldo1);
110
111 return 0;
112}
113
114static __devexit int arizona_ldo1_remove(struct platform_device *pdev)
115{
116 struct arizona_ldo1 *ldo1 = platform_get_drvdata(pdev);
117
118 regulator_unregister(ldo1->regulator);
119
120 return 0;
121}
122
123static struct platform_driver arizona_ldo1_driver = {
124 .probe = arizona_ldo1_probe,
125 .remove = __devexit_p(arizona_ldo1_remove),
126 .driver = {
127 .name = "arizona-ldo1",
128 .owner = THIS_MODULE,
129 },
130};
131
132module_platform_driver(arizona_ldo1_driver);
133
134/* Module information */
135MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
136MODULE_DESCRIPTION("Arizona LDO1 driver");
137MODULE_LICENSE("GPL");
138MODULE_ALIAS("platform:arizona-ldo1");
diff --git a/drivers/regulator/arizona-micsupp.c b/drivers/regulator/arizona-micsupp.c
new file mode 100644
index 000000000000..450a069aa9b6
--- /dev/null
+++ b/drivers/regulator/arizona-micsupp.c
@@ -0,0 +1,188 @@
1/*
2 * arizona-micsupp.c -- Microphone supply for Arizona devices
3 *
4 * Copyright 2012 Wolfson Microelectronics PLC.
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 */
13
14#include <linux/module.h>
15#include <linux/moduleparam.h>
16#include <linux/init.h>
17#include <linux/bitops.h>
18#include <linux/err.h>
19#include <linux/platform_device.h>
20#include <linux/regulator/driver.h>
21#include <linux/regulator/machine.h>
22#include <linux/gpio.h>
23#include <linux/slab.h>
24
25#include <linux/mfd/arizona/core.h>
26#include <linux/mfd/arizona/pdata.h>
27#include <linux/mfd/arizona/registers.h>
28
29#define ARIZONA_MICSUPP_MAX_SELECTOR 0x1f
30
31struct arizona_micsupp {
32 struct regulator_dev *regulator;
33 struct arizona *arizona;
34
35 struct regulator_consumer_supply supply;
36 struct regulator_init_data init_data;
37};
38
39static int arizona_micsupp_list_voltage(struct regulator_dev *rdev,
40 unsigned int selector)
41{
42 if (selector > ARIZONA_MICSUPP_MAX_SELECTOR)
43 return -EINVAL;
44
45 if (selector == ARIZONA_MICSUPP_MAX_SELECTOR)
46 return 3300000;
47 else
48 return (selector * 50000) + 1700000;
49}
50
51static int arizona_micsupp_map_voltage(struct regulator_dev *rdev,
52 int min_uV, int max_uV)
53{
54 unsigned int voltage;
55 int selector;
56
57 if (min_uV < 1700000)
58 min_uV = 1700000;
59
60 if (min_uV > 3200000)
61 selector = ARIZONA_MICSUPP_MAX_SELECTOR;
62 else
63 selector = DIV_ROUND_UP(min_uV - 1700000, 50000);
64
65 if (selector < 0)
66 return -EINVAL;
67
68 voltage = arizona_micsupp_list_voltage(rdev, selector);
69 if (voltage < min_uV || voltage > max_uV)
70 return -EINVAL;
71
72 return selector;
73}
74
75static struct regulator_ops arizona_micsupp_ops = {
76 .enable = regulator_enable_regmap,
77 .disable = regulator_disable_regmap,
78 .is_enabled = regulator_is_enabled_regmap,
79
80 .list_voltage = arizona_micsupp_list_voltage,
81 .map_voltage = arizona_micsupp_map_voltage,
82
83 .get_voltage_sel = regulator_get_voltage_sel_regmap,
84 .set_voltage_sel = regulator_set_voltage_sel_regmap,
85};
86
87static const struct regulator_desc arizona_micsupp = {
88 .name = "MICVDD",
89 .supply_name = "CPVDD",
90 .type = REGULATOR_VOLTAGE,
91 .n_voltages = ARIZONA_MICSUPP_MAX_SELECTOR + 1,
92 .ops = &arizona_micsupp_ops,
93
94 .vsel_reg = ARIZONA_LDO2_CONTROL_1,
95 .vsel_mask = ARIZONA_LDO2_VSEL_MASK,
96 .enable_reg = ARIZONA_MIC_CHARGE_PUMP_1,
97 .enable_mask = ARIZONA_CPMIC_ENA,
98
99 .owner = THIS_MODULE,
100};
101
102static const struct regulator_init_data arizona_micsupp_default = {
103 .constraints = {
104 .valid_ops_mask = REGULATOR_CHANGE_STATUS |
105 REGULATOR_CHANGE_VOLTAGE,
106 .min_uV = 1700000,
107 .max_uV = 3300000,
108 },
109
110 .num_consumer_supplies = 1,
111};
112
113static __devinit int arizona_micsupp_probe(struct platform_device *pdev)
114{
115 struct arizona *arizona = dev_get_drvdata(pdev->dev.parent);
116 struct regulator_config config = { };
117 struct arizona_micsupp *micsupp;
118 int ret;
119
120 micsupp = devm_kzalloc(&pdev->dev, sizeof(*micsupp), GFP_KERNEL);
121 if (micsupp == NULL) {
122 dev_err(&pdev->dev, "Unable to allocate private data\n");
123 return -ENOMEM;
124 }
125
126 micsupp->arizona = arizona;
127
128 /*
129 * Since the chip usually supplies itself we provide some
130 * default init_data for it. This will be overridden with
131 * platform data if provided.
132 */
133 micsupp->init_data = arizona_micsupp_default;
134 micsupp->init_data.consumer_supplies = &micsupp->supply;
135 micsupp->supply.supply = "MICVDD";
136 micsupp->supply.dev_name = dev_name(arizona->dev);
137
138 config.dev = arizona->dev;
139 config.driver_data = micsupp;
140 config.regmap = arizona->regmap;
141
142 if (arizona->pdata.micvdd)
143 config.init_data = arizona->pdata.micvdd;
144 else
145 config.init_data = &micsupp->init_data;
146
147 /* Default to regulated mode until the API supports bypass */
148 regmap_update_bits(arizona->regmap, ARIZONA_MIC_CHARGE_PUMP_1,
149 ARIZONA_CPMIC_BYPASS, 0);
150
151 micsupp->regulator = regulator_register(&arizona_micsupp, &config);
152 if (IS_ERR(micsupp->regulator)) {
153 ret = PTR_ERR(micsupp->regulator);
154 dev_err(arizona->dev, "Failed to register mic supply: %d\n",
155 ret);
156 return ret;
157 }
158
159 platform_set_drvdata(pdev, micsupp);
160
161 return 0;
162}
163
164static __devexit int arizona_micsupp_remove(struct platform_device *pdev)
165{
166 struct arizona_micsupp *micsupp = platform_get_drvdata(pdev);
167
168 regulator_unregister(micsupp->regulator);
169
170 return 0;
171}
172
173static struct platform_driver arizona_micsupp_driver = {
174 .probe = arizona_micsupp_probe,
175 .remove = __devexit_p(arizona_micsupp_remove),
176 .driver = {
177 .name = "arizona-micsupp",
178 .owner = THIS_MODULE,
179 },
180};
181
182module_platform_driver(arizona_micsupp_driver);
183
184/* Module information */
185MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
186MODULE_DESCRIPTION("Arizona microphone supply driver");
187MODULE_LICENSE("GPL");
188MODULE_ALIAS("platform:arizona-micsupp");
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 09a737c868b5..2e31dffbefe7 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -23,6 +23,7 @@
23#include <linux/mutex.h> 23#include <linux/mutex.h>
24#include <linux/suspend.h> 24#include <linux/suspend.h>
25#include <linux/delay.h> 25#include <linux/delay.h>
26#include <linux/gpio.h>
26#include <linux/of.h> 27#include <linux/of.h>
27#include <linux/regmap.h> 28#include <linux/regmap.h>
28#include <linux/regulator/of_regulator.h> 29#include <linux/regulator/of_regulator.h>
@@ -108,28 +109,6 @@ static const char *rdev_get_name(struct regulator_dev *rdev)
108 return ""; 109 return "";
109} 110}
110 111
111/* gets the regulator for a given consumer device */
112static struct regulator *get_device_regulator(struct device *dev)
113{
114 struct regulator *regulator = NULL;
115 struct regulator_dev *rdev;
116
117 mutex_lock(&regulator_list_mutex);
118 list_for_each_entry(rdev, &regulator_list, list) {
119 mutex_lock(&rdev->mutex);
120 list_for_each_entry(regulator, &rdev->consumer_list, list) {
121 if (regulator->dev == dev) {
122 mutex_unlock(&rdev->mutex);
123 mutex_unlock(&regulator_list_mutex);
124 return regulator;
125 }
126 }
127 mutex_unlock(&rdev->mutex);
128 }
129 mutex_unlock(&regulator_list_mutex);
130 return NULL;
131}
132
133/** 112/**
134 * of_get_regulator - get a regulator device node based on supply name 113 * of_get_regulator - get a regulator device node based on supply name
135 * @dev: Device pointer for the consumer (of regulator) device 114 * @dev: Device pointer for the consumer (of regulator) device
@@ -303,18 +282,6 @@ static int regulator_check_drms(struct regulator_dev *rdev)
303 return 0; 282 return 0;
304} 283}
305 284
306static ssize_t device_requested_uA_show(struct device *dev,
307 struct device_attribute *attr, char *buf)
308{
309 struct regulator *regulator;
310
311 regulator = get_device_regulator(dev);
312 if (regulator == NULL)
313 return 0;
314
315 return sprintf(buf, "%d\n", regulator->uA_load);
316}
317
318static ssize_t regulator_uV_show(struct device *dev, 285static ssize_t regulator_uV_show(struct device *dev,
319 struct device_attribute *attr, char *buf) 286 struct device_attribute *attr, char *buf)
320{ 287{
@@ -427,6 +394,9 @@ static ssize_t regulator_status_show(struct device *dev,
427 case REGULATOR_STATUS_STANDBY: 394 case REGULATOR_STATUS_STANDBY:
428 label = "standby"; 395 label = "standby";
429 break; 396 break;
397 case REGULATOR_STATUS_UNDEFINED:
398 label = "undefined";
399 break;
430 default: 400 default:
431 return -ERANGE; 401 return -ERANGE;
432 } 402 }
@@ -967,6 +937,14 @@ static int set_machine_constraints(struct regulator_dev *rdev,
967 } 937 }
968 } 938 }
969 939
940 if (rdev->constraints->ramp_delay && ops->set_ramp_delay) {
941 ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay);
942 if (ret < 0) {
943 rdev_err(rdev, "failed to set ramp_delay\n");
944 goto out;
945 }
946 }
947
970 print_constraints(rdev); 948 print_constraints(rdev);
971 return 0; 949 return 0;
972out: 950out:
@@ -1097,48 +1075,29 @@ static struct regulator *create_regulator(struct regulator_dev *rdev,
1097 list_add(&regulator->list, &rdev->consumer_list); 1075 list_add(&regulator->list, &rdev->consumer_list);
1098 1076
1099 if (dev) { 1077 if (dev) {
1100 /* create a 'requested_microamps_name' sysfs entry */
1101 size = scnprintf(buf, REG_STR_SIZE,
1102 "microamps_requested_%s-%s",
1103 dev_name(dev), supply_name);
1104 if (size >= REG_STR_SIZE)
1105 goto overflow_err;
1106
1107 regulator->dev = dev; 1078 regulator->dev = dev;
1108 sysfs_attr_init(&regulator->dev_attr.attr);
1109 regulator->dev_attr.attr.name = kstrdup(buf, GFP_KERNEL);
1110 if (regulator->dev_attr.attr.name == NULL)
1111 goto attr_name_err;
1112
1113 regulator->dev_attr.attr.mode = 0444;
1114 regulator->dev_attr.show = device_requested_uA_show;
1115 err = device_create_file(dev, &regulator->dev_attr);
1116 if (err < 0) {
1117 rdev_warn(rdev, "could not add regulator_dev requested microamps sysfs entry\n");
1118 goto attr_name_err;
1119 }
1120 1079
1121 /* also add a link to the device sysfs entry */ 1080 /* Add a link to the device sysfs entry */
1122 size = scnprintf(buf, REG_STR_SIZE, "%s-%s", 1081 size = scnprintf(buf, REG_STR_SIZE, "%s-%s",
1123 dev->kobj.name, supply_name); 1082 dev->kobj.name, supply_name);
1124 if (size >= REG_STR_SIZE) 1083 if (size >= REG_STR_SIZE)
1125 goto attr_err; 1084 goto overflow_err;
1126 1085
1127 regulator->supply_name = kstrdup(buf, GFP_KERNEL); 1086 regulator->supply_name = kstrdup(buf, GFP_KERNEL);
1128 if (regulator->supply_name == NULL) 1087 if (regulator->supply_name == NULL)
1129 goto attr_err; 1088 goto overflow_err;
1130 1089
1131 err = sysfs_create_link(&rdev->dev.kobj, &dev->kobj, 1090 err = sysfs_create_link(&rdev->dev.kobj, &dev->kobj,
1132 buf); 1091 buf);
1133 if (err) { 1092 if (err) {
1134 rdev_warn(rdev, "could not add device link %s err %d\n", 1093 rdev_warn(rdev, "could not add device link %s err %d\n",
1135 dev->kobj.name, err); 1094 dev->kobj.name, err);
1136 goto link_name_err; 1095 /* non-fatal */
1137 } 1096 }
1138 } else { 1097 } else {
1139 regulator->supply_name = kstrdup(supply_name, GFP_KERNEL); 1098 regulator->supply_name = kstrdup(supply_name, GFP_KERNEL);
1140 if (regulator->supply_name == NULL) 1099 if (regulator->supply_name == NULL)
1141 goto attr_err; 1100 goto overflow_err;
1142 } 1101 }
1143 1102
1144 regulator->debugfs = debugfs_create_dir(regulator->supply_name, 1103 regulator->debugfs = debugfs_create_dir(regulator->supply_name,
@@ -1165,12 +1124,6 @@ static struct regulator *create_regulator(struct regulator_dev *rdev,
1165 1124
1166 mutex_unlock(&rdev->mutex); 1125 mutex_unlock(&rdev->mutex);
1167 return regulator; 1126 return regulator;
1168link_name_err:
1169 kfree(regulator->supply_name);
1170attr_err:
1171 device_remove_file(regulator->dev, &regulator->dev_attr);
1172attr_name_err:
1173 kfree(regulator->dev_attr.attr.name);
1174overflow_err: 1127overflow_err:
1175 list_del(&regulator->list); 1128 list_del(&regulator->list);
1176 kfree(regulator); 1129 kfree(regulator);
@@ -1181,7 +1134,7 @@ overflow_err:
1181static int _regulator_get_enable_time(struct regulator_dev *rdev) 1134static int _regulator_get_enable_time(struct regulator_dev *rdev)
1182{ 1135{
1183 if (!rdev->desc->ops->enable_time) 1136 if (!rdev->desc->ops->enable_time)
1184 return 0; 1137 return rdev->desc->enable_time;
1185 return rdev->desc->ops->enable_time(rdev); 1138 return rdev->desc->ops->enable_time(rdev);
1186} 1139}
1187 1140
@@ -1420,11 +1373,8 @@ void regulator_put(struct regulator *regulator)
1420 debugfs_remove_recursive(regulator->debugfs); 1373 debugfs_remove_recursive(regulator->debugfs);
1421 1374
1422 /* remove any sysfs entries */ 1375 /* remove any sysfs entries */
1423 if (regulator->dev) { 1376 if (regulator->dev)
1424 sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name); 1377 sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name);
1425 device_remove_file(regulator->dev, &regulator->dev_attr);
1426 kfree(regulator->dev_attr.attr.name);
1427 }
1428 kfree(regulator->supply_name); 1378 kfree(regulator->supply_name);
1429 list_del(&regulator->list); 1379 list_del(&regulator->list);
1430 kfree(regulator); 1380 kfree(regulator);
@@ -1459,19 +1409,61 @@ void devm_regulator_put(struct regulator *regulator)
1459{ 1409{
1460 int rc; 1410 int rc;
1461 1411
1462 rc = devres_destroy(regulator->dev, devm_regulator_release, 1412 rc = devres_release(regulator->dev, devm_regulator_release,
1463 devm_regulator_match, regulator); 1413 devm_regulator_match, regulator);
1464 if (rc == 0) 1414 if (rc != 0)
1465 regulator_put(regulator);
1466 else
1467 WARN_ON(rc); 1415 WARN_ON(rc);
1468} 1416}
1469EXPORT_SYMBOL_GPL(devm_regulator_put); 1417EXPORT_SYMBOL_GPL(devm_regulator_put);
1470 1418
1419static int _regulator_do_enable(struct regulator_dev *rdev)
1420{
1421 int ret, delay;
1422
1423 /* Query before enabling in case configuration dependent. */
1424 ret = _regulator_get_enable_time(rdev);
1425 if (ret >= 0) {
1426 delay = ret;
1427 } else {
1428 rdev_warn(rdev, "enable_time() failed: %d\n", ret);
1429 delay = 0;
1430 }
1431
1432 trace_regulator_enable(rdev_get_name(rdev));
1433
1434 if (rdev->ena_gpio) {
1435 gpio_set_value_cansleep(rdev->ena_gpio,
1436 !rdev->ena_gpio_invert);
1437 rdev->ena_gpio_state = 1;
1438 } else if (rdev->desc->ops->enable) {
1439 ret = rdev->desc->ops->enable(rdev);
1440 if (ret < 0)
1441 return ret;
1442 } else {
1443 return -EINVAL;
1444 }
1445
1446 /* Allow the regulator to ramp; it would be useful to extend
1447 * this for bulk operations so that the regulators can ramp
1448 * together. */
1449 trace_regulator_enable_delay(rdev_get_name(rdev));
1450
1451 if (delay >= 1000) {
1452 mdelay(delay / 1000);
1453 udelay(delay % 1000);
1454 } else if (delay) {
1455 udelay(delay);
1456 }
1457
1458 trace_regulator_enable_complete(rdev_get_name(rdev));
1459
1460 return 0;
1461}
1462
1471/* locks held by regulator_enable() */ 1463/* locks held by regulator_enable() */
1472static int _regulator_enable(struct regulator_dev *rdev) 1464static int _regulator_enable(struct regulator_dev *rdev)
1473{ 1465{
1474 int ret, delay; 1466 int ret;
1475 1467
1476 /* check voltage and requested load before enabling */ 1468 /* check voltage and requested load before enabling */
1477 if (rdev->constraints && 1469 if (rdev->constraints &&
@@ -1485,40 +1477,10 @@ static int _regulator_enable(struct regulator_dev *rdev)
1485 if (!_regulator_can_change_status(rdev)) 1477 if (!_regulator_can_change_status(rdev))
1486 return -EPERM; 1478 return -EPERM;
1487 1479
1488 if (!rdev->desc->ops->enable) 1480 ret = _regulator_do_enable(rdev);
1489 return -EINVAL;
1490
1491 /* Query before enabling in case configuration
1492 * dependent. */
1493 ret = _regulator_get_enable_time(rdev);
1494 if (ret >= 0) {
1495 delay = ret;
1496 } else {
1497 rdev_warn(rdev, "enable_time() failed: %d\n",
1498 ret);
1499 delay = 0;
1500 }
1501
1502 trace_regulator_enable(rdev_get_name(rdev));
1503
1504 /* Allow the regulator to ramp; it would be useful
1505 * to extend this for bulk operations so that the
1506 * regulators can ramp together. */
1507 ret = rdev->desc->ops->enable(rdev);
1508 if (ret < 0) 1481 if (ret < 0)
1509 return ret; 1482 return ret;
1510 1483
1511 trace_regulator_enable_delay(rdev_get_name(rdev));
1512
1513 if (delay >= 1000) {
1514 mdelay(delay / 1000);
1515 udelay(delay % 1000);
1516 } else if (delay) {
1517 udelay(delay);
1518 }
1519
1520 trace_regulator_enable_complete(rdev_get_name(rdev));
1521
1522 } else if (ret < 0) { 1484 } else if (ret < 0) {
1523 rdev_err(rdev, "is_enabled() failed: %d\n", ret); 1485 rdev_err(rdev, "is_enabled() failed: %d\n", ret);
1524 return ret; 1486 return ret;
@@ -1567,6 +1529,30 @@ int regulator_enable(struct regulator *regulator)
1567} 1529}
1568EXPORT_SYMBOL_GPL(regulator_enable); 1530EXPORT_SYMBOL_GPL(regulator_enable);
1569 1531
1532static int _regulator_do_disable(struct regulator_dev *rdev)
1533{
1534 int ret;
1535
1536 trace_regulator_disable(rdev_get_name(rdev));
1537
1538 if (rdev->ena_gpio) {
1539 gpio_set_value_cansleep(rdev->ena_gpio,
1540 rdev->ena_gpio_invert);
1541 rdev->ena_gpio_state = 0;
1542
1543 } else if (rdev->desc->ops->disable) {
1544 ret = rdev->desc->ops->disable(rdev);
1545 if (ret != 0)
1546 return ret;
1547 }
1548
1549 trace_regulator_disable_complete(rdev_get_name(rdev));
1550
1551 _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
1552 NULL);
1553 return 0;
1554}
1555
1570/* locks held by regulator_disable() */ 1556/* locks held by regulator_disable() */
1571static int _regulator_disable(struct regulator_dev *rdev) 1557static int _regulator_disable(struct regulator_dev *rdev)
1572{ 1558{
@@ -1581,20 +1567,12 @@ static int _regulator_disable(struct regulator_dev *rdev)
1581 (rdev->constraints && !rdev->constraints->always_on)) { 1567 (rdev->constraints && !rdev->constraints->always_on)) {
1582 1568
1583 /* we are last user */ 1569 /* we are last user */
1584 if (_regulator_can_change_status(rdev) && 1570 if (_regulator_can_change_status(rdev)) {
1585 rdev->desc->ops->disable) { 1571 ret = _regulator_do_disable(rdev);
1586 trace_regulator_disable(rdev_get_name(rdev));
1587
1588 ret = rdev->desc->ops->disable(rdev);
1589 if (ret < 0) { 1572 if (ret < 0) {
1590 rdev_err(rdev, "failed to disable\n"); 1573 rdev_err(rdev, "failed to disable\n");
1591 return ret; 1574 return ret;
1592 } 1575 }
1593
1594 trace_regulator_disable_complete(rdev_get_name(rdev));
1595
1596 _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
1597 NULL);
1598 } 1576 }
1599 1577
1600 rdev->use_count = 0; 1578 rdev->use_count = 0;
@@ -1812,6 +1790,10 @@ EXPORT_SYMBOL_GPL(regulator_disable_regmap);
1812 1790
1813static int _regulator_is_enabled(struct regulator_dev *rdev) 1791static int _regulator_is_enabled(struct regulator_dev *rdev)
1814{ 1792{
1793 /* A GPIO control always takes precedence */
1794 if (rdev->ena_gpio)
1795 return rdev->ena_gpio_state;
1796
1815 /* If we don't know then assume that the regulator is always on */ 1797 /* If we don't know then assume that the regulator is always on */
1816 if (!rdev->desc->ops->is_enabled) 1798 if (!rdev->desc->ops->is_enabled)
1817 return 1; 1799 return 1;
@@ -1883,6 +1865,31 @@ int regulator_list_voltage_linear(struct regulator_dev *rdev,
1883EXPORT_SYMBOL_GPL(regulator_list_voltage_linear); 1865EXPORT_SYMBOL_GPL(regulator_list_voltage_linear);
1884 1866
1885/** 1867/**
1868 * regulator_list_voltage_table - List voltages with table based mapping
1869 *
1870 * @rdev: Regulator device
1871 * @selector: Selector to convert into a voltage
1872 *
1873 * Regulators with table based mapping between voltages and
1874 * selectors can set volt_table in the regulator descriptor
1875 * and then use this function as their list_voltage() operation.
1876 */
1877int regulator_list_voltage_table(struct regulator_dev *rdev,
1878 unsigned int selector)
1879{
1880 if (!rdev->desc->volt_table) {
1881 BUG_ON(!rdev->desc->volt_table);
1882 return -EINVAL;
1883 }
1884
1885 if (selector >= rdev->desc->n_voltages)
1886 return -EINVAL;
1887
1888 return rdev->desc->volt_table[selector];
1889}
1890EXPORT_SYMBOL_GPL(regulator_list_voltage_table);
1891
1892/**
1886 * regulator_list_voltage - enumerate supported voltages 1893 * regulator_list_voltage - enumerate supported voltages
1887 * @regulator: regulator source 1894 * @regulator: regulator source
1888 * @selector: identify voltage to list 1895 * @selector: identify voltage to list
@@ -1928,8 +1935,18 @@ EXPORT_SYMBOL_GPL(regulator_list_voltage);
1928int regulator_is_supported_voltage(struct regulator *regulator, 1935int regulator_is_supported_voltage(struct regulator *regulator,
1929 int min_uV, int max_uV) 1936 int min_uV, int max_uV)
1930{ 1937{
1938 struct regulator_dev *rdev = regulator->rdev;
1931 int i, voltages, ret; 1939 int i, voltages, ret;
1932 1940
1941 /* If we can't change voltage check the current voltage */
1942 if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) {
1943 ret = regulator_get_voltage(regulator);
1944 if (ret >= 0)
1945 return (min_uV >= ret && ret <= max_uV);
1946 else
1947 return ret;
1948 }
1949
1933 ret = regulator_count_voltages(regulator); 1950 ret = regulator_count_voltages(regulator);
1934 if (ret < 0) 1951 if (ret < 0)
1935 return ret; 1952 return ret;
@@ -2045,6 +2062,14 @@ int regulator_map_voltage_linear(struct regulator_dev *rdev,
2045{ 2062{
2046 int ret, voltage; 2063 int ret, voltage;
2047 2064
2065 /* Allow uV_step to be 0 for fixed voltage */
2066 if (rdev->desc->n_voltages == 1 && rdev->desc->uV_step == 0) {
2067 if (min_uV <= rdev->desc->min_uV && rdev->desc->min_uV <= max_uV)
2068 return 0;
2069 else
2070 return -EINVAL;
2071 }
2072
2048 if (!rdev->desc->uV_step) { 2073 if (!rdev->desc->uV_step) {
2049 BUG_ON(!rdev->desc->uV_step); 2074 BUG_ON(!rdev->desc->uV_step);
2050 return -EINVAL; 2075 return -EINVAL;
@@ -2071,7 +2096,7 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
2071{ 2096{
2072 int ret; 2097 int ret;
2073 int delay = 0; 2098 int delay = 0;
2074 int best_val; 2099 int best_val = 0;
2075 unsigned int selector; 2100 unsigned int selector;
2076 int old_selector = -1; 2101 int old_selector = -1;
2077 2102
@@ -2084,7 +2109,8 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
2084 * If we can't obtain the old selector there is not enough 2109 * If we can't obtain the old selector there is not enough
2085 * info to call set_voltage_time_sel(). 2110 * info to call set_voltage_time_sel().
2086 */ 2111 */
2087 if (rdev->desc->ops->set_voltage_time_sel && 2112 if (_regulator_is_enabled(rdev) &&
2113 rdev->desc->ops->set_voltage_time_sel &&
2088 rdev->desc->ops->get_voltage_sel) { 2114 rdev->desc->ops->get_voltage_sel) {
2089 old_selector = rdev->desc->ops->get_voltage_sel(rdev); 2115 old_selector = rdev->desc->ops->get_voltage_sel(rdev);
2090 if (old_selector < 0) 2116 if (old_selector < 0)
@@ -2094,29 +2120,45 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
2094 if (rdev->desc->ops->set_voltage) { 2120 if (rdev->desc->ops->set_voltage) {
2095 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, 2121 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV,
2096 &selector); 2122 &selector);
2123
2124 if (ret >= 0) {
2125 if (rdev->desc->ops->list_voltage)
2126 best_val = rdev->desc->ops->list_voltage(rdev,
2127 selector);
2128 else
2129 best_val = _regulator_get_voltage(rdev);
2130 }
2131
2097 } else if (rdev->desc->ops->set_voltage_sel) { 2132 } else if (rdev->desc->ops->set_voltage_sel) {
2098 if (rdev->desc->ops->map_voltage) 2133 if (rdev->desc->ops->map_voltage) {
2099 ret = rdev->desc->ops->map_voltage(rdev, min_uV, 2134 ret = rdev->desc->ops->map_voltage(rdev, min_uV,
2100 max_uV); 2135 max_uV);
2101 else 2136 } else {
2102 ret = regulator_map_voltage_iterate(rdev, min_uV, 2137 if (rdev->desc->ops->list_voltage ==
2103 max_uV); 2138 regulator_list_voltage_linear)
2139 ret = regulator_map_voltage_linear(rdev,
2140 min_uV, max_uV);
2141 else
2142 ret = regulator_map_voltage_iterate(rdev,
2143 min_uV, max_uV);
2144 }
2104 2145
2105 if (ret >= 0) { 2146 if (ret >= 0) {
2106 selector = ret; 2147 best_val = rdev->desc->ops->list_voltage(rdev, ret);
2107 ret = rdev->desc->ops->set_voltage_sel(rdev, ret); 2148 if (min_uV <= best_val && max_uV >= best_val) {
2149 selector = ret;
2150 ret = rdev->desc->ops->set_voltage_sel(rdev,
2151 ret);
2152 } else {
2153 ret = -EINVAL;
2154 }
2108 } 2155 }
2109 } else { 2156 } else {
2110 ret = -EINVAL; 2157 ret = -EINVAL;
2111 } 2158 }
2112 2159
2113 if (rdev->desc->ops->list_voltage)
2114 best_val = rdev->desc->ops->list_voltage(rdev, selector);
2115 else
2116 best_val = -1;
2117
2118 /* Call set_voltage_time_sel if successfully obtained old_selector */ 2160 /* Call set_voltage_time_sel if successfully obtained old_selector */
2119 if (ret == 0 && old_selector >= 0 && 2161 if (ret == 0 && _regulator_is_enabled(rdev) && old_selector >= 0 &&
2120 rdev->desc->ops->set_voltage_time_sel) { 2162 rdev->desc->ops->set_voltage_time_sel) {
2121 2163
2122 delay = rdev->desc->ops->set_voltage_time_sel(rdev, 2164 delay = rdev->desc->ops->set_voltage_time_sel(rdev,
@@ -2126,19 +2168,19 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
2126 delay); 2168 delay);
2127 delay = 0; 2169 delay = 0;
2128 } 2170 }
2129 }
2130 2171
2131 /* Insert any necessary delays */ 2172 /* Insert any necessary delays */
2132 if (delay >= 1000) { 2173 if (delay >= 1000) {
2133 mdelay(delay / 1000); 2174 mdelay(delay / 1000);
2134 udelay(delay % 1000); 2175 udelay(delay % 1000);
2135 } else if (delay) { 2176 } else if (delay) {
2136 udelay(delay); 2177 udelay(delay);
2178 }
2137 } 2179 }
2138 2180
2139 if (ret == 0) 2181 if (ret == 0 && best_val >= 0)
2140 _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE, 2182 _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE,
2141 NULL); 2183 (void *)best_val);
2142 2184
2143 trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val); 2185 trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val);
2144 2186
@@ -2249,6 +2291,46 @@ int regulator_set_voltage_time(struct regulator *regulator,
2249EXPORT_SYMBOL_GPL(regulator_set_voltage_time); 2291EXPORT_SYMBOL_GPL(regulator_set_voltage_time);
2250 2292
2251/** 2293/**
2294 *regulator_set_voltage_time_sel - get raise/fall time
2295 * @regulator: regulator source
2296 * @old_selector: selector for starting voltage
2297 * @new_selector: selector for target voltage
2298 *
2299 * Provided with the starting and target voltage selectors, this function
2300 * returns time in microseconds required to rise or fall to this new voltage
2301 *
2302 * Drivers providing ramp_delay in regulation_constraints can use this as their
2303 * set_voltage_time_sel() operation.
2304 */
2305int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
2306 unsigned int old_selector,
2307 unsigned int new_selector)
2308{
2309 unsigned int ramp_delay = 0;
2310 int old_volt, new_volt;
2311
2312 if (rdev->constraints->ramp_delay)
2313 ramp_delay = rdev->constraints->ramp_delay;
2314 else if (rdev->desc->ramp_delay)
2315 ramp_delay = rdev->desc->ramp_delay;
2316
2317 if (ramp_delay == 0) {
2318 rdev_warn(rdev, "ramp_delay not set\n");
2319 return 0;
2320 }
2321
2322 /* sanity check */
2323 if (!rdev->desc->ops->list_voltage)
2324 return -EINVAL;
2325
2326 old_volt = rdev->desc->ops->list_voltage(rdev, old_selector);
2327 new_volt = rdev->desc->ops->list_voltage(rdev, new_selector);
2328
2329 return DIV_ROUND_UP(abs(new_volt - old_volt), ramp_delay);
2330}
2331EXPORT_SYMBOL_GPL(regulator_set_voltage_time_sel);
2332
2333/**
2252 * regulator_sync_voltage - re-apply last regulator output voltage 2334 * regulator_sync_voltage - re-apply last regulator output voltage
2253 * @regulator: regulator source 2335 * @regulator: regulator source
2254 * 2336 *
@@ -2519,9 +2601,12 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load)
2519{ 2601{
2520 struct regulator_dev *rdev = regulator->rdev; 2602 struct regulator_dev *rdev = regulator->rdev;
2521 struct regulator *consumer; 2603 struct regulator *consumer;
2522 int ret, output_uV, input_uV, total_uA_load = 0; 2604 int ret, output_uV, input_uV = 0, total_uA_load = 0;
2523 unsigned int mode; 2605 unsigned int mode;
2524 2606
2607 if (rdev->supply)
2608 input_uV = regulator_get_voltage(rdev->supply);
2609
2525 mutex_lock(&rdev->mutex); 2610 mutex_lock(&rdev->mutex);
2526 2611
2527 /* 2612 /*
@@ -2554,10 +2639,7 @@ int regulator_set_optimum_mode(struct regulator *regulator, int uA_load)
2554 goto out; 2639 goto out;
2555 } 2640 }
2556 2641
2557 /* get input voltage */ 2642 /* No supply? Use constraint voltage */
2558 input_uV = 0;
2559 if (rdev->supply)
2560 input_uV = regulator_get_voltage(rdev->supply);
2561 if (input_uV <= 0) 2643 if (input_uV <= 0)
2562 input_uV = rdev->constraints->input_uV; 2644 input_uV = rdev->constraints->input_uV;
2563 if (input_uV <= 0) { 2645 if (input_uV <= 0) {
@@ -2628,7 +2710,7 @@ static void _notifier_call_chain(struct regulator_dev *rdev,
2628 unsigned long event, void *data) 2710 unsigned long event, void *data)
2629{ 2711{
2630 /* call rdev chain first */ 2712 /* call rdev chain first */
2631 blocking_notifier_call_chain(&rdev->notifier, event, NULL); 2713 blocking_notifier_call_chain(&rdev->notifier, event, data);
2632} 2714}
2633 2715
2634/** 2716/**
@@ -2909,10 +2991,10 @@ int regulator_mode_to_status(unsigned int mode)
2909 return REGULATOR_STATUS_NORMAL; 2991 return REGULATOR_STATUS_NORMAL;
2910 case REGULATOR_MODE_IDLE: 2992 case REGULATOR_MODE_IDLE:
2911 return REGULATOR_STATUS_IDLE; 2993 return REGULATOR_STATUS_IDLE;
2912 case REGULATOR_STATUS_STANDBY: 2994 case REGULATOR_MODE_STANDBY:
2913 return REGULATOR_STATUS_STANDBY; 2995 return REGULATOR_STATUS_STANDBY;
2914 default: 2996 default:
2915 return 0; 2997 return REGULATOR_STATUS_UNDEFINED;
2916 } 2998 }
2917} 2999}
2918EXPORT_SYMBOL_GPL(regulator_mode_to_status); 3000EXPORT_SYMBOL_GPL(regulator_mode_to_status);
@@ -3105,7 +3187,10 @@ regulator_register(const struct regulator_desc *regulator_desc,
3105 rdev->reg_data = config->driver_data; 3187 rdev->reg_data = config->driver_data;
3106 rdev->owner = regulator_desc->owner; 3188 rdev->owner = regulator_desc->owner;
3107 rdev->desc = regulator_desc; 3189 rdev->desc = regulator_desc;
3108 rdev->regmap = config->regmap; 3190 if (config->regmap)
3191 rdev->regmap = config->regmap;
3192 else
3193 rdev->regmap = dev_get_regmap(dev, NULL);
3109 INIT_LIST_HEAD(&rdev->consumer_list); 3194 INIT_LIST_HEAD(&rdev->consumer_list);
3110 INIT_LIST_HEAD(&rdev->list); 3195 INIT_LIST_HEAD(&rdev->list);
3111 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier); 3196 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier);
@@ -3132,6 +3217,26 @@ regulator_register(const struct regulator_desc *regulator_desc,
3132 3217
3133 dev_set_drvdata(&rdev->dev, rdev); 3218 dev_set_drvdata(&rdev->dev, rdev);
3134 3219
3220 if (config->ena_gpio) {
3221 ret = gpio_request_one(config->ena_gpio,
3222 GPIOF_DIR_OUT | config->ena_gpio_flags,
3223 rdev_get_name(rdev));
3224 if (ret != 0) {
3225 rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",
3226 config->ena_gpio, ret);
3227 goto clean;
3228 }
3229
3230 rdev->ena_gpio = config->ena_gpio;
3231 rdev->ena_gpio_invert = config->ena_gpio_invert;
3232
3233 if (config->ena_gpio_flags & GPIOF_OUT_INIT_HIGH)
3234 rdev->ena_gpio_state = 1;
3235
3236 if (rdev->ena_gpio_invert)
3237 rdev->ena_gpio_state = !rdev->ena_gpio_state;
3238 }
3239
3135 /* set regulator constraints */ 3240 /* set regulator constraints */
3136 if (init_data) 3241 if (init_data)
3137 constraints = &init_data->constraints; 3242 constraints = &init_data->constraints;
@@ -3200,6 +3305,8 @@ unset_supplies:
3200scrub: 3305scrub:
3201 if (rdev->supply) 3306 if (rdev->supply)
3202 regulator_put(rdev->supply); 3307 regulator_put(rdev->supply);
3308 if (rdev->ena_gpio)
3309 gpio_free(rdev->ena_gpio);
3203 kfree(rdev->constraints); 3310 kfree(rdev->constraints);
3204 device_unregister(&rdev->dev); 3311 device_unregister(&rdev->dev);
3205 /* device core frees rdev */ 3312 /* device core frees rdev */
@@ -3233,6 +3340,8 @@ void regulator_unregister(struct regulator_dev *rdev)
3233 unset_regulator_supplies(rdev); 3340 unset_regulator_supplies(rdev);
3234 list_del(&rdev->list); 3341 list_del(&rdev->list);
3235 kfree(rdev->constraints); 3342 kfree(rdev->constraints);
3343 if (rdev->ena_gpio)
3344 gpio_free(rdev->ena_gpio);
3236 device_unregister(&rdev->dev); 3345 device_unregister(&rdev->dev);
3237 mutex_unlock(&regulator_list_mutex); 3346 mutex_unlock(&regulator_list_mutex);
3238} 3347}
@@ -3472,6 +3581,15 @@ static int __init regulator_init_complete(void)
3472 struct regulation_constraints *c; 3581 struct regulation_constraints *c;
3473 int enabled, ret; 3582 int enabled, ret;
3474 3583
3584 /*
3585 * Since DT doesn't provide an idiomatic mechanism for
3586 * enabling full constraints and since it's much more natural
3587 * with DT to provide them just assume that a DT enabled
3588 * system has full constraints.
3589 */
3590 if (of_have_populated_dt())
3591 has_full_constraints = true;
3592
3475 mutex_lock(&regulator_list_mutex); 3593 mutex_lock(&regulator_list_mutex);
3476 3594
3477 /* If we have a full configuration then disable any regulators 3595 /* If we have a full configuration then disable any regulators
diff --git a/drivers/regulator/da903x.c b/drivers/regulator/da903x.c
index 1005f5f7e603..36c5b92fe0af 100644
--- a/drivers/regulator/da903x.c
+++ b/drivers/regulator/da903x.c
@@ -107,6 +107,9 @@ static int da903x_set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
107 struct device *da9034_dev = to_da903x_dev(rdev); 107 struct device *da9034_dev = to_da903x_dev(rdev);
108 uint8_t val, mask; 108 uint8_t val, mask;
109 109
110 if (rdev->desc->n_voltages == 1)
111 return -EINVAL;
112
110 val = selector << info->vol_shift; 113 val = selector << info->vol_shift;
111 mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; 114 mask = ((1 << info->vol_nbits) - 1) << info->vol_shift;
112 115
@@ -120,6 +123,9 @@ static int da903x_get_voltage_sel(struct regulator_dev *rdev)
120 uint8_t val, mask; 123 uint8_t val, mask;
121 int ret; 124 int ret;
122 125
126 if (rdev->desc->n_voltages == 1)
127 return 0;
128
123 ret = da903x_read(da9034_dev, info->vol_reg, &val); 129 ret = da903x_read(da9034_dev, info->vol_reg, &val);
124 if (ret) 130 if (ret)
125 return ret; 131 return ret;
diff --git a/drivers/regulator/da9052-regulator.c b/drivers/regulator/da9052-regulator.c
index 88976d8d44ed..903299cf15cf 100644
--- a/drivers/regulator/da9052-regulator.c
+++ b/drivers/regulator/da9052-regulator.c
@@ -405,12 +405,12 @@ static int __devinit da9052_regulator_probe(struct platform_device *pdev)
405 if (!nproot) 405 if (!nproot)
406 return -ENODEV; 406 return -ENODEV;
407 407
408 for (np = of_get_next_child(nproot, NULL); np; 408 for_each_child_of_node(nproot, np) {
409 np = of_get_next_child(nproot, np)) {
410 if (!of_node_cmp(np->name, 409 if (!of_node_cmp(np->name,
411 regulator->info->reg_desc.name)) { 410 regulator->info->reg_desc.name)) {
412 config.init_data = of_get_regulator_init_data( 411 config.init_data = of_get_regulator_init_data(
413 &pdev->dev, np); 412 &pdev->dev, np);
413 config.of_node = np;
414 break; 414 break;
415 } 415 }
416 } 416 }
diff --git a/drivers/regulator/fixed-helper.c b/drivers/regulator/fixed-helper.c
index cacd33c9d042..f9d027992aae 100644
--- a/drivers/regulator/fixed-helper.c
+++ b/drivers/regulator/fixed-helper.c
@@ -1,4 +1,5 @@
1#include <linux/slab.h> 1#include <linux/slab.h>
2#include <linux/string.h>
2#include <linux/platform_device.h> 3#include <linux/platform_device.h>
3#include <linux/regulator/machine.h> 4#include <linux/regulator/machine.h>
4#include <linux/regulator/fixed.h> 5#include <linux/regulator/fixed.h>
@@ -13,17 +14,20 @@ static void regulator_fixed_release(struct device *dev)
13{ 14{
14 struct fixed_regulator_data *data = container_of(dev, 15 struct fixed_regulator_data *data = container_of(dev,
15 struct fixed_regulator_data, pdev.dev); 16 struct fixed_regulator_data, pdev.dev);
17 kfree(data->cfg.supply_name);
16 kfree(data); 18 kfree(data);
17} 19}
18 20
19/** 21/**
20 * regulator_register_fixed - register a no-op fixed regulator 22 * regulator_register_fixed_name - register a no-op fixed regulator
21 * @id: platform device id 23 * @id: platform device id
24 * @name: name to be used for the regulator
22 * @supplies: consumers for this regulator 25 * @supplies: consumers for this regulator
23 * @num_supplies: number of consumers 26 * @num_supplies: number of consumers
27 * @uv: voltage in microvolts
24 */ 28 */
25struct platform_device *regulator_register_fixed(int id, 29struct platform_device *regulator_register_always_on(int id, const char *name,
26 struct regulator_consumer_supply *supplies, int num_supplies) 30 struct regulator_consumer_supply *supplies, int num_supplies, int uv)
27{ 31{
28 struct fixed_regulator_data *data; 32 struct fixed_regulator_data *data;
29 33
@@ -31,8 +35,13 @@ struct platform_device *regulator_register_fixed(int id,
31 if (!data) 35 if (!data)
32 return NULL; 36 return NULL;
33 37
34 data->cfg.supply_name = "fixed-dummy"; 38 data->cfg.supply_name = kstrdup(name, GFP_KERNEL);
35 data->cfg.microvolts = 0; 39 if (!data->cfg.supply_name) {
40 kfree(data);
41 return NULL;
42 }
43
44 data->cfg.microvolts = uv;
36 data->cfg.gpio = -EINVAL; 45 data->cfg.gpio = -EINVAL;
37 data->cfg.enabled_at_boot = 1; 46 data->cfg.enabled_at_boot = 1;
38 data->cfg.init_data = &data->init_data; 47 data->cfg.init_data = &data->init_data;
diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
index f09fe7b20e82..185468c4d38f 100644
--- a/drivers/regulator/fixed.c
+++ b/drivers/regulator/fixed.c
@@ -35,10 +35,6 @@ struct fixed_voltage_data {
35 struct regulator_desc desc; 35 struct regulator_desc desc;
36 struct regulator_dev *dev; 36 struct regulator_dev *dev;
37 int microvolts; 37 int microvolts;
38 int gpio;
39 unsigned startup_delay;
40 bool enable_high;
41 bool is_enabled;
42}; 38};
43 39
44 40
@@ -61,11 +57,11 @@ of_get_fixed_voltage_config(struct device *dev)
61 config = devm_kzalloc(dev, sizeof(struct fixed_voltage_config), 57 config = devm_kzalloc(dev, sizeof(struct fixed_voltage_config),
62 GFP_KERNEL); 58 GFP_KERNEL);
63 if (!config) 59 if (!config)
64 return NULL; 60 return ERR_PTR(-ENOMEM);
65 61
66 config->init_data = of_get_regulator_init_data(dev, dev->of_node); 62 config->init_data = of_get_regulator_init_data(dev, dev->of_node);
67 if (!config->init_data) 63 if (!config->init_data)
68 return NULL; 64 return ERR_PTR(-EINVAL);
69 65
70 init_data = config->init_data; 66 init_data = config->init_data;
71 init_data->constraints.apply_uV = 0; 67 init_data->constraints.apply_uV = 0;
@@ -76,13 +72,26 @@ of_get_fixed_voltage_config(struct device *dev)
76 } else { 72 } else {
77 dev_err(dev, 73 dev_err(dev,
78 "Fixed regulator specified with variable voltages\n"); 74 "Fixed regulator specified with variable voltages\n");
79 return NULL; 75 return ERR_PTR(-EINVAL);
80 } 76 }
81 77
82 if (init_data->constraints.boot_on) 78 if (init_data->constraints.boot_on)
83 config->enabled_at_boot = true; 79 config->enabled_at_boot = true;
84 80
85 config->gpio = of_get_named_gpio(np, "gpio", 0); 81 config->gpio = of_get_named_gpio(np, "gpio", 0);
82 /*
83 * of_get_named_gpio() currently returns ENODEV rather than
84 * EPROBE_DEFER. This code attempts to be compatible with both
85 * for now; the ENODEV check can be removed once the API is fixed.
86 * of_get_named_gpio() doesn't differentiate between a missing
87 * property (which would be fine here, since the GPIO is optional)
88 * and some other error. Patches have been posted for both issues.
89 * Once they are check in, we should replace this with:
90 * if (config->gpio < 0 && config->gpio != -ENOENT)
91 */
92 if ((config->gpio == -ENODEV) || (config->gpio == -EPROBE_DEFER))
93 return ERR_PTR(-EPROBE_DEFER);
94
86 delay = of_get_property(np, "startup-delay-us", NULL); 95 delay = of_get_property(np, "startup-delay-us", NULL);
87 if (delay) 96 if (delay)
88 config->startup_delay = be32_to_cpu(*delay); 97 config->startup_delay = be32_to_cpu(*delay);
@@ -93,41 +102,10 @@ of_get_fixed_voltage_config(struct device *dev)
93 if (of_find_property(np, "gpio-open-drain", NULL)) 102 if (of_find_property(np, "gpio-open-drain", NULL))
94 config->gpio_is_open_drain = true; 103 config->gpio_is_open_drain = true;
95 104
96 return config; 105 if (of_find_property(np, "vin-supply", NULL))
97} 106 config->input_supply = "vin";
98
99static int fixed_voltage_is_enabled(struct regulator_dev *dev)
100{
101 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
102
103 return data->is_enabled;
104}
105
106static int fixed_voltage_enable(struct regulator_dev *dev)
107{
108 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
109
110 gpio_set_value_cansleep(data->gpio, data->enable_high);
111 data->is_enabled = true;
112
113 return 0;
114}
115
116static int fixed_voltage_disable(struct regulator_dev *dev)
117{
118 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
119
120 gpio_set_value_cansleep(data->gpio, !data->enable_high);
121 data->is_enabled = false;
122
123 return 0;
124}
125 107
126static int fixed_voltage_enable_time(struct regulator_dev *dev) 108 return config;
127{
128 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
129
130 return data->startup_delay;
131} 109}
132 110
133static int fixed_voltage_get_voltage(struct regulator_dev *dev) 111static int fixed_voltage_get_voltage(struct regulator_dev *dev)
@@ -151,15 +129,6 @@ static int fixed_voltage_list_voltage(struct regulator_dev *dev,
151 return data->microvolts; 129 return data->microvolts;
152} 130}
153 131
154static struct regulator_ops fixed_voltage_gpio_ops = {
155 .is_enabled = fixed_voltage_is_enabled,
156 .enable = fixed_voltage_enable,
157 .disable = fixed_voltage_disable,
158 .enable_time = fixed_voltage_enable_time,
159 .get_voltage = fixed_voltage_get_voltage,
160 .list_voltage = fixed_voltage_list_voltage,
161};
162
163static struct regulator_ops fixed_voltage_ops = { 132static struct regulator_ops fixed_voltage_ops = {
164 .get_voltage = fixed_voltage_get_voltage, 133 .get_voltage = fixed_voltage_get_voltage,
165 .list_voltage = fixed_voltage_list_voltage, 134 .list_voltage = fixed_voltage_list_voltage,
@@ -172,10 +141,13 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
172 struct regulator_config cfg = { }; 141 struct regulator_config cfg = { };
173 int ret; 142 int ret;
174 143
175 if (pdev->dev.of_node) 144 if (pdev->dev.of_node) {
176 config = of_get_fixed_voltage_config(&pdev->dev); 145 config = of_get_fixed_voltage_config(&pdev->dev);
177 else 146 if (IS_ERR(config))
147 return PTR_ERR(config);
148 } else {
178 config = pdev->dev.platform_data; 149 config = pdev->dev.platform_data;
150 }
179 151
180 if (!config) 152 if (!config)
181 return -ENOMEM; 153 return -ENOMEM;
@@ -196,59 +168,44 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
196 } 168 }
197 drvdata->desc.type = REGULATOR_VOLTAGE; 169 drvdata->desc.type = REGULATOR_VOLTAGE;
198 drvdata->desc.owner = THIS_MODULE; 170 drvdata->desc.owner = THIS_MODULE;
171 drvdata->desc.ops = &fixed_voltage_ops;
199 172
200 if (config->microvolts) 173 drvdata->desc.enable_time = config->startup_delay;
201 drvdata->desc.n_voltages = 1;
202 174
203 drvdata->microvolts = config->microvolts; 175 if (config->input_supply) {
204 drvdata->gpio = config->gpio; 176 drvdata->desc.supply_name = kstrdup(config->input_supply,
205 drvdata->startup_delay = config->startup_delay; 177 GFP_KERNEL);
206 178 if (!drvdata->desc.supply_name) {
207 if (gpio_is_valid(config->gpio)) {
208 int gpio_flag;
209 drvdata->enable_high = config->enable_high;
210
211 /* FIXME: Remove below print warning
212 *
213 * config->gpio must be set to -EINVAL by platform code if
214 * GPIO control is not required. However, early adopters
215 * not requiring GPIO control may forget to initialize
216 * config->gpio to -EINVAL. This will cause GPIO 0 to be used
217 * for GPIO control.
218 *
219 * This warning will be removed once there are a couple of users
220 * for this driver.
221 */
222 if (!config->gpio)
223 dev_warn(&pdev->dev,
224 "using GPIO 0 for regulator enable control\n");
225
226 /*
227 * set output direction without changing state
228 * to prevent glitch
229 */
230 drvdata->is_enabled = config->enabled_at_boot;
231 ret = drvdata->is_enabled ?
232 config->enable_high : !config->enable_high;
233 gpio_flag = ret ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
234
235 if (config->gpio_is_open_drain)
236 gpio_flag |= GPIOF_OPEN_DRAIN;
237
238 ret = gpio_request_one(config->gpio, gpio_flag,
239 config->supply_name);
240 if (ret) {
241 dev_err(&pdev->dev, 179 dev_err(&pdev->dev,
242 "Could not obtain regulator enable GPIO %d: %d\n", 180 "Failed to allocate input supply\n");
243 config->gpio, ret); 181 ret = -ENOMEM;
244 goto err_name; 182 goto err_name;
245 } 183 }
184 }
185
186 if (config->microvolts)
187 drvdata->desc.n_voltages = 1;
246 188
247 drvdata->desc.ops = &fixed_voltage_gpio_ops; 189 drvdata->microvolts = config->microvolts;
248 190
191 if (config->gpio >= 0)
192 cfg.ena_gpio = config->gpio;
193 cfg.ena_gpio_invert = !config->enable_high;
194 if (config->enabled_at_boot) {
195 if (config->enable_high) {
196 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
197 } else {
198 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
199 }
249 } else { 200 } else {
250 drvdata->desc.ops = &fixed_voltage_ops; 201 if (config->enable_high) {
202 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
203 } else {
204 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
205 }
251 } 206 }
207 if (config->gpio_is_open_drain)
208 cfg.ena_gpio_flags |= GPIOF_OPEN_DRAIN;
252 209
253 cfg.dev = &pdev->dev; 210 cfg.dev = &pdev->dev;
254 cfg.init_data = config->init_data; 211 cfg.init_data = config->init_data;
@@ -259,7 +216,7 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
259 if (IS_ERR(drvdata->dev)) { 216 if (IS_ERR(drvdata->dev)) {
260 ret = PTR_ERR(drvdata->dev); 217 ret = PTR_ERR(drvdata->dev);
261 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret); 218 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
262 goto err_gpio; 219 goto err_input;
263 } 220 }
264 221
265 platform_set_drvdata(pdev, drvdata); 222 platform_set_drvdata(pdev, drvdata);
@@ -269,9 +226,8 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
269 226
270 return 0; 227 return 0;
271 228
272err_gpio: 229err_input:
273 if (gpio_is_valid(config->gpio)) 230 kfree(drvdata->desc.supply_name);
274 gpio_free(config->gpio);
275err_name: 231err_name:
276 kfree(drvdata->desc.name); 232 kfree(drvdata->desc.name);
277err: 233err:
@@ -283,8 +239,7 @@ static int __devexit reg_fixed_voltage_remove(struct platform_device *pdev)
283 struct fixed_voltage_data *drvdata = platform_get_drvdata(pdev); 239 struct fixed_voltage_data *drvdata = platform_get_drvdata(pdev);
284 240
285 regulator_unregister(drvdata->dev); 241 regulator_unregister(drvdata->dev);
286 if (gpio_is_valid(drvdata->gpio)) 242 kfree(drvdata->desc.supply_name);
287 gpio_free(drvdata->gpio);
288 kfree(drvdata->desc.name); 243 kfree(drvdata->desc.name);
289 244
290 return 0; 245 return 0;
@@ -296,8 +251,6 @@ static const struct of_device_id fixed_of_match[] __devinitconst = {
296 {}, 251 {},
297}; 252};
298MODULE_DEVICE_TABLE(of, fixed_of_match); 253MODULE_DEVICE_TABLE(of, fixed_of_match);
299#else
300#define fixed_of_match NULL
301#endif 254#endif
302 255
303static struct platform_driver regulator_fixed_voltage_driver = { 256static struct platform_driver regulator_fixed_voltage_driver = {
@@ -306,7 +259,7 @@ static struct platform_driver regulator_fixed_voltage_driver = {
306 .driver = { 259 .driver = {
307 .name = "reg-fixed-voltage", 260 .name = "reg-fixed-voltage",
308 .owner = THIS_MODULE, 261 .owner = THIS_MODULE,
309 .of_match_table = fixed_of_match, 262 .of_match_table = of_match_ptr(fixed_of_match),
310 }, 263 },
311}; 264};
312 265
diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 242851a4c1a6..34b67bee9323 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -36,11 +36,6 @@ struct gpio_regulator_data {
36 struct regulator_desc desc; 36 struct regulator_desc desc;
37 struct regulator_dev *dev; 37 struct regulator_dev *dev;
38 38
39 int enable_gpio;
40 bool enable_high;
41 bool is_enabled;
42 unsigned startup_delay;
43
44 struct gpio *gpios; 39 struct gpio *gpios;
45 int nr_gpios; 40 int nr_gpios;
46 41
@@ -50,44 +45,6 @@ struct gpio_regulator_data {
50 int state; 45 int state;
51}; 46};
52 47
53static int gpio_regulator_is_enabled(struct regulator_dev *dev)
54{
55 struct gpio_regulator_data *data = rdev_get_drvdata(dev);
56
57 return data->is_enabled;
58}
59
60static int gpio_regulator_enable(struct regulator_dev *dev)
61{
62 struct gpio_regulator_data *data = rdev_get_drvdata(dev);
63
64 if (gpio_is_valid(data->enable_gpio)) {
65 gpio_set_value_cansleep(data->enable_gpio, data->enable_high);
66 data->is_enabled = true;
67 }
68
69 return 0;
70}
71
72static int gpio_regulator_disable(struct regulator_dev *dev)
73{
74 struct gpio_regulator_data *data = rdev_get_drvdata(dev);
75
76 if (gpio_is_valid(data->enable_gpio)) {
77 gpio_set_value_cansleep(data->enable_gpio, !data->enable_high);
78 data->is_enabled = false;
79 }
80
81 return 0;
82}
83
84static int gpio_regulator_enable_time(struct regulator_dev *dev)
85{
86 struct gpio_regulator_data *data = rdev_get_drvdata(dev);
87
88 return data->startup_delay;
89}
90
91static int gpio_regulator_get_value(struct regulator_dev *dev) 48static int gpio_regulator_get_value(struct regulator_dev *dev)
92{ 49{
93 struct gpio_regulator_data *data = rdev_get_drvdata(dev); 50 struct gpio_regulator_data *data = rdev_get_drvdata(dev);
@@ -153,20 +110,12 @@ static int gpio_regulator_set_current_limit(struct regulator_dev *dev,
153} 110}
154 111
155static struct regulator_ops gpio_regulator_voltage_ops = { 112static struct regulator_ops gpio_regulator_voltage_ops = {
156 .is_enabled = gpio_regulator_is_enabled,
157 .enable = gpio_regulator_enable,
158 .disable = gpio_regulator_disable,
159 .enable_time = gpio_regulator_enable_time,
160 .get_voltage = gpio_regulator_get_value, 113 .get_voltage = gpio_regulator_get_value,
161 .set_voltage = gpio_regulator_set_voltage, 114 .set_voltage = gpio_regulator_set_voltage,
162 .list_voltage = gpio_regulator_list_voltage, 115 .list_voltage = gpio_regulator_list_voltage,
163}; 116};
164 117
165static struct regulator_ops gpio_regulator_current_ops = { 118static struct regulator_ops gpio_regulator_current_ops = {
166 .is_enabled = gpio_regulator_is_enabled,
167 .enable = gpio_regulator_enable,
168 .disable = gpio_regulator_disable,
169 .enable_time = gpio_regulator_enable_time,
170 .get_current_limit = gpio_regulator_get_value, 119 .get_current_limit = gpio_regulator_get_value,
171 .set_current_limit = gpio_regulator_set_current_limit, 120 .set_current_limit = gpio_regulator_set_current_limit,
172}; 121};
@@ -213,6 +162,7 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
213 drvdata->nr_states = config->nr_states; 162 drvdata->nr_states = config->nr_states;
214 163
215 drvdata->desc.owner = THIS_MODULE; 164 drvdata->desc.owner = THIS_MODULE;
165 drvdata->desc.enable_time = config->startup_delay;
216 166
217 /* handle regulator type*/ 167 /* handle regulator type*/
218 switch (config->type) { 168 switch (config->type) {
@@ -232,52 +182,12 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
232 break; 182 break;
233 } 183 }
234 184
235 drvdata->enable_gpio = config->enable_gpio;
236 drvdata->startup_delay = config->startup_delay;
237
238 if (gpio_is_valid(config->enable_gpio)) {
239 drvdata->enable_high = config->enable_high;
240
241 ret = gpio_request(config->enable_gpio, config->supply_name);
242 if (ret) {
243 dev_err(&pdev->dev,
244 "Could not obtain regulator enable GPIO %d: %d\n",
245 config->enable_gpio, ret);
246 goto err_memstate;
247 }
248
249 /* set output direction without changing state
250 * to prevent glitch
251 */
252 if (config->enabled_at_boot) {
253 drvdata->is_enabled = true;
254 ret = gpio_direction_output(config->enable_gpio,
255 config->enable_high);
256 } else {
257 drvdata->is_enabled = false;
258 ret = gpio_direction_output(config->enable_gpio,
259 !config->enable_high);
260 }
261
262 if (ret) {
263 dev_err(&pdev->dev,
264 "Could not configure regulator enable GPIO %d direction: %d\n",
265 config->enable_gpio, ret);
266 goto err_enablegpio;
267 }
268 } else {
269 /* Regulator without GPIO control is considered
270 * always enabled
271 */
272 drvdata->is_enabled = true;
273 }
274
275 drvdata->nr_gpios = config->nr_gpios; 185 drvdata->nr_gpios = config->nr_gpios;
276 ret = gpio_request_array(drvdata->gpios, drvdata->nr_gpios); 186 ret = gpio_request_array(drvdata->gpios, drvdata->nr_gpios);
277 if (ret) { 187 if (ret) {
278 dev_err(&pdev->dev, 188 dev_err(&pdev->dev,
279 "Could not obtain regulator setting GPIOs: %d\n", ret); 189 "Could not obtain regulator setting GPIOs: %d\n", ret);
280 goto err_enablegpio; 190 goto err_memstate;
281 } 191 }
282 192
283 /* build initial state from gpio init data. */ 193 /* build initial state from gpio init data. */
@@ -292,6 +202,21 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
292 cfg.init_data = config->init_data; 202 cfg.init_data = config->init_data;
293 cfg.driver_data = drvdata; 203 cfg.driver_data = drvdata;
294 204
205 if (config->enable_gpio >= 0)
206 cfg.ena_gpio = config->enable_gpio;
207 cfg.ena_gpio_invert = !config->enable_high;
208 if (config->enabled_at_boot) {
209 if (config->enable_high)
210 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
211 else
212 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
213 } else {
214 if (config->enable_high)
215 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
216 else
217 cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
218 }
219
295 drvdata->dev = regulator_register(&drvdata->desc, &cfg); 220 drvdata->dev = regulator_register(&drvdata->desc, &cfg);
296 if (IS_ERR(drvdata->dev)) { 221 if (IS_ERR(drvdata->dev)) {
297 ret = PTR_ERR(drvdata->dev); 222 ret = PTR_ERR(drvdata->dev);
@@ -305,9 +230,6 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
305 230
306err_stategpio: 231err_stategpio:
307 gpio_free_array(drvdata->gpios, drvdata->nr_gpios); 232 gpio_free_array(drvdata->gpios, drvdata->nr_gpios);
308err_enablegpio:
309 if (gpio_is_valid(config->enable_gpio))
310 gpio_free(config->enable_gpio);
311err_memstate: 233err_memstate:
312 kfree(drvdata->states); 234 kfree(drvdata->states);
313err_memgpio: 235err_memgpio:
@@ -329,9 +251,6 @@ static int __devexit gpio_regulator_remove(struct platform_device *pdev)
329 kfree(drvdata->states); 251 kfree(drvdata->states);
330 kfree(drvdata->gpios); 252 kfree(drvdata->gpios);
331 253
332 if (gpio_is_valid(drvdata->enable_gpio))
333 gpio_free(drvdata->enable_gpio);
334
335 kfree(drvdata->desc.name); 254 kfree(drvdata->desc.name);
336 255
337 return 0; 256 return 0;
diff --git a/drivers/regulator/isl6271a-regulator.c b/drivers/regulator/isl6271a-regulator.c
index 56d273f25603..1d145a07ada9 100644
--- a/drivers/regulator/isl6271a-regulator.c
+++ b/drivers/regulator/isl6271a-regulator.c
@@ -75,19 +75,12 @@ static struct regulator_ops isl_core_ops = {
75 75
76static int isl6271a_get_fixed_voltage(struct regulator_dev *dev) 76static int isl6271a_get_fixed_voltage(struct regulator_dev *dev)
77{ 77{
78 int id = rdev_get_id(dev); 78 return dev->desc->min_uV;
79 return (id == 1) ? 1100000 : 1300000;
80}
81
82static int isl6271a_list_fixed_voltage(struct regulator_dev *dev, unsigned selector)
83{
84 int id = rdev_get_id(dev);
85 return (id == 1) ? 1100000 : 1300000;
86} 79}
87 80
88static struct regulator_ops isl_fixed_ops = { 81static struct regulator_ops isl_fixed_ops = {
89 .get_voltage = isl6271a_get_fixed_voltage, 82 .get_voltage = isl6271a_get_fixed_voltage,
90 .list_voltage = isl6271a_list_fixed_voltage, 83 .list_voltage = regulator_list_voltage_linear,
91}; 84};
92 85
93static const struct regulator_desc isl_rd[] = { 86static const struct regulator_desc isl_rd[] = {
@@ -107,6 +100,7 @@ static const struct regulator_desc isl_rd[] = {
107 .ops = &isl_fixed_ops, 100 .ops = &isl_fixed_ops,
108 .type = REGULATOR_VOLTAGE, 101 .type = REGULATOR_VOLTAGE,
109 .owner = THIS_MODULE, 102 .owner = THIS_MODULE,
103 .min_uV = 1100000,
110 }, { 104 }, {
111 .name = "LDO2", 105 .name = "LDO2",
112 .id = 2, 106 .id = 2,
@@ -114,6 +108,7 @@ static const struct regulator_desc isl_rd[] = {
114 .ops = &isl_fixed_ops, 108 .ops = &isl_fixed_ops,
115 .type = REGULATOR_VOLTAGE, 109 .type = REGULATOR_VOLTAGE,
116 .owner = THIS_MODULE, 110 .owner = THIS_MODULE,
111 .min_uV = 1300000,
117 }, 112 },
118}; 113};
119 114
diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c
index 981bea9cb9d7..7c6e3b8ff484 100644
--- a/drivers/regulator/lp3971.c
+++ b/drivers/regulator/lp3971.c
@@ -65,11 +65,11 @@ static const int buck_base_addr[] = {
65#define LP3971_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x]) 65#define LP3971_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x])
66#define LP3971_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1) 66#define LP3971_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1)
67 67
68static const int buck_voltage_map[] = { 68static const unsigned int buck_voltage_map[] = {
69 0, 800, 850, 900, 950, 1000, 1050, 1100, 69 0, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000,
70 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, 70 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000,
71 1550, 1600, 1650, 1700, 1800, 1900, 2500, 2800, 71 1550000, 1600000, 1650000, 1700000, 1800000, 1900000, 2500000, 2800000,
72 3000, 3300, 72 3000000, 3300000,
73}; 73};
74 74
75#define BUCK_TARGET_VOL_MASK 0x3f 75#define BUCK_TARGET_VOL_MASK 0x3f
@@ -98,39 +98,19 @@ static const int buck_voltage_map[] = {
98#define LDO_VOL_CONTR_SHIFT(x) ((x & 1) << 2) 98#define LDO_VOL_CONTR_SHIFT(x) ((x & 1) << 2)
99#define LDO_VOL_CONTR_MASK 0x0f 99#define LDO_VOL_CONTR_MASK 0x0f
100 100
101static const int ldo45_voltage_map[] = { 101static const unsigned int ldo45_voltage_map[] = {
102 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 102 1000000, 1050000, 1100000, 1150000, 1200000, 1250000, 1300000, 1350000,
103 1400, 1500, 1800, 1900, 2500, 2800, 3000, 3300, 103 1400000, 1500000, 1800000, 1900000, 2500000, 2800000, 3000000, 3300000,
104}; 104};
105 105
106static const int ldo123_voltage_map[] = { 106static const unsigned int ldo123_voltage_map[] = {
107 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 107 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
108 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 108 2600000, 2700000, 2800000, 2900000, 3000000, 3100000, 3200000, 3300000,
109}; 109};
110 110
111static const int *ldo_voltage_map[] = {
112 ldo123_voltage_map, /* LDO1 */
113 ldo123_voltage_map, /* LDO2 */
114 ldo123_voltage_map, /* LDO3 */
115 ldo45_voltage_map, /* LDO4 */
116 ldo45_voltage_map, /* LDO5 */
117};
118
119#define LDO_VOL_VALUE_MAP(x) (ldo_voltage_map[(x - LP3971_LDO1)])
120
121#define LDO_VOL_MIN_IDX 0x00 111#define LDO_VOL_MIN_IDX 0x00
122#define LDO_VOL_MAX_IDX 0x0f 112#define LDO_VOL_MAX_IDX 0x0f
123 113
124static int lp3971_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
125{
126 int ldo = rdev_get_id(dev) - LP3971_LDO1;
127
128 if (index > LDO_VOL_MAX_IDX)
129 return -EINVAL;
130
131 return 1000 * LDO_VOL_VALUE_MAP(ldo)[index];
132}
133
134static int lp3971_ldo_is_enabled(struct regulator_dev *dev) 114static int lp3971_ldo_is_enabled(struct regulator_dev *dev)
135{ 115{
136 struct lp3971 *lp3971 = rdev_get_drvdata(dev); 116 struct lp3971 *lp3971 = rdev_get_drvdata(dev);
@@ -169,7 +149,7 @@ static int lp3971_ldo_get_voltage(struct regulator_dev *dev)
169 reg = lp3971_reg_read(lp3971, LP3971_LDO_VOL_CONTR_REG(ldo)); 149 reg = lp3971_reg_read(lp3971, LP3971_LDO_VOL_CONTR_REG(ldo));
170 val = (reg >> LDO_VOL_CONTR_SHIFT(ldo)) & LDO_VOL_CONTR_MASK; 150 val = (reg >> LDO_VOL_CONTR_SHIFT(ldo)) & LDO_VOL_CONTR_MASK;
171 151
172 return 1000 * LDO_VOL_VALUE_MAP(ldo)[val]; 152 return dev->desc->volt_table[val];
173} 153}
174 154
175static int lp3971_ldo_set_voltage_sel(struct regulator_dev *dev, 155static int lp3971_ldo_set_voltage_sel(struct regulator_dev *dev,
@@ -184,7 +164,7 @@ static int lp3971_ldo_set_voltage_sel(struct regulator_dev *dev,
184} 164}
185 165
186static struct regulator_ops lp3971_ldo_ops = { 166static struct regulator_ops lp3971_ldo_ops = {
187 .list_voltage = lp3971_ldo_list_voltage, 167 .list_voltage = regulator_list_voltage_table,
188 .is_enabled = lp3971_ldo_is_enabled, 168 .is_enabled = lp3971_ldo_is_enabled,
189 .enable = lp3971_ldo_enable, 169 .enable = lp3971_ldo_enable,
190 .disable = lp3971_ldo_disable, 170 .disable = lp3971_ldo_disable,
@@ -192,14 +172,6 @@ static struct regulator_ops lp3971_ldo_ops = {
192 .set_voltage_sel = lp3971_ldo_set_voltage_sel, 172 .set_voltage_sel = lp3971_ldo_set_voltage_sel,
193}; 173};
194 174
195static int lp3971_dcdc_list_voltage(struct regulator_dev *dev, unsigned index)
196{
197 if (index < BUCK_TARGET_VOL_MIN_IDX || index > BUCK_TARGET_VOL_MAX_IDX)
198 return -EINVAL;
199
200 return 1000 * buck_voltage_map[index];
201}
202
203static int lp3971_dcdc_is_enabled(struct regulator_dev *dev) 175static int lp3971_dcdc_is_enabled(struct regulator_dev *dev)
204{ 176{
205 struct lp3971 *lp3971 = rdev_get_drvdata(dev); 177 struct lp3971 *lp3971 = rdev_get_drvdata(dev);
@@ -240,7 +212,7 @@ static int lp3971_dcdc_get_voltage(struct regulator_dev *dev)
240 reg &= BUCK_TARGET_VOL_MASK; 212 reg &= BUCK_TARGET_VOL_MASK;
241 213
242 if (reg <= BUCK_TARGET_VOL_MAX_IDX) 214 if (reg <= BUCK_TARGET_VOL_MAX_IDX)
243 val = 1000 * buck_voltage_map[reg]; 215 val = buck_voltage_map[reg];
244 else { 216 else {
245 val = 0; 217 val = 0;
246 dev_warn(&dev->dev, "chip reported incorrect voltage value.\n"); 218 dev_warn(&dev->dev, "chip reported incorrect voltage value.\n");
@@ -273,7 +245,7 @@ static int lp3971_dcdc_set_voltage_sel(struct regulator_dev *dev,
273} 245}
274 246
275static struct regulator_ops lp3971_dcdc_ops = { 247static struct regulator_ops lp3971_dcdc_ops = {
276 .list_voltage = lp3971_dcdc_list_voltage, 248 .list_voltage = regulator_list_voltage_table,
277 .is_enabled = lp3971_dcdc_is_enabled, 249 .is_enabled = lp3971_dcdc_is_enabled,
278 .enable = lp3971_dcdc_enable, 250 .enable = lp3971_dcdc_enable,
279 .disable = lp3971_dcdc_disable, 251 .disable = lp3971_dcdc_disable,
@@ -287,6 +259,7 @@ static const struct regulator_desc regulators[] = {
287 .id = LP3971_LDO1, 259 .id = LP3971_LDO1,
288 .ops = &lp3971_ldo_ops, 260 .ops = &lp3971_ldo_ops,
289 .n_voltages = ARRAY_SIZE(ldo123_voltage_map), 261 .n_voltages = ARRAY_SIZE(ldo123_voltage_map),
262 .volt_table = ldo123_voltage_map,
290 .type = REGULATOR_VOLTAGE, 263 .type = REGULATOR_VOLTAGE,
291 .owner = THIS_MODULE, 264 .owner = THIS_MODULE,
292 }, 265 },
@@ -295,6 +268,7 @@ static const struct regulator_desc regulators[] = {
295 .id = LP3971_LDO2, 268 .id = LP3971_LDO2,
296 .ops = &lp3971_ldo_ops, 269 .ops = &lp3971_ldo_ops,
297 .n_voltages = ARRAY_SIZE(ldo123_voltage_map), 270 .n_voltages = ARRAY_SIZE(ldo123_voltage_map),
271 .volt_table = ldo123_voltage_map,
298 .type = REGULATOR_VOLTAGE, 272 .type = REGULATOR_VOLTAGE,
299 .owner = THIS_MODULE, 273 .owner = THIS_MODULE,
300 }, 274 },
@@ -303,6 +277,7 @@ static const struct regulator_desc regulators[] = {
303 .id = LP3971_LDO3, 277 .id = LP3971_LDO3,
304 .ops = &lp3971_ldo_ops, 278 .ops = &lp3971_ldo_ops,
305 .n_voltages = ARRAY_SIZE(ldo123_voltage_map), 279 .n_voltages = ARRAY_SIZE(ldo123_voltage_map),
280 .volt_table = ldo123_voltage_map,
306 .type = REGULATOR_VOLTAGE, 281 .type = REGULATOR_VOLTAGE,
307 .owner = THIS_MODULE, 282 .owner = THIS_MODULE,
308 }, 283 },
@@ -311,6 +286,7 @@ static const struct regulator_desc regulators[] = {
311 .id = LP3971_LDO4, 286 .id = LP3971_LDO4,
312 .ops = &lp3971_ldo_ops, 287 .ops = &lp3971_ldo_ops,
313 .n_voltages = ARRAY_SIZE(ldo45_voltage_map), 288 .n_voltages = ARRAY_SIZE(ldo45_voltage_map),
289 .volt_table = ldo45_voltage_map,
314 .type = REGULATOR_VOLTAGE, 290 .type = REGULATOR_VOLTAGE,
315 .owner = THIS_MODULE, 291 .owner = THIS_MODULE,
316 }, 292 },
@@ -319,6 +295,7 @@ static const struct regulator_desc regulators[] = {
319 .id = LP3971_LDO5, 295 .id = LP3971_LDO5,
320 .ops = &lp3971_ldo_ops, 296 .ops = &lp3971_ldo_ops,
321 .n_voltages = ARRAY_SIZE(ldo45_voltage_map), 297 .n_voltages = ARRAY_SIZE(ldo45_voltage_map),
298 .volt_table = ldo45_voltage_map,
322 .type = REGULATOR_VOLTAGE, 299 .type = REGULATOR_VOLTAGE,
323 .owner = THIS_MODULE, 300 .owner = THIS_MODULE,
324 }, 301 },
@@ -327,6 +304,7 @@ static const struct regulator_desc regulators[] = {
327 .id = LP3971_DCDC1, 304 .id = LP3971_DCDC1,
328 .ops = &lp3971_dcdc_ops, 305 .ops = &lp3971_dcdc_ops,
329 .n_voltages = ARRAY_SIZE(buck_voltage_map), 306 .n_voltages = ARRAY_SIZE(buck_voltage_map),
307 .volt_table = buck_voltage_map,
330 .type = REGULATOR_VOLTAGE, 308 .type = REGULATOR_VOLTAGE,
331 .owner = THIS_MODULE, 309 .owner = THIS_MODULE,
332 }, 310 },
@@ -335,6 +313,7 @@ static const struct regulator_desc regulators[] = {
335 .id = LP3971_DCDC2, 313 .id = LP3971_DCDC2,
336 .ops = &lp3971_dcdc_ops, 314 .ops = &lp3971_dcdc_ops,
337 .n_voltages = ARRAY_SIZE(buck_voltage_map), 315 .n_voltages = ARRAY_SIZE(buck_voltage_map),
316 .volt_table = buck_voltage_map,
338 .type = REGULATOR_VOLTAGE, 317 .type = REGULATOR_VOLTAGE,
339 .owner = THIS_MODULE, 318 .owner = THIS_MODULE,
340 }, 319 },
@@ -343,6 +322,7 @@ static const struct regulator_desc regulators[] = {
343 .id = LP3971_DCDC3, 322 .id = LP3971_DCDC3,
344 .ops = &lp3971_dcdc_ops, 323 .ops = &lp3971_dcdc_ops,
345 .n_voltages = ARRAY_SIZE(buck_voltage_map), 324 .n_voltages = ARRAY_SIZE(buck_voltage_map),
325 .volt_table = buck_voltage_map,
346 .type = REGULATOR_VOLTAGE, 326 .type = REGULATOR_VOLTAGE,
347 .owner = THIS_MODULE, 327 .owner = THIS_MODULE,
348 }, 328 },
diff --git a/drivers/regulator/lp3972.c b/drivers/regulator/lp3972.c
index de073df7d344..3cdc755d9b22 100644
--- a/drivers/regulator/lp3972.c
+++ b/drivers/regulator/lp3972.c
@@ -74,54 +74,40 @@ struct lp3972 {
74#define LP3972_OVER2_LDO4_EN BIT(4) 74#define LP3972_OVER2_LDO4_EN BIT(4)
75#define LP3972_OVER1_S_EN BIT(2) 75#define LP3972_OVER1_S_EN BIT(2)
76 76
77static const int ldo1_voltage_map[] = { 77static const unsigned int ldo1_voltage_map[] = {
78 1700, 1725, 1750, 1775, 1800, 1825, 1850, 1875, 78 1700000, 1725000, 1750000, 1775000, 1800000, 1825000, 1850000, 1875000,
79 1900, 1925, 1950, 1975, 2000, 79 1900000, 1925000, 1950000, 1975000, 2000000,
80}; 80};
81 81
82static const int ldo23_voltage_map[] = { 82static const unsigned int ldo23_voltage_map[] = {
83 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 83 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
84 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 84 2600000, 2700000, 2800000, 2900000, 3000000, 3100000, 3200000, 3300000,
85}; 85};
86 86
87static const int ldo4_voltage_map[] = { 87static const unsigned int ldo4_voltage_map[] = {
88 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 88 1000000, 1050000, 1100000, 1150000, 1200000, 1250000, 1300000, 1350000,
89 1400, 1500, 1800, 1900, 2500, 2800, 3000, 3300, 89 1400000, 1500000, 1800000, 1900000, 2500000, 2800000, 3000000, 3300000,
90}; 90};
91 91
92static const int ldo5_voltage_map[] = { 92static const unsigned int ldo5_voltage_map[] = {
93 0, 0, 0, 0, 0, 850, 875, 900, 93 0, 0, 0, 0, 0, 850000, 875000, 900000,
94 925, 950, 975, 1000, 1025, 1050, 1075, 1100, 94 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000,
95 1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 95 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
96 1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 96 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
97}; 97};
98 98
99static const int buck1_voltage_map[] = { 99static const unsigned int buck1_voltage_map[] = {
100 725, 750, 775, 800, 825, 850, 875, 900, 100 725000, 750000, 775000, 800000, 825000, 850000, 875000, 900000,
101 925, 950, 975, 1000, 1025, 1050, 1075, 1100, 101 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000,
102 1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 102 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
103 1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 103 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
104}; 104};
105 105
106static const int buck23_voltage_map[] = { 106static const unsigned int buck23_voltage_map[] = {
107 0, 800, 850, 900, 950, 1000, 1050, 1100, 107 0, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000,
108 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, 108 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000,
109 1550, 1600, 1650, 1700, 1800, 1900, 2500, 2800, 109 1550000, 1600000, 1650000, 1700000, 1800000, 1900000, 2500000, 2800000,
110 3000, 3300, 110 3000000, 3300000,
111};
112
113static const int *ldo_voltage_map[] = {
114 ldo1_voltage_map,
115 ldo23_voltage_map,
116 ldo23_voltage_map,
117 ldo4_voltage_map,
118 ldo5_voltage_map,
119};
120
121static const int *buck_voltage_map[] = {
122 buck1_voltage_map,
123 buck23_voltage_map,
124 buck23_voltage_map,
125}; 111};
126 112
127static const int ldo_output_enable_mask[] = { 113static const int ldo_output_enable_mask[] = {
@@ -160,7 +146,6 @@ static const int buck_base_addr[] = {
160 LP3972_B3TV_REG, 146 LP3972_B3TV_REG,
161}; 147};
162 148
163#define LP3972_LDO_VOL_VALUE_MAP(x) (ldo_voltage_map[x])
164#define LP3972_LDO_OUTPUT_ENABLE_MASK(x) (ldo_output_enable_mask[x]) 149#define LP3972_LDO_OUTPUT_ENABLE_MASK(x) (ldo_output_enable_mask[x])
165#define LP3972_LDO_OUTPUT_ENABLE_REG(x) (ldo_output_enable_addr[x]) 150#define LP3972_LDO_OUTPUT_ENABLE_REG(x) (ldo_output_enable_addr[x])
166 151
@@ -177,7 +162,6 @@ static const int buck_base_addr[] = {
177#define LP3972_LDO_VOL_MIN_IDX(x) (((x) == 4) ? 0x05 : 0x00) 162#define LP3972_LDO_VOL_MIN_IDX(x) (((x) == 4) ? 0x05 : 0x00)
178#define LP3972_LDO_VOL_MAX_IDX(x) ((x) ? (((x) == 4) ? 0x1f : 0x0f) : 0x0c) 163#define LP3972_LDO_VOL_MAX_IDX(x) ((x) ? (((x) == 4) ? 0x1f : 0x0f) : 0x0c)
179 164
180#define LP3972_BUCK_VOL_VALUE_MAP(x) (buck_voltage_map[x])
181#define LP3972_BUCK_VOL_ENABLE_REG(x) (buck_vol_enable_addr[x]) 165#define LP3972_BUCK_VOL_ENABLE_REG(x) (buck_vol_enable_addr[x])
182#define LP3972_BUCK_VOL1_REG(x) (buck_base_addr[x]) 166#define LP3972_BUCK_VOL1_REG(x) (buck_base_addr[x])
183#define LP3972_BUCK_VOL_MASK 0x1f 167#define LP3972_BUCK_VOL_MASK 0x1f
@@ -242,17 +226,6 @@ static int lp3972_set_bits(struct lp3972 *lp3972, u8 reg, u16 mask, u16 val)
242 return ret; 226 return ret;
243} 227}
244 228
245static int lp3972_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
246{
247 int ldo = rdev_get_id(dev) - LP3972_LDO1;
248
249 if (index < LP3972_LDO_VOL_MIN_IDX(ldo) ||
250 index > LP3972_LDO_VOL_MAX_IDX(ldo))
251 return -EINVAL;
252
253 return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[index];
254}
255
256static int lp3972_ldo_is_enabled(struct regulator_dev *dev) 229static int lp3972_ldo_is_enabled(struct regulator_dev *dev)
257{ 230{
258 struct lp3972 *lp3972 = rdev_get_drvdata(dev); 231 struct lp3972 *lp3972 = rdev_get_drvdata(dev);
@@ -294,7 +267,7 @@ static int lp3972_ldo_get_voltage(struct regulator_dev *dev)
294 reg = lp3972_reg_read(lp3972, LP3972_LDO_VOL_CONTR_REG(ldo)); 267 reg = lp3972_reg_read(lp3972, LP3972_LDO_VOL_CONTR_REG(ldo));
295 val = (reg >> LP3972_LDO_VOL_CONTR_SHIFT(ldo)) & mask; 268 val = (reg >> LP3972_LDO_VOL_CONTR_SHIFT(ldo)) & mask;
296 269
297 return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[val]; 270 return dev->desc->volt_table[val];
298} 271}
299 272
300static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev, 273static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev,
@@ -337,7 +310,7 @@ static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev,
337} 310}
338 311
339static struct regulator_ops lp3972_ldo_ops = { 312static struct regulator_ops lp3972_ldo_ops = {
340 .list_voltage = lp3972_ldo_list_voltage, 313 .list_voltage = regulator_list_voltage_table,
341 .is_enabled = lp3972_ldo_is_enabled, 314 .is_enabled = lp3972_ldo_is_enabled,
342 .enable = lp3972_ldo_enable, 315 .enable = lp3972_ldo_enable,
343 .disable = lp3972_ldo_disable, 316 .disable = lp3972_ldo_disable,
@@ -345,17 +318,6 @@ static struct regulator_ops lp3972_ldo_ops = {
345 .set_voltage_sel = lp3972_ldo_set_voltage_sel, 318 .set_voltage_sel = lp3972_ldo_set_voltage_sel,
346}; 319};
347 320
348static int lp3972_dcdc_list_voltage(struct regulator_dev *dev, unsigned index)
349{
350 int buck = rdev_get_id(dev) - LP3972_DCDC1;
351
352 if (index < LP3972_BUCK_VOL_MIN_IDX(buck) ||
353 index > LP3972_BUCK_VOL_MAX_IDX(buck))
354 return -EINVAL;
355
356 return 1000 * buck_voltage_map[buck][index];
357}
358
359static int lp3972_dcdc_is_enabled(struct regulator_dev *dev) 321static int lp3972_dcdc_is_enabled(struct regulator_dev *dev)
360{ 322{
361 struct lp3972 *lp3972 = rdev_get_drvdata(dev); 323 struct lp3972 *lp3972 = rdev_get_drvdata(dev);
@@ -401,7 +363,7 @@ static int lp3972_dcdc_get_voltage(struct regulator_dev *dev)
401 reg = lp3972_reg_read(lp3972, LP3972_BUCK_VOL1_REG(buck)); 363 reg = lp3972_reg_read(lp3972, LP3972_BUCK_VOL1_REG(buck));
402 reg &= LP3972_BUCK_VOL_MASK; 364 reg &= LP3972_BUCK_VOL_MASK;
403 if (reg <= LP3972_BUCK_VOL_MAX_IDX(buck)) 365 if (reg <= LP3972_BUCK_VOL_MAX_IDX(buck))
404 val = 1000 * buck_voltage_map[buck][reg]; 366 val = dev->desc->volt_table[reg];
405 else { 367 else {
406 val = 0; 368 val = 0;
407 dev_warn(&dev->dev, "chip reported incorrect voltage value." 369 dev_warn(&dev->dev, "chip reported incorrect voltage value."
@@ -436,7 +398,7 @@ static int lp3972_dcdc_set_voltage_sel(struct regulator_dev *dev,
436} 398}
437 399
438static struct regulator_ops lp3972_dcdc_ops = { 400static struct regulator_ops lp3972_dcdc_ops = {
439 .list_voltage = lp3972_dcdc_list_voltage, 401 .list_voltage = regulator_list_voltage_table,
440 .is_enabled = lp3972_dcdc_is_enabled, 402 .is_enabled = lp3972_dcdc_is_enabled,
441 .enable = lp3972_dcdc_enable, 403 .enable = lp3972_dcdc_enable,
442 .disable = lp3972_dcdc_disable, 404 .disable = lp3972_dcdc_disable,
@@ -450,6 +412,7 @@ static const struct regulator_desc regulators[] = {
450 .id = LP3972_LDO1, 412 .id = LP3972_LDO1,
451 .ops = &lp3972_ldo_ops, 413 .ops = &lp3972_ldo_ops,
452 .n_voltages = ARRAY_SIZE(ldo1_voltage_map), 414 .n_voltages = ARRAY_SIZE(ldo1_voltage_map),
415 .volt_table = ldo1_voltage_map,
453 .type = REGULATOR_VOLTAGE, 416 .type = REGULATOR_VOLTAGE,
454 .owner = THIS_MODULE, 417 .owner = THIS_MODULE,
455 }, 418 },
@@ -458,6 +421,7 @@ static const struct regulator_desc regulators[] = {
458 .id = LP3972_LDO2, 421 .id = LP3972_LDO2,
459 .ops = &lp3972_ldo_ops, 422 .ops = &lp3972_ldo_ops,
460 .n_voltages = ARRAY_SIZE(ldo23_voltage_map), 423 .n_voltages = ARRAY_SIZE(ldo23_voltage_map),
424 .volt_table = ldo23_voltage_map,
461 .type = REGULATOR_VOLTAGE, 425 .type = REGULATOR_VOLTAGE,
462 .owner = THIS_MODULE, 426 .owner = THIS_MODULE,
463 }, 427 },
@@ -466,6 +430,7 @@ static const struct regulator_desc regulators[] = {
466 .id = LP3972_LDO3, 430 .id = LP3972_LDO3,
467 .ops = &lp3972_ldo_ops, 431 .ops = &lp3972_ldo_ops,
468 .n_voltages = ARRAY_SIZE(ldo23_voltage_map), 432 .n_voltages = ARRAY_SIZE(ldo23_voltage_map),
433 .volt_table = ldo23_voltage_map,
469 .type = REGULATOR_VOLTAGE, 434 .type = REGULATOR_VOLTAGE,
470 .owner = THIS_MODULE, 435 .owner = THIS_MODULE,
471 }, 436 },
@@ -474,6 +439,7 @@ static const struct regulator_desc regulators[] = {
474 .id = LP3972_LDO4, 439 .id = LP3972_LDO4,
475 .ops = &lp3972_ldo_ops, 440 .ops = &lp3972_ldo_ops,
476 .n_voltages = ARRAY_SIZE(ldo4_voltage_map), 441 .n_voltages = ARRAY_SIZE(ldo4_voltage_map),
442 .volt_table = ldo4_voltage_map,
477 .type = REGULATOR_VOLTAGE, 443 .type = REGULATOR_VOLTAGE,
478 .owner = THIS_MODULE, 444 .owner = THIS_MODULE,
479 }, 445 },
@@ -482,6 +448,7 @@ static const struct regulator_desc regulators[] = {
482 .id = LP3972_LDO5, 448 .id = LP3972_LDO5,
483 .ops = &lp3972_ldo_ops, 449 .ops = &lp3972_ldo_ops,
484 .n_voltages = ARRAY_SIZE(ldo5_voltage_map), 450 .n_voltages = ARRAY_SIZE(ldo5_voltage_map),
451 .volt_table = ldo5_voltage_map,
485 .type = REGULATOR_VOLTAGE, 452 .type = REGULATOR_VOLTAGE,
486 .owner = THIS_MODULE, 453 .owner = THIS_MODULE,
487 }, 454 },
@@ -490,6 +457,7 @@ static const struct regulator_desc regulators[] = {
490 .id = LP3972_DCDC1, 457 .id = LP3972_DCDC1,
491 .ops = &lp3972_dcdc_ops, 458 .ops = &lp3972_dcdc_ops,
492 .n_voltages = ARRAY_SIZE(buck1_voltage_map), 459 .n_voltages = ARRAY_SIZE(buck1_voltage_map),
460 .volt_table = buck1_voltage_map,
493 .type = REGULATOR_VOLTAGE, 461 .type = REGULATOR_VOLTAGE,
494 .owner = THIS_MODULE, 462 .owner = THIS_MODULE,
495 }, 463 },
@@ -498,6 +466,7 @@ static const struct regulator_desc regulators[] = {
498 .id = LP3972_DCDC2, 466 .id = LP3972_DCDC2,
499 .ops = &lp3972_dcdc_ops, 467 .ops = &lp3972_dcdc_ops,
500 .n_voltages = ARRAY_SIZE(buck23_voltage_map), 468 .n_voltages = ARRAY_SIZE(buck23_voltage_map),
469 .volt_table = buck23_voltage_map,
501 .type = REGULATOR_VOLTAGE, 470 .type = REGULATOR_VOLTAGE,
502 .owner = THIS_MODULE, 471 .owner = THIS_MODULE,
503 }, 472 },
@@ -506,6 +475,7 @@ static const struct regulator_desc regulators[] = {
506 .id = LP3972_DCDC3, 475 .id = LP3972_DCDC3,
507 .ops = &lp3972_dcdc_ops, 476 .ops = &lp3972_dcdc_ops,
508 .n_voltages = ARRAY_SIZE(buck23_voltage_map), 477 .n_voltages = ARRAY_SIZE(buck23_voltage_map),
478 .volt_table = buck23_voltage_map,
509 .type = REGULATOR_VOLTAGE, 479 .type = REGULATOR_VOLTAGE,
510 .owner = THIS_MODULE, 480 .owner = THIS_MODULE,
511 }, 481 },
diff --git a/drivers/regulator/lp872x.c b/drivers/regulator/lp872x.c
new file mode 100644
index 000000000000..212c38eaba70
--- /dev/null
+++ b/drivers/regulator/lp872x.c
@@ -0,0 +1,943 @@
1/*
2 * Copyright 2012 Texas Instruments
3 *
4 * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#include <linux/module.h>
13#include <linux/slab.h>
14#include <linux/i2c.h>
15#include <linux/regmap.h>
16#include <linux/err.h>
17#include <linux/gpio.h>
18#include <linux/regulator/lp872x.h>
19#include <linux/regulator/driver.h>
20#include <linux/platform_device.h>
21
22/* Registers : LP8720/8725 shared */
23#define LP872X_GENERAL_CFG 0x00
24#define LP872X_LDO1_VOUT 0x01
25#define LP872X_LDO2_VOUT 0x02
26#define LP872X_LDO3_VOUT 0x03
27#define LP872X_LDO4_VOUT 0x04
28#define LP872X_LDO5_VOUT 0x05
29
30/* Registers : LP8720 */
31#define LP8720_BUCK_VOUT1 0x06
32#define LP8720_BUCK_VOUT2 0x07
33#define LP8720_ENABLE 0x08
34
35/* Registers : LP8725 */
36#define LP8725_LILO1_VOUT 0x06
37#define LP8725_LILO2_VOUT 0x07
38#define LP8725_BUCK1_VOUT1 0x08
39#define LP8725_BUCK1_VOUT2 0x09
40#define LP8725_BUCK2_VOUT1 0x0A
41#define LP8725_BUCK2_VOUT2 0x0B
42#define LP8725_BUCK_CTRL 0x0C
43#define LP8725_LDO_CTRL 0x0D
44
45/* Mask/shift : LP8720/LP8725 shared */
46#define LP872X_VOUT_M 0x1F
47#define LP872X_START_DELAY_M 0xE0
48#define LP872X_START_DELAY_S 5
49#define LP872X_EN_LDO1_M BIT(0)
50#define LP872X_EN_LDO2_M BIT(1)
51#define LP872X_EN_LDO3_M BIT(2)
52#define LP872X_EN_LDO4_M BIT(3)
53#define LP872X_EN_LDO5_M BIT(4)
54
55/* Mask/shift : LP8720 */
56#define LP8720_TIMESTEP_S 0 /* Addr 00h */
57#define LP8720_TIMESTEP_M BIT(0)
58#define LP8720_EXT_DVS_M BIT(2)
59#define LP8720_BUCK_FPWM_S 5 /* Addr 07h */
60#define LP8720_BUCK_FPWM_M BIT(5)
61#define LP8720_EN_BUCK_M BIT(5) /* Addr 08h */
62#define LP8720_DVS_SEL_M BIT(7)
63
64/* Mask/shift : LP8725 */
65#define LP8725_TIMESTEP_M 0xC0 /* Addr 00h */
66#define LP8725_TIMESTEP_S 6
67#define LP8725_BUCK1_EN_M BIT(0)
68#define LP8725_DVS1_M BIT(2)
69#define LP8725_DVS2_M BIT(3)
70#define LP8725_BUCK2_EN_M BIT(4)
71#define LP8725_BUCK_CL_M 0xC0 /* Addr 09h, 0Bh */
72#define LP8725_BUCK_CL_S 6
73#define LP8725_BUCK1_FPWM_S 1 /* Addr 0Ch */
74#define LP8725_BUCK1_FPWM_M BIT(1)
75#define LP8725_BUCK2_FPWM_S 5
76#define LP8725_BUCK2_FPWM_M BIT(5)
77#define LP8725_EN_LILO1_M BIT(5) /* Addr 0Dh */
78#define LP8725_EN_LILO2_M BIT(6)
79
80/* PWM mode */
81#define LP872X_FORCE_PWM 1
82#define LP872X_AUTO_PWM 0
83
84#define LP8720_NUM_REGULATORS 6
85#define LP8725_NUM_REGULATORS 9
86#define EXTERN_DVS_USED 0
87#define MAX_DELAY 6
88
89/* dump registers in regmap-debugfs */
90#define MAX_REGISTERS 0x0F
91
92enum lp872x_id {
93 LP8720,
94 LP8725,
95};
96
97struct lp872x {
98 struct regmap *regmap;
99 struct device *dev;
100 enum lp872x_id chipid;
101 struct lp872x_platform_data *pdata;
102 struct regulator_dev **regulators;
103 int num_regulators;
104 enum lp872x_dvs_state dvs_pin;
105 int dvs_gpio;
106};
107
108/* LP8720/LP8725 shared voltage table for LDOs */
109static const unsigned int lp872x_ldo_vtbl[] = {
110 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000, 1550000,
111 1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000, 2000000,
112 2100000, 2200000, 2300000, 2400000, 2500000, 2600000, 2650000, 2700000,
113 2750000, 2800000, 2850000, 2900000, 2950000, 3000000, 3100000, 3300000,
114};
115
116/* LP8720 LDO4 voltage table */
117static const unsigned int lp8720_ldo4_vtbl[] = {
118 800000, 850000, 900000, 1000000, 1100000, 1200000, 1250000, 1300000,
119 1350000, 1400000, 1450000, 1500000, 1550000, 1600000, 1650000, 1700000,
120 1750000, 1800000, 1850000, 1900000, 2000000, 2100000, 2200000, 2300000,
121 2400000, 2500000, 2600000, 2650000, 2700000, 2750000, 2800000, 2850000,
122};
123
124/* LP8725 LILO(Low Input Low Output) voltage table */
125static const unsigned int lp8725_lilo_vtbl[] = {
126 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000, 1150000,
127 1200000, 1250000, 1300000, 1350000, 1400000, 1500000, 1600000, 1700000,
128 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
129 2600000, 2700000, 2800000, 2850000, 2900000, 3000000, 3100000, 3300000,
130};
131
132/* LP8720 BUCK voltage table */
133#define EXT_R 0 /* external resistor divider */
134static const unsigned int lp8720_buck_vtbl[] = {
135 EXT_R, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000,
136 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000,
137 1550000, 1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000,
138 1950000, 2000000, 2050000, 2100000, 2150000, 2200000, 2250000, 2300000,
139};
140
141/* LP8725 BUCK voltage table */
142static const unsigned int lp8725_buck_vtbl[] = {
143 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000, 1150000,
144 1200000, 1250000, 1300000, 1350000, 1400000, 1500000, 1600000, 1700000,
145 1750000, 1800000, 1850000, 1900000, 2000000, 2100000, 2200000, 2300000,
146 2400000, 2500000, 2600000, 2700000, 2800000, 2850000, 2900000, 3000000,
147};
148
149/* LP8725 BUCK current limit */
150static const unsigned int lp8725_buck_uA[] = {
151 460000, 780000, 1050000, 1370000,
152};
153
154static int lp872x_read_byte(struct lp872x *lp, u8 addr, u8 *data)
155{
156 int ret;
157 unsigned int val;
158
159 ret = regmap_read(lp->regmap, addr, &val);
160 if (ret < 0) {
161 dev_err(lp->dev, "failed to read 0x%.2x\n", addr);
162 return ret;
163 }
164
165 *data = (u8)val;
166 return 0;
167}
168
169static inline int lp872x_write_byte(struct lp872x *lp, u8 addr, u8 data)
170{
171 return regmap_write(lp->regmap, addr, data);
172}
173
174static inline int lp872x_update_bits(struct lp872x *lp, u8 addr,
175 unsigned int mask, u8 data)
176{
177 return regmap_update_bits(lp->regmap, addr, mask, data);
178}
179
180static int _rdev_to_offset(struct regulator_dev *rdev)
181{
182 enum lp872x_regulator_id id = rdev_get_id(rdev);
183
184 switch (id) {
185 case LP8720_ID_LDO1 ... LP8720_ID_BUCK:
186 return id;
187 case LP8725_ID_LDO1 ... LP8725_ID_BUCK2:
188 return id - LP8725_ID_BASE;
189 default:
190 return -EINVAL;
191 }
192}
193
194static int lp872x_get_timestep_usec(struct lp872x *lp)
195{
196 enum lp872x_id chip = lp->chipid;
197 u8 val, mask, shift;
198 int *time_usec, size, ret;
199 int lp8720_time_usec[] = { 25, 50 };
200 int lp8725_time_usec[] = { 32, 64, 128, 256 };
201
202 switch (chip) {
203 case LP8720:
204 mask = LP8720_TIMESTEP_M;
205 shift = LP8720_TIMESTEP_S;
206 time_usec = &lp8720_time_usec[0];
207 size = ARRAY_SIZE(lp8720_time_usec);
208 break;
209 case LP8725:
210 mask = LP8725_TIMESTEP_M;
211 shift = LP8725_TIMESTEP_S;
212 time_usec = &lp8725_time_usec[0];
213 size = ARRAY_SIZE(lp8725_time_usec);
214 break;
215 default:
216 return -EINVAL;
217 }
218
219 ret = lp872x_read_byte(lp, LP872X_GENERAL_CFG, &val);
220 if (ret)
221 return -EINVAL;
222
223 val = (val & mask) >> shift;
224 if (val >= size)
225 return -EINVAL;
226
227 return *(time_usec + val);
228}
229
230static int lp872x_regulator_enable_time(struct regulator_dev *rdev)
231{
232 struct lp872x *lp = rdev_get_drvdata(rdev);
233 enum lp872x_regulator_id regulator = rdev_get_id(rdev);
234 int time_step_us = lp872x_get_timestep_usec(lp);
235 int ret, offset;
236 u8 addr, val;
237
238 if (time_step_us < 0)
239 return -EINVAL;
240
241 switch (regulator) {
242 case LP8720_ID_LDO1 ... LP8720_ID_LDO5:
243 case LP8725_ID_LDO1 ... LP8725_ID_LILO2:
244 offset = _rdev_to_offset(rdev);
245 if (offset < 0)
246 return -EINVAL;
247
248 addr = LP872X_LDO1_VOUT + offset;
249 break;
250 case LP8720_ID_BUCK:
251 addr = LP8720_BUCK_VOUT1;
252 break;
253 case LP8725_ID_BUCK1:
254 addr = LP8725_BUCK1_VOUT1;
255 break;
256 case LP8725_ID_BUCK2:
257 addr = LP8725_BUCK2_VOUT1;
258 break;
259 default:
260 return -EINVAL;
261 }
262
263 ret = lp872x_read_byte(lp, addr, &val);
264 if (ret)
265 return ret;
266
267 val = (val & LP872X_START_DELAY_M) >> LP872X_START_DELAY_S;
268
269 return val > MAX_DELAY ? 0 : val * time_step_us;
270}
271
272static void lp872x_set_dvs(struct lp872x *lp, int gpio)
273{
274 enum lp872x_dvs_sel dvs_sel = lp->pdata->dvs->vsel;
275 enum lp872x_dvs_state state;
276
277 state = dvs_sel == SEL_V1 ? DVS_HIGH : DVS_LOW;
278 gpio_set_value(gpio, state);
279 lp->dvs_pin = state;
280}
281
282static u8 lp872x_select_buck_vout_addr(struct lp872x *lp,
283 enum lp872x_regulator_id buck)
284{
285 u8 val, addr;
286
287 if (lp872x_read_byte(lp, LP872X_GENERAL_CFG, &val))
288 return 0;
289
290 switch (buck) {
291 case LP8720_ID_BUCK:
292 if (val & LP8720_EXT_DVS_M) {
293 addr = (lp->dvs_pin == DVS_HIGH) ?
294 LP8720_BUCK_VOUT1 : LP8720_BUCK_VOUT2;
295 } else {
296 if (lp872x_read_byte(lp, LP8720_ENABLE, &val))
297 return 0;
298
299 addr = val & LP8720_DVS_SEL_M ?
300 LP8720_BUCK_VOUT1 : LP8720_BUCK_VOUT2;
301 }
302 break;
303 case LP8725_ID_BUCK1:
304 if (val & LP8725_DVS1_M)
305 addr = LP8725_BUCK1_VOUT1;
306 else
307 addr = (lp->dvs_pin == DVS_HIGH) ?
308 LP8725_BUCK1_VOUT1 : LP8725_BUCK1_VOUT2;
309 break;
310 case LP8725_ID_BUCK2:
311 addr = val & LP8725_DVS2_M ?
312 LP8725_BUCK2_VOUT1 : LP8725_BUCK2_VOUT2;
313 break;
314 default:
315 return 0;
316 }
317
318 return addr;
319}
320
321static bool lp872x_is_valid_buck_addr(u8 addr)
322{
323 switch (addr) {
324 case LP8720_BUCK_VOUT1:
325 case LP8720_BUCK_VOUT2:
326 case LP8725_BUCK1_VOUT1:
327 case LP8725_BUCK1_VOUT2:
328 case LP8725_BUCK2_VOUT1:
329 case LP8725_BUCK2_VOUT2:
330 return true;
331 default:
332 return false;
333 }
334}
335
336static int lp872x_buck_set_voltage_sel(struct regulator_dev *rdev,
337 unsigned selector)
338{
339 struct lp872x *lp = rdev_get_drvdata(rdev);
340 enum lp872x_regulator_id buck = rdev_get_id(rdev);
341 u8 addr, mask = LP872X_VOUT_M;
342 struct lp872x_dvs *dvs = lp->pdata->dvs;
343
344 if (dvs && gpio_is_valid(dvs->gpio))
345 lp872x_set_dvs(lp, dvs->gpio);
346
347 addr = lp872x_select_buck_vout_addr(lp, buck);
348 if (!lp872x_is_valid_buck_addr(addr))
349 return -EINVAL;
350
351 return lp872x_update_bits(lp, addr, mask, selector);
352}
353
354static int lp872x_buck_get_voltage_sel(struct regulator_dev *rdev)
355{
356 struct lp872x *lp = rdev_get_drvdata(rdev);
357 enum lp872x_regulator_id buck = rdev_get_id(rdev);
358 u8 addr, val;
359 int ret;
360
361 addr = lp872x_select_buck_vout_addr(lp, buck);
362 if (!lp872x_is_valid_buck_addr(addr))
363 return -EINVAL;
364
365 ret = lp872x_read_byte(lp, addr, &val);
366 if (ret)
367 return ret;
368
369 return val & LP872X_VOUT_M;
370}
371
372static int lp8725_buck_set_current_limit(struct regulator_dev *rdev,
373 int min_uA, int max_uA)
374{
375 struct lp872x *lp = rdev_get_drvdata(rdev);
376 enum lp872x_regulator_id buck = rdev_get_id(rdev);
377 int i, max = ARRAY_SIZE(lp8725_buck_uA);
378 u8 addr, val;
379
380 switch (buck) {
381 case LP8725_ID_BUCK1:
382 addr = LP8725_BUCK1_VOUT2;
383 break;
384 case LP8725_ID_BUCK2:
385 addr = LP8725_BUCK2_VOUT2;
386 break;
387 default:
388 return -EINVAL;
389 }
390
391 for (i = 0 ; i < max ; i++)
392 if (lp8725_buck_uA[i] >= min_uA &&
393 lp8725_buck_uA[i] <= max_uA)
394 break;
395
396 if (i == max)
397 return -EINVAL;
398
399 val = i << LP8725_BUCK_CL_S;
400
401 return lp872x_update_bits(lp, addr, LP8725_BUCK_CL_M, val);
402}
403
404static int lp8725_buck_get_current_limit(struct regulator_dev *rdev)
405{
406 struct lp872x *lp = rdev_get_drvdata(rdev);
407 enum lp872x_regulator_id buck = rdev_get_id(rdev);
408 u8 addr, val;
409 int ret;
410
411 switch (buck) {
412 case LP8725_ID_BUCK1:
413 addr = LP8725_BUCK1_VOUT2;
414 break;
415 case LP8725_ID_BUCK2:
416 addr = LP8725_BUCK2_VOUT2;
417 break;
418 default:
419 return -EINVAL;
420 }
421
422 ret = lp872x_read_byte(lp, addr, &val);
423 if (ret)
424 return ret;
425
426 val = (val & LP8725_BUCK_CL_M) >> LP8725_BUCK_CL_S;
427
428 return (val < ARRAY_SIZE(lp8725_buck_uA)) ?
429 lp8725_buck_uA[val] : -EINVAL;
430}
431
432static int lp872x_buck_set_mode(struct regulator_dev *rdev, unsigned int mode)
433{
434 struct lp872x *lp = rdev_get_drvdata(rdev);
435 enum lp872x_regulator_id buck = rdev_get_id(rdev);
436 u8 addr, mask, shift, val;
437
438 switch (buck) {
439 case LP8720_ID_BUCK:
440 addr = LP8720_BUCK_VOUT2;
441 mask = LP8720_BUCK_FPWM_M;
442 shift = LP8720_BUCK_FPWM_S;
443 break;
444 case LP8725_ID_BUCK1:
445 addr = LP8725_BUCK_CTRL;
446 mask = LP8725_BUCK1_FPWM_M;
447 shift = LP8725_BUCK1_FPWM_S;
448 break;
449 case LP8725_ID_BUCK2:
450 addr = LP8725_BUCK_CTRL;
451 mask = LP8725_BUCK2_FPWM_M;
452 shift = LP8725_BUCK2_FPWM_S;
453 break;
454 default:
455 return -EINVAL;
456 }
457
458 if (mode == REGULATOR_MODE_FAST)
459 val = LP872X_FORCE_PWM << shift;
460 else if (mode == REGULATOR_MODE_NORMAL)
461 val = LP872X_AUTO_PWM << shift;
462 else
463 return -EINVAL;
464
465 return lp872x_update_bits(lp, addr, mask, val);
466}
467
468static unsigned int lp872x_buck_get_mode(struct regulator_dev *rdev)
469{
470 struct lp872x *lp = rdev_get_drvdata(rdev);
471 enum lp872x_regulator_id buck = rdev_get_id(rdev);
472 u8 addr, mask, val;
473 int ret;
474
475 switch (buck) {
476 case LP8720_ID_BUCK:
477 addr = LP8720_BUCK_VOUT2;
478 mask = LP8720_BUCK_FPWM_M;
479 break;
480 case LP8725_ID_BUCK1:
481 addr = LP8725_BUCK_CTRL;
482 mask = LP8725_BUCK1_FPWM_M;
483 break;
484 case LP8725_ID_BUCK2:
485 addr = LP8725_BUCK_CTRL;
486 mask = LP8725_BUCK2_FPWM_M;
487 break;
488 default:
489 return -EINVAL;
490 }
491
492 ret = lp872x_read_byte(lp, addr, &val);
493 if (ret)
494 return ret;
495
496 return val & mask ? REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL;
497}
498
499static struct regulator_ops lp872x_ldo_ops = {
500 .list_voltage = regulator_list_voltage_table,
501 .set_voltage_sel = regulator_set_voltage_sel_regmap,
502 .get_voltage_sel = regulator_get_voltage_sel_regmap,
503 .enable = regulator_enable_regmap,
504 .disable = regulator_disable_regmap,
505 .is_enabled = regulator_is_enabled_regmap,
506 .enable_time = lp872x_regulator_enable_time,
507};
508
509static struct regulator_ops lp8720_buck_ops = {
510 .list_voltage = regulator_list_voltage_table,
511 .set_voltage_sel = lp872x_buck_set_voltage_sel,
512 .get_voltage_sel = lp872x_buck_get_voltage_sel,
513 .enable = regulator_enable_regmap,
514 .disable = regulator_disable_regmap,
515 .is_enabled = regulator_is_enabled_regmap,
516 .enable_time = lp872x_regulator_enable_time,
517 .set_mode = lp872x_buck_set_mode,
518 .get_mode = lp872x_buck_get_mode,
519};
520
521static struct regulator_ops lp8725_buck_ops = {
522 .list_voltage = regulator_list_voltage_table,
523 .set_voltage_sel = lp872x_buck_set_voltage_sel,
524 .get_voltage_sel = lp872x_buck_get_voltage_sel,
525 .enable = regulator_enable_regmap,
526 .disable = regulator_disable_regmap,
527 .is_enabled = regulator_is_enabled_regmap,
528 .enable_time = lp872x_regulator_enable_time,
529 .set_mode = lp872x_buck_set_mode,
530 .get_mode = lp872x_buck_get_mode,
531 .set_current_limit = lp8725_buck_set_current_limit,
532 .get_current_limit = lp8725_buck_get_current_limit,
533};
534
535static struct regulator_desc lp8720_regulator_desc[] = {
536 {
537 .name = "ldo1",
538 .id = LP8720_ID_LDO1,
539 .ops = &lp872x_ldo_ops,
540 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
541 .volt_table = lp872x_ldo_vtbl,
542 .type = REGULATOR_VOLTAGE,
543 .owner = THIS_MODULE,
544 .vsel_reg = LP872X_LDO1_VOUT,
545 .vsel_mask = LP872X_VOUT_M,
546 .enable_reg = LP8720_ENABLE,
547 .enable_mask = LP872X_EN_LDO1_M,
548 },
549 {
550 .name = "ldo2",
551 .id = LP8720_ID_LDO2,
552 .ops = &lp872x_ldo_ops,
553 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
554 .volt_table = lp872x_ldo_vtbl,
555 .type = REGULATOR_VOLTAGE,
556 .owner = THIS_MODULE,
557 .vsel_reg = LP872X_LDO2_VOUT,
558 .vsel_mask = LP872X_VOUT_M,
559 .enable_reg = LP8720_ENABLE,
560 .enable_mask = LP872X_EN_LDO2_M,
561 },
562 {
563 .name = "ldo3",
564 .id = LP8720_ID_LDO3,
565 .ops = &lp872x_ldo_ops,
566 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
567 .volt_table = lp872x_ldo_vtbl,
568 .type = REGULATOR_VOLTAGE,
569 .owner = THIS_MODULE,
570 .vsel_reg = LP872X_LDO3_VOUT,
571 .vsel_mask = LP872X_VOUT_M,
572 .enable_reg = LP8720_ENABLE,
573 .enable_mask = LP872X_EN_LDO3_M,
574 },
575 {
576 .name = "ldo4",
577 .id = LP8720_ID_LDO4,
578 .ops = &lp872x_ldo_ops,
579 .n_voltages = ARRAY_SIZE(lp8720_ldo4_vtbl),
580 .volt_table = lp8720_ldo4_vtbl,
581 .type = REGULATOR_VOLTAGE,
582 .owner = THIS_MODULE,
583 .vsel_reg = LP872X_LDO4_VOUT,
584 .vsel_mask = LP872X_VOUT_M,
585 .enable_reg = LP8720_ENABLE,
586 .enable_mask = LP872X_EN_LDO4_M,
587 },
588 {
589 .name = "ldo5",
590 .id = LP8720_ID_LDO5,
591 .ops = &lp872x_ldo_ops,
592 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
593 .volt_table = lp872x_ldo_vtbl,
594 .type = REGULATOR_VOLTAGE,
595 .owner = THIS_MODULE,
596 .vsel_reg = LP872X_LDO5_VOUT,
597 .vsel_mask = LP872X_VOUT_M,
598 .enable_reg = LP8720_ENABLE,
599 .enable_mask = LP872X_EN_LDO5_M,
600 },
601 {
602 .name = "buck",
603 .id = LP8720_ID_BUCK,
604 .ops = &lp8720_buck_ops,
605 .n_voltages = ARRAY_SIZE(lp8720_buck_vtbl),
606 .volt_table = lp8720_buck_vtbl,
607 .type = REGULATOR_VOLTAGE,
608 .owner = THIS_MODULE,
609 .enable_reg = LP8720_ENABLE,
610 .enable_mask = LP8720_EN_BUCK_M,
611 },
612};
613
614static struct regulator_desc lp8725_regulator_desc[] = {
615 {
616 .name = "ldo1",
617 .id = LP8725_ID_LDO1,
618 .ops = &lp872x_ldo_ops,
619 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
620 .volt_table = lp872x_ldo_vtbl,
621 .type = REGULATOR_VOLTAGE,
622 .owner = THIS_MODULE,
623 .vsel_reg = LP872X_LDO1_VOUT,
624 .vsel_mask = LP872X_VOUT_M,
625 .enable_reg = LP8725_LDO_CTRL,
626 .enable_mask = LP872X_EN_LDO1_M,
627 },
628 {
629 .name = "ldo2",
630 .id = LP8725_ID_LDO2,
631 .ops = &lp872x_ldo_ops,
632 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
633 .volt_table = lp872x_ldo_vtbl,
634 .type = REGULATOR_VOLTAGE,
635 .owner = THIS_MODULE,
636 .vsel_reg = LP872X_LDO2_VOUT,
637 .vsel_mask = LP872X_VOUT_M,
638 .enable_reg = LP8725_LDO_CTRL,
639 .enable_mask = LP872X_EN_LDO2_M,
640 },
641 {
642 .name = "ldo3",
643 .id = LP8725_ID_LDO3,
644 .ops = &lp872x_ldo_ops,
645 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
646 .volt_table = lp872x_ldo_vtbl,
647 .type = REGULATOR_VOLTAGE,
648 .owner = THIS_MODULE,
649 .vsel_reg = LP872X_LDO3_VOUT,
650 .vsel_mask = LP872X_VOUT_M,
651 .enable_reg = LP8725_LDO_CTRL,
652 .enable_mask = LP872X_EN_LDO3_M,
653 },
654 {
655 .name = "ldo4",
656 .id = LP8725_ID_LDO4,
657 .ops = &lp872x_ldo_ops,
658 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
659 .volt_table = lp872x_ldo_vtbl,
660 .type = REGULATOR_VOLTAGE,
661 .owner = THIS_MODULE,
662 .vsel_reg = LP872X_LDO4_VOUT,
663 .vsel_mask = LP872X_VOUT_M,
664 .enable_reg = LP8725_LDO_CTRL,
665 .enable_mask = LP872X_EN_LDO4_M,
666 },
667 {
668 .name = "ldo5",
669 .id = LP8725_ID_LDO5,
670 .ops = &lp872x_ldo_ops,
671 .n_voltages = ARRAY_SIZE(lp872x_ldo_vtbl),
672 .volt_table = lp872x_ldo_vtbl,
673 .type = REGULATOR_VOLTAGE,
674 .owner = THIS_MODULE,
675 .vsel_reg = LP872X_LDO5_VOUT,
676 .vsel_mask = LP872X_VOUT_M,
677 .enable_reg = LP8725_LDO_CTRL,
678 .enable_mask = LP872X_EN_LDO5_M,
679 },
680 {
681 .name = "lilo1",
682 .id = LP8725_ID_LILO1,
683 .ops = &lp872x_ldo_ops,
684 .n_voltages = ARRAY_SIZE(lp8725_lilo_vtbl),
685 .volt_table = lp8725_lilo_vtbl,
686 .type = REGULATOR_VOLTAGE,
687 .owner = THIS_MODULE,
688 .vsel_reg = LP8725_LILO1_VOUT,
689 .vsel_mask = LP872X_VOUT_M,
690 .enable_reg = LP8725_LDO_CTRL,
691 .enable_mask = LP8725_EN_LILO1_M,
692 },
693 {
694 .name = "lilo2",
695 .id = LP8725_ID_LILO2,
696 .ops = &lp872x_ldo_ops,
697 .n_voltages = ARRAY_SIZE(lp8725_lilo_vtbl),
698 .volt_table = lp8725_lilo_vtbl,
699 .type = REGULATOR_VOLTAGE,
700 .owner = THIS_MODULE,
701 .vsel_reg = LP8725_LILO2_VOUT,
702 .vsel_mask = LP872X_VOUT_M,
703 .enable_reg = LP8725_LDO_CTRL,
704 .enable_mask = LP8725_EN_LILO2_M,
705 },
706 {
707 .name = "buck1",
708 .id = LP8725_ID_BUCK1,
709 .ops = &lp8725_buck_ops,
710 .n_voltages = ARRAY_SIZE(lp8725_buck_vtbl),
711 .volt_table = lp8725_buck_vtbl,
712 .type = REGULATOR_VOLTAGE,
713 .owner = THIS_MODULE,
714 .enable_reg = LP872X_GENERAL_CFG,
715 .enable_mask = LP8725_BUCK1_EN_M,
716 },
717 {
718 .name = "buck2",
719 .id = LP8725_ID_BUCK2,
720 .ops = &lp8725_buck_ops,
721 .n_voltages = ARRAY_SIZE(lp8725_buck_vtbl),
722 .volt_table = lp8725_buck_vtbl,
723 .type = REGULATOR_VOLTAGE,
724 .owner = THIS_MODULE,
725 .enable_reg = LP872X_GENERAL_CFG,
726 .enable_mask = LP8725_BUCK2_EN_M,
727 },
728};
729
730static int lp872x_check_dvs_validity(struct lp872x *lp)
731{
732 struct lp872x_dvs *dvs = lp->pdata->dvs;
733 u8 val = 0;
734 int ret;
735
736 ret = lp872x_read_byte(lp, LP872X_GENERAL_CFG, &val);
737 if (ret)
738 return ret;
739
740 ret = 0;
741 if (lp->chipid == LP8720) {
742 if (val & LP8720_EXT_DVS_M)
743 ret = dvs ? 0 : -EINVAL;
744 } else {
745 if ((val & LP8725_DVS1_M) == EXTERN_DVS_USED)
746 ret = dvs ? 0 : -EINVAL;
747 }
748
749 return ret;
750}
751
752static int lp872x_init_dvs(struct lp872x *lp)
753{
754 int ret, gpio;
755 struct lp872x_dvs *dvs = lp->pdata->dvs;
756 enum lp872x_dvs_state pinstate;
757
758 ret = lp872x_check_dvs_validity(lp);
759 if (ret) {
760 dev_warn(lp->dev, "invalid dvs data: %d\n", ret);
761 return ret;
762 }
763
764 gpio = dvs->gpio;
765 if (!gpio_is_valid(gpio)) {
766 dev_err(lp->dev, "invalid gpio: %d\n", gpio);
767 return -EINVAL;
768 }
769
770 pinstate = dvs->init_state;
771 ret = devm_gpio_request_one(lp->dev, gpio, pinstate, "LP872X DVS");
772 if (ret) {
773 dev_err(lp->dev, "gpio request err: %d\n", ret);
774 return ret;
775 }
776
777 lp->dvs_pin = pinstate;
778 lp->dvs_gpio = gpio;
779
780 return 0;
781}
782
783static int lp872x_config(struct lp872x *lp)
784{
785 struct lp872x_platform_data *pdata = lp->pdata;
786 int ret;
787
788 if (!pdata->update_config)
789 return 0;
790
791 ret = lp872x_write_byte(lp, LP872X_GENERAL_CFG, pdata->general_config);
792 if (ret)
793 return ret;
794
795 return lp872x_init_dvs(lp);
796}
797
798static struct regulator_init_data
799*lp872x_find_regulator_init_data(int id, struct lp872x *lp)
800{
801 int i;
802
803 for (i = 0; i < lp->num_regulators; i++) {
804 if (lp->pdata->regulator_data[i].id == id)
805 return lp->pdata->regulator_data[i].init_data;
806 }
807
808 return NULL;
809}
810
811static int lp872x_regulator_register(struct lp872x *lp)
812{
813 struct regulator_desc *desc;
814 struct regulator_config cfg = { };
815 struct regulator_dev *rdev;
816 int i, ret;
817
818 for (i = 0 ; i < lp->num_regulators ; i++) {
819 desc = (lp->chipid == LP8720) ? &lp8720_regulator_desc[i] :
820 &lp8725_regulator_desc[i];
821
822 cfg.dev = lp->dev;
823 cfg.init_data = lp872x_find_regulator_init_data(desc->id, lp);
824 cfg.driver_data = lp;
825 cfg.regmap = lp->regmap;
826
827 rdev = regulator_register(desc, &cfg);
828 if (IS_ERR(rdev)) {
829 dev_err(lp->dev, "regulator register err");
830 ret = PTR_ERR(rdev);
831 goto err;
832 }
833
834 *(lp->regulators + i) = rdev;
835 }
836
837 return 0;
838err:
839 while (--i >= 0) {
840 rdev = *(lp->regulators + i);
841 regulator_unregister(rdev);
842 }
843 return ret;
844}
845
846static void lp872x_regulator_unregister(struct lp872x *lp)
847{
848 struct regulator_dev *rdev;
849 int i;
850
851 for (i = 0 ; i < lp->num_regulators ; i++) {
852 rdev = *(lp->regulators + i);
853 regulator_unregister(rdev);
854 }
855}
856
857static const struct regmap_config lp872x_regmap_config = {
858 .reg_bits = 8,
859 .val_bits = 8,
860 .max_register = MAX_REGISTERS,
861};
862
863static int lp872x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
864{
865 struct lp872x *lp;
866 struct lp872x_platform_data *pdata = cl->dev.platform_data;
867 int ret, size, num_regulators;
868 const int lp872x_num_regulators[] = {
869 [LP8720] = LP8720_NUM_REGULATORS,
870 [LP8725] = LP8725_NUM_REGULATORS,
871 };
872
873 if (!pdata) {
874 dev_err(&cl->dev, "no platform data\n");
875 return -EINVAL;
876 }
877
878 lp = devm_kzalloc(&cl->dev, sizeof(struct lp872x), GFP_KERNEL);
879 if (!lp)
880 goto err_mem;
881
882 num_regulators = lp872x_num_regulators[id->driver_data];
883 size = sizeof(struct regulator_dev *) * num_regulators;
884
885 lp->regulators = devm_kzalloc(&cl->dev, size, GFP_KERNEL);
886 if (!lp->regulators)
887 goto err_mem;
888
889 lp->regmap = devm_regmap_init_i2c(cl, &lp872x_regmap_config);
890 if (IS_ERR(lp->regmap)) {
891 ret = PTR_ERR(lp->regmap);
892 dev_err(&cl->dev, "regmap init i2c err: %d\n", ret);
893 goto err_dev;
894 }
895
896 lp->dev = &cl->dev;
897 lp->pdata = pdata;
898 lp->chipid = id->driver_data;
899 lp->num_regulators = num_regulators;
900 i2c_set_clientdata(cl, lp);
901
902 ret = lp872x_config(lp);
903 if (ret)
904 goto err_dev;
905
906 return lp872x_regulator_register(lp);
907
908err_mem:
909 return -ENOMEM;
910err_dev:
911 return ret;
912}
913
914static int __devexit lp872x_remove(struct i2c_client *cl)
915{
916 struct lp872x *lp = i2c_get_clientdata(cl);
917
918 lp872x_regulator_unregister(lp);
919 return 0;
920}
921
922static const struct i2c_device_id lp872x_ids[] = {
923 {"lp8720", LP8720},
924 {"lp8725", LP8725},
925 { }
926};
927MODULE_DEVICE_TABLE(i2c, lp872x_ids);
928
929static struct i2c_driver lp872x_driver = {
930 .driver = {
931 .name = "lp872x",
932 .owner = THIS_MODULE,
933 },
934 .probe = lp872x_probe,
935 .remove = __devexit_p(lp872x_remove),
936 .id_table = lp872x_ids,
937};
938
939module_i2c_driver(lp872x_driver);
940
941MODULE_DESCRIPTION("TI/National Semiconductor LP872x PMU Regulator Driver");
942MODULE_AUTHOR("Milo Kim");
943MODULE_LICENSE("GPL");
diff --git a/drivers/regulator/lp8788-buck.c b/drivers/regulator/lp8788-buck.c
new file mode 100644
index 000000000000..6356e821400f
--- /dev/null
+++ b/drivers/regulator/lp8788-buck.c
@@ -0,0 +1,629 @@
1/*
2 * TI LP8788 MFD - buck regulator driver
3 *
4 * Copyright 2012 Texas Instruments
5 *
6 * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/slab.h>
16#include <linux/err.h>
17#include <linux/platform_device.h>
18#include <linux/regulator/driver.h>
19#include <linux/mfd/lp8788.h>
20#include <linux/gpio.h>
21
22/* register address */
23#define LP8788_EN_BUCK 0x0C
24#define LP8788_BUCK_DVS_SEL 0x1D
25#define LP8788_BUCK1_VOUT0 0x1E
26#define LP8788_BUCK1_VOUT1 0x1F
27#define LP8788_BUCK1_VOUT2 0x20
28#define LP8788_BUCK1_VOUT3 0x21
29#define LP8788_BUCK2_VOUT0 0x22
30#define LP8788_BUCK2_VOUT1 0x23
31#define LP8788_BUCK2_VOUT2 0x24
32#define LP8788_BUCK2_VOUT3 0x25
33#define LP8788_BUCK3_VOUT 0x26
34#define LP8788_BUCK4_VOUT 0x27
35#define LP8788_BUCK1_TIMESTEP 0x28
36#define LP8788_BUCK_PWM 0x2D
37
38/* mask/shift bits */
39#define LP8788_EN_BUCK1_M BIT(0) /* Addr 0Ch */
40#define LP8788_EN_BUCK2_M BIT(1)
41#define LP8788_EN_BUCK3_M BIT(2)
42#define LP8788_EN_BUCK4_M BIT(3)
43#define LP8788_BUCK1_DVS_SEL_M 0x04 /* Addr 1Dh */
44#define LP8788_BUCK1_DVS_M 0x03
45#define LP8788_BUCK1_DVS_S 0
46#define LP8788_BUCK2_DVS_SEL_M 0x40
47#define LP8788_BUCK2_DVS_M 0x30
48#define LP8788_BUCK2_DVS_S 4
49#define LP8788_BUCK1_DVS_I2C BIT(2)
50#define LP8788_BUCK2_DVS_I2C BIT(6)
51#define LP8788_BUCK1_DVS_PIN (0 << 2)
52#define LP8788_BUCK2_DVS_PIN (0 << 6)
53#define LP8788_VOUT_M 0x1F /* Addr 1Eh ~ 27h */
54#define LP8788_STARTUP_TIME_M 0xF8 /* Addr 28h ~ 2Bh */
55#define LP8788_STARTUP_TIME_S 3
56#define LP8788_FPWM_BUCK1_M BIT(0) /* Addr 2Dh */
57#define LP8788_FPWM_BUCK1_S 0
58#define LP8788_FPWM_BUCK2_M BIT(1)
59#define LP8788_FPWM_BUCK2_S 1
60#define LP8788_FPWM_BUCK3_M BIT(2)
61#define LP8788_FPWM_BUCK3_S 2
62#define LP8788_FPWM_BUCK4_M BIT(3)
63#define LP8788_FPWM_BUCK4_S 3
64
65#define INVALID_ADDR 0xFF
66#define LP8788_FORCE_PWM 1
67#define LP8788_AUTO_PWM 0
68#define PIN_LOW 0
69#define PIN_HIGH 1
70#define ENABLE_TIME_USEC 32
71
72enum lp8788_dvs_state {
73 DVS_LOW = GPIOF_OUT_INIT_LOW,
74 DVS_HIGH = GPIOF_OUT_INIT_HIGH,
75};
76
77enum lp8788_dvs_mode {
78 REGISTER,
79 EXTPIN,
80};
81
82enum lp8788_buck_id {
83 BUCK1,
84 BUCK2,
85 BUCK3,
86 BUCK4,
87};
88
89struct lp8788_pwm_map {
90 u8 mask;
91 u8 shift;
92};
93
94struct lp8788_buck {
95 struct lp8788 *lp;
96 struct regulator_dev *regulator;
97 struct lp8788_pwm_map *pmap;
98 void *dvs;
99};
100
101/* BUCK 1 ~ 4 voltage table */
102static const int lp8788_buck_vtbl[] = {
103 500000, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000,
104 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000,
105 1550000, 1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000,
106 1950000, 2000000,
107};
108
109/* buck pwm mode selection : used for set/get_mode in regulator ops
110 * @forced pwm : fast mode
111 * @auto pwm : normal mode
112 */
113static struct lp8788_pwm_map buck_pmap[] = {
114 [BUCK1] = {
115 .mask = LP8788_FPWM_BUCK1_M,
116 .shift = LP8788_FPWM_BUCK1_S,
117 },
118 [BUCK2] = {
119 .mask = LP8788_FPWM_BUCK2_M,
120 .shift = LP8788_FPWM_BUCK2_S,
121 },
122 [BUCK3] = {
123 .mask = LP8788_FPWM_BUCK3_M,
124 .shift = LP8788_FPWM_BUCK3_S,
125 },
126 [BUCK4] = {
127 .mask = LP8788_FPWM_BUCK4_M,
128 .shift = LP8788_FPWM_BUCK4_S,
129 },
130};
131
132static const u8 buck1_vout_addr[] = {
133 LP8788_BUCK1_VOUT0, LP8788_BUCK1_VOUT1,
134 LP8788_BUCK1_VOUT2, LP8788_BUCK1_VOUT3,
135};
136
137static const u8 buck2_vout_addr[] = {
138 LP8788_BUCK2_VOUT0, LP8788_BUCK2_VOUT1,
139 LP8788_BUCK2_VOUT2, LP8788_BUCK2_VOUT3,
140};
141
142static void lp8788_buck1_set_dvs(struct lp8788_buck *buck)
143{
144 struct lp8788_buck1_dvs *dvs = (struct lp8788_buck1_dvs *)buck->dvs;
145 enum lp8788_dvs_state pinstate;
146
147 if (!dvs)
148 return;
149
150 pinstate = dvs->vsel == DVS_SEL_V0 ? DVS_LOW : DVS_HIGH;
151 if (gpio_is_valid(dvs->gpio))
152 gpio_set_value(dvs->gpio, pinstate);
153}
154
155static void lp8788_buck2_set_dvs(struct lp8788_buck *buck)
156{
157 struct lp8788_buck2_dvs *dvs = (struct lp8788_buck2_dvs *)buck->dvs;
158 enum lp8788_dvs_state pin1, pin2;
159
160 if (!dvs)
161 return;
162
163 switch (dvs->vsel) {
164 case DVS_SEL_V0:
165 pin1 = DVS_LOW;
166 pin2 = DVS_LOW;
167 break;
168 case DVS_SEL_V1:
169 pin1 = DVS_HIGH;
170 pin2 = DVS_LOW;
171 break;
172 case DVS_SEL_V2:
173 pin1 = DVS_LOW;
174 pin2 = DVS_HIGH;
175 break;
176 case DVS_SEL_V3:
177 pin1 = DVS_HIGH;
178 pin2 = DVS_HIGH;
179 break;
180 default:
181 return;
182 }
183
184 if (gpio_is_valid(dvs->gpio[0]))
185 gpio_set_value(dvs->gpio[0], pin1);
186
187 if (gpio_is_valid(dvs->gpio[1]))
188 gpio_set_value(dvs->gpio[1], pin2);
189}
190
191static void lp8788_set_dvs(struct lp8788_buck *buck, enum lp8788_buck_id id)
192{
193 switch (id) {
194 case BUCK1:
195 lp8788_buck1_set_dvs(buck);
196 break;
197 case BUCK2:
198 lp8788_buck2_set_dvs(buck);
199 break;
200 default:
201 break;
202 }
203}
204
205static enum lp8788_dvs_mode
206lp8788_get_buck_dvs_ctrl_mode(struct lp8788_buck *buck, enum lp8788_buck_id id)
207{
208 u8 val, mask;
209
210 switch (id) {
211 case BUCK1:
212 mask = LP8788_BUCK1_DVS_SEL_M;
213 break;
214 case BUCK2:
215 mask = LP8788_BUCK2_DVS_SEL_M;
216 break;
217 default:
218 return REGISTER;
219 }
220
221 lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
222
223 return val & mask ? REGISTER : EXTPIN;
224}
225
226static bool lp8788_is_valid_buck_addr(u8 addr)
227{
228 switch (addr) {
229 case LP8788_BUCK1_VOUT0:
230 case LP8788_BUCK1_VOUT1:
231 case LP8788_BUCK1_VOUT2:
232 case LP8788_BUCK1_VOUT3:
233 case LP8788_BUCK2_VOUT0:
234 case LP8788_BUCK2_VOUT1:
235 case LP8788_BUCK2_VOUT2:
236 case LP8788_BUCK2_VOUT3:
237 return true;
238 default:
239 return false;
240 }
241}
242
243static u8 lp8788_select_buck_vout_addr(struct lp8788_buck *buck,
244 enum lp8788_buck_id id)
245{
246 enum lp8788_dvs_mode mode = lp8788_get_buck_dvs_ctrl_mode(buck, id);
247 struct lp8788_buck1_dvs *b1_dvs;
248 struct lp8788_buck2_dvs *b2_dvs;
249 u8 val, idx, addr;
250 int pin1, pin2;
251
252 switch (id) {
253 case BUCK1:
254 if (mode == EXTPIN) {
255 b1_dvs = (struct lp8788_buck1_dvs *)buck->dvs;
256 if (!b1_dvs)
257 goto err;
258
259 idx = gpio_get_value(b1_dvs->gpio) ? 1 : 0;
260 } else {
261 lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
262 idx = (val & LP8788_BUCK1_DVS_M) >> LP8788_BUCK1_DVS_S;
263 }
264 addr = buck1_vout_addr[idx];
265 break;
266 case BUCK2:
267 if (mode == EXTPIN) {
268 b2_dvs = (struct lp8788_buck2_dvs *)buck->dvs;
269 if (!b2_dvs)
270 goto err;
271
272 pin1 = gpio_get_value(b2_dvs->gpio[0]);
273 pin2 = gpio_get_value(b2_dvs->gpio[1]);
274
275 if (pin1 == PIN_LOW && pin2 == PIN_LOW)
276 idx = 0;
277 else if (pin1 == PIN_LOW && pin2 == PIN_HIGH)
278 idx = 2;
279 else if (pin1 == PIN_HIGH && pin2 == PIN_LOW)
280 idx = 1;
281 else
282 idx = 3;
283 } else {
284 lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
285 idx = (val & LP8788_BUCK2_DVS_M) >> LP8788_BUCK2_DVS_S;
286 }
287 addr = buck2_vout_addr[idx];
288 break;
289 default:
290 goto err;
291 }
292
293 return addr;
294err:
295 return INVALID_ADDR;
296}
297
298static int lp8788_buck12_set_voltage_sel(struct regulator_dev *rdev,
299 unsigned selector)
300{
301 struct lp8788_buck *buck = rdev_get_drvdata(rdev);
302 enum lp8788_buck_id id = rdev_get_id(rdev);
303 u8 addr;
304
305 if (buck->dvs)
306 lp8788_set_dvs(buck, id);
307
308 addr = lp8788_select_buck_vout_addr(buck, id);
309 if (!lp8788_is_valid_buck_addr(addr))
310 return -EINVAL;
311
312 return lp8788_update_bits(buck->lp, addr, LP8788_VOUT_M, selector);
313}
314
315static int lp8788_buck12_get_voltage_sel(struct regulator_dev *rdev)
316{
317 struct lp8788_buck *buck = rdev_get_drvdata(rdev);
318 enum lp8788_buck_id id = rdev_get_id(rdev);
319 int ret;
320 u8 val, addr;
321
322 addr = lp8788_select_buck_vout_addr(buck, id);
323 if (!lp8788_is_valid_buck_addr(addr))
324 return -EINVAL;
325
326 ret = lp8788_read_byte(buck->lp, addr, &val);
327 if (ret)
328 return ret;
329
330 return val & LP8788_VOUT_M;
331}
332
333static int lp8788_buck_enable_time(struct regulator_dev *rdev)
334{
335 struct lp8788_buck *buck = rdev_get_drvdata(rdev);
336 enum lp8788_buck_id id = rdev_get_id(rdev);
337 u8 val, addr = LP8788_BUCK1_TIMESTEP + id;
338
339 if (lp8788_read_byte(buck->lp, addr, &val))
340 return -EINVAL;
341
342 val = (val & LP8788_STARTUP_TIME_M) >> LP8788_STARTUP_TIME_S;
343
344 return ENABLE_TIME_USEC * val;
345}
346
347static int lp8788_buck_set_mode(struct regulator_dev *rdev, unsigned int mode)
348{
349 struct lp8788_buck *buck = rdev_get_drvdata(rdev);
350 struct lp8788_pwm_map *pmap = buck->pmap;
351 u8 val;
352
353 if (!pmap)
354 return -EINVAL;
355
356 switch (mode) {
357 case REGULATOR_MODE_FAST:
358 val = LP8788_FORCE_PWM << pmap->shift;
359 break;
360 case REGULATOR_MODE_NORMAL:
361 val = LP8788_AUTO_PWM << pmap->shift;
362 break;
363 default:
364 return -EINVAL;
365 }
366
367 return lp8788_update_bits(buck->lp, LP8788_BUCK_PWM, pmap->mask, val);
368}
369
370static unsigned int lp8788_buck_get_mode(struct regulator_dev *rdev)
371{
372 struct lp8788_buck *buck = rdev_get_drvdata(rdev);
373 struct lp8788_pwm_map *pmap = buck->pmap;
374 u8 val;
375 int ret;
376
377 if (!pmap)
378 return -EINVAL;
379
380 ret = lp8788_read_byte(buck->lp, LP8788_BUCK_PWM, &val);
381 if (ret)
382 return ret;
383
384 return val & pmap->mask ? REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL;
385}
386
387static struct regulator_ops lp8788_buck12_ops = {
388 .list_voltage = regulator_list_voltage_table,
389 .set_voltage_sel = lp8788_buck12_set_voltage_sel,
390 .get_voltage_sel = lp8788_buck12_get_voltage_sel,
391 .enable = regulator_enable_regmap,
392 .disable = regulator_disable_regmap,
393 .is_enabled = regulator_is_enabled_regmap,
394 .enable_time = lp8788_buck_enable_time,
395 .set_mode = lp8788_buck_set_mode,
396 .get_mode = lp8788_buck_get_mode,
397};
398
399static struct regulator_ops lp8788_buck34_ops = {
400 .list_voltage = regulator_list_voltage_table,
401 .set_voltage_sel = regulator_set_voltage_sel_regmap,
402 .get_voltage_sel = regulator_get_voltage_sel_regmap,
403 .enable = regulator_enable_regmap,
404 .disable = regulator_disable_regmap,
405 .is_enabled = regulator_is_enabled_regmap,
406 .enable_time = lp8788_buck_enable_time,
407 .set_mode = lp8788_buck_set_mode,
408 .get_mode = lp8788_buck_get_mode,
409};
410
411static struct regulator_desc lp8788_buck_desc[] = {
412 {
413 .name = "buck1",
414 .id = BUCK1,
415 .ops = &lp8788_buck12_ops,
416 .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl),
417 .volt_table = lp8788_buck_vtbl,
418 .type = REGULATOR_VOLTAGE,
419 .owner = THIS_MODULE,
420 .enable_reg = LP8788_EN_BUCK,
421 .enable_mask = LP8788_EN_BUCK1_M,
422 },
423 {
424 .name = "buck2",
425 .id = BUCK2,
426 .ops = &lp8788_buck12_ops,
427 .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl),
428 .volt_table = lp8788_buck_vtbl,
429 .type = REGULATOR_VOLTAGE,
430 .owner = THIS_MODULE,
431 .enable_reg = LP8788_EN_BUCK,
432 .enable_mask = LP8788_EN_BUCK2_M,
433 },
434 {
435 .name = "buck3",
436 .id = BUCK3,
437 .ops = &lp8788_buck34_ops,
438 .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl),
439 .volt_table = lp8788_buck_vtbl,
440 .type = REGULATOR_VOLTAGE,
441 .owner = THIS_MODULE,
442 .vsel_reg = LP8788_BUCK3_VOUT,
443 .vsel_mask = LP8788_VOUT_M,
444 .enable_reg = LP8788_EN_BUCK,
445 .enable_mask = LP8788_EN_BUCK3_M,
446 },
447 {
448 .name = "buck4",
449 .id = BUCK4,
450 .ops = &lp8788_buck34_ops,
451 .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl),
452 .volt_table = lp8788_buck_vtbl,
453 .type = REGULATOR_VOLTAGE,
454 .owner = THIS_MODULE,
455 .vsel_reg = LP8788_BUCK4_VOUT,
456 .vsel_mask = LP8788_VOUT_M,
457 .enable_reg = LP8788_EN_BUCK,
458 .enable_mask = LP8788_EN_BUCK4_M,
459 },
460};
461
462static int lp8788_set_default_dvs_ctrl_mode(struct lp8788 *lp,
463 enum lp8788_buck_id id)
464{
465 u8 mask, val;
466
467 switch (id) {
468 case BUCK1:
469 mask = LP8788_BUCK1_DVS_SEL_M;
470 val = LP8788_BUCK1_DVS_I2C;
471 break;
472 case BUCK2:
473 mask = LP8788_BUCK2_DVS_SEL_M;
474 val = LP8788_BUCK2_DVS_I2C;
475 break;
476 default:
477 return 0;
478 }
479
480 return lp8788_update_bits(lp, LP8788_BUCK_DVS_SEL, mask, val);
481}
482
483static int _gpio_request(struct lp8788_buck *buck, int gpio, char *name)
484{
485 struct device *dev = buck->lp->dev;
486
487 if (!gpio_is_valid(gpio)) {
488 dev_err(dev, "invalid gpio: %d\n", gpio);
489 return -EINVAL;
490 }
491
492 return devm_gpio_request_one(dev, gpio, DVS_LOW, name);
493}
494
495static int lp8788_dvs_gpio_request(struct lp8788_buck *buck,
496 enum lp8788_buck_id id)
497{
498 struct lp8788_platform_data *pdata = buck->lp->pdata;
499 char *b1_name = "LP8788_B1_DVS";
500 char *b2_name[] = { "LP8788_B2_DVS1", "LP8788_B2_DVS2" };
501 int i, gpio, ret;
502
503 switch (id) {
504 case BUCK1:
505 gpio = pdata->buck1_dvs->gpio;
506 ret = _gpio_request(buck, gpio, b1_name);
507 if (ret)
508 return ret;
509
510 buck->dvs = pdata->buck1_dvs;
511 break;
512 case BUCK2:
513 for (i = 0 ; i < LP8788_NUM_BUCK2_DVS ; i++) {
514 gpio = pdata->buck2_dvs->gpio[i];
515 ret = _gpio_request(buck, gpio, b2_name[i]);
516 if (ret)
517 return ret;
518 }
519 buck->dvs = pdata->buck2_dvs;
520 break;
521 default:
522 break;
523 }
524
525 return 0;
526}
527
528static int lp8788_init_dvs(struct lp8788_buck *buck, enum lp8788_buck_id id)
529{
530 struct lp8788_platform_data *pdata = buck->lp->pdata;
531 u8 mask[] = { LP8788_BUCK1_DVS_SEL_M, LP8788_BUCK2_DVS_SEL_M };
532 u8 val[] = { LP8788_BUCK1_DVS_PIN, LP8788_BUCK2_DVS_PIN };
533
534 /* no dvs for buck3, 4 */
535 if (id == BUCK3 || id == BUCK4)
536 return 0;
537
538 /* no dvs platform data, then dvs will be selected by I2C registers */
539 if (!pdata)
540 goto set_default_dvs_mode;
541
542 if ((id == BUCK1 && !pdata->buck1_dvs) ||
543 (id == BUCK2 && !pdata->buck2_dvs))
544 goto set_default_dvs_mode;
545
546 if (lp8788_dvs_gpio_request(buck, id))
547 goto set_default_dvs_mode;
548
549 return lp8788_update_bits(buck->lp, LP8788_BUCK_DVS_SEL, mask[id],
550 val[id]);
551
552set_default_dvs_mode:
553 return lp8788_set_default_dvs_ctrl_mode(buck->lp, id);
554}
555
556static __devinit int lp8788_buck_probe(struct platform_device *pdev)
557{
558 struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
559 int id = pdev->id;
560 struct lp8788_buck *buck;
561 struct regulator_config cfg = { };
562 struct regulator_dev *rdev;
563 int ret;
564
565 buck = devm_kzalloc(lp->dev, sizeof(struct lp8788_buck), GFP_KERNEL);
566 if (!buck)
567 return -ENOMEM;
568
569 buck->lp = lp;
570 buck->pmap = &buck_pmap[id];
571
572 ret = lp8788_init_dvs(buck, id);
573 if (ret)
574 return ret;
575
576 cfg.dev = lp->dev;
577 cfg.init_data = lp->pdata ? lp->pdata->buck_data[id] : NULL;
578 cfg.driver_data = buck;
579 cfg.regmap = lp->regmap;
580
581 rdev = regulator_register(&lp8788_buck_desc[id], &cfg);
582 if (IS_ERR(rdev)) {
583 ret = PTR_ERR(rdev);
584 dev_err(lp->dev, "BUCK%d regulator register err = %d\n",
585 id + 1, ret);
586 return ret;
587 }
588
589 buck->regulator = rdev;
590 platform_set_drvdata(pdev, buck);
591
592 return 0;
593}
594
595static int __devexit lp8788_buck_remove(struct platform_device *pdev)
596{
597 struct lp8788_buck *buck = platform_get_drvdata(pdev);
598
599 platform_set_drvdata(pdev, NULL);
600 regulator_unregister(buck->regulator);
601
602 return 0;
603}
604
605static struct platform_driver lp8788_buck_driver = {
606 .probe = lp8788_buck_probe,
607 .remove = __devexit_p(lp8788_buck_remove),
608 .driver = {
609 .name = LP8788_DEV_BUCK,
610 .owner = THIS_MODULE,
611 },
612};
613
614static int __init lp8788_buck_init(void)
615{
616 return platform_driver_register(&lp8788_buck_driver);
617}
618subsys_initcall(lp8788_buck_init);
619
620static void __exit lp8788_buck_exit(void)
621{
622 platform_driver_unregister(&lp8788_buck_driver);
623}
624module_exit(lp8788_buck_exit);
625
626MODULE_DESCRIPTION("TI LP8788 BUCK Driver");
627MODULE_AUTHOR("Milo Kim");
628MODULE_LICENSE("GPL");
629MODULE_ALIAS("platform:lp8788-buck");
diff --git a/drivers/regulator/lp8788-ldo.c b/drivers/regulator/lp8788-ldo.c
new file mode 100644
index 000000000000..d2122e41a96d
--- /dev/null
+++ b/drivers/regulator/lp8788-ldo.c
@@ -0,0 +1,842 @@
1/*
2 * TI LP8788 MFD - ldo regulator driver
3 *
4 * Copyright 2012 Texas Instruments
5 *
6 * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/slab.h>
16#include <linux/err.h>
17#include <linux/platform_device.h>
18#include <linux/regulator/driver.h>
19#include <linux/gpio.h>
20#include <linux/mfd/lp8788.h>
21
22/* register address */
23#define LP8788_EN_LDO_A 0x0D /* DLDO 1 ~ 8 */
24#define LP8788_EN_LDO_B 0x0E /* DLDO 9 ~ 12, ALDO 1 ~ 4 */
25#define LP8788_EN_LDO_C 0x0F /* ALDO 5 ~ 10 */
26#define LP8788_EN_SEL 0x10
27#define LP8788_DLDO1_VOUT 0x2E
28#define LP8788_DLDO2_VOUT 0x2F
29#define LP8788_DLDO3_VOUT 0x30
30#define LP8788_DLDO4_VOUT 0x31
31#define LP8788_DLDO5_VOUT 0x32
32#define LP8788_DLDO6_VOUT 0x33
33#define LP8788_DLDO7_VOUT 0x34
34#define LP8788_DLDO8_VOUT 0x35
35#define LP8788_DLDO9_VOUT 0x36
36#define LP8788_DLDO10_VOUT 0x37
37#define LP8788_DLDO11_VOUT 0x38
38#define LP8788_DLDO12_VOUT 0x39
39#define LP8788_ALDO1_VOUT 0x3A
40#define LP8788_ALDO2_VOUT 0x3B
41#define LP8788_ALDO3_VOUT 0x3C
42#define LP8788_ALDO4_VOUT 0x3D
43#define LP8788_ALDO5_VOUT 0x3E
44#define LP8788_ALDO6_VOUT 0x3F
45#define LP8788_ALDO7_VOUT 0x40
46#define LP8788_ALDO8_VOUT 0x41
47#define LP8788_ALDO9_VOUT 0x42
48#define LP8788_ALDO10_VOUT 0x43
49#define LP8788_DLDO1_TIMESTEP 0x44
50
51/* mask/shift bits */
52#define LP8788_EN_DLDO1_M BIT(0) /* Addr 0Dh ~ 0Fh */
53#define LP8788_EN_DLDO2_M BIT(1)
54#define LP8788_EN_DLDO3_M BIT(2)
55#define LP8788_EN_DLDO4_M BIT(3)
56#define LP8788_EN_DLDO5_M BIT(4)
57#define LP8788_EN_DLDO6_M BIT(5)
58#define LP8788_EN_DLDO7_M BIT(6)
59#define LP8788_EN_DLDO8_M BIT(7)
60#define LP8788_EN_DLDO9_M BIT(0)
61#define LP8788_EN_DLDO10_M BIT(1)
62#define LP8788_EN_DLDO11_M BIT(2)
63#define LP8788_EN_DLDO12_M BIT(3)
64#define LP8788_EN_ALDO1_M BIT(4)
65#define LP8788_EN_ALDO2_M BIT(5)
66#define LP8788_EN_ALDO3_M BIT(6)
67#define LP8788_EN_ALDO4_M BIT(7)
68#define LP8788_EN_ALDO5_M BIT(0)
69#define LP8788_EN_ALDO6_M BIT(1)
70#define LP8788_EN_ALDO7_M BIT(2)
71#define LP8788_EN_ALDO8_M BIT(3)
72#define LP8788_EN_ALDO9_M BIT(4)
73#define LP8788_EN_ALDO10_M BIT(5)
74#define LP8788_EN_SEL_DLDO911_M BIT(0) /* Addr 10h */
75#define LP8788_EN_SEL_DLDO7_M BIT(1)
76#define LP8788_EN_SEL_ALDO7_M BIT(2)
77#define LP8788_EN_SEL_ALDO5_M BIT(3)
78#define LP8788_EN_SEL_ALDO234_M BIT(4)
79#define LP8788_EN_SEL_ALDO1_M BIT(5)
80#define LP8788_VOUT_5BIT_M 0x1F /* Addr 2Eh ~ 43h */
81#define LP8788_VOUT_4BIT_M 0x0F
82#define LP8788_VOUT_3BIT_M 0x07
83#define LP8788_VOUT_1BIT_M 0x01
84#define LP8788_STARTUP_TIME_M 0xF8 /* Addr 44h ~ 59h */
85#define LP8788_STARTUP_TIME_S 3
86
87#define ENABLE_TIME_USEC 32
88#define ENABLE GPIOF_OUT_INIT_HIGH
89#define DISABLE GPIOF_OUT_INIT_LOW
90
91enum lp8788_enable_mode {
92 REGISTER,
93 EXTPIN,
94};
95
96enum lp8788_ldo_id {
97 DLDO1,
98 DLDO2,
99 DLDO3,
100 DLDO4,
101 DLDO5,
102 DLDO6,
103 DLDO7,
104 DLDO8,
105 DLDO9,
106 DLDO10,
107 DLDO11,
108 DLDO12,
109 ALDO1,
110 ALDO2,
111 ALDO3,
112 ALDO4,
113 ALDO5,
114 ALDO6,
115 ALDO7,
116 ALDO8,
117 ALDO9,
118 ALDO10,
119};
120
121struct lp8788_ldo {
122 struct lp8788 *lp;
123 struct regulator_desc *desc;
124 struct regulator_dev *regulator;
125 struct lp8788_ldo_enable_pin *en_pin;
126};
127
128/* DLDO 1, 2, 3, 9 voltage table */
129const int lp8788_dldo1239_vtbl[] = {
130 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
131 2600000, 2700000, 2800000, 2900000, 3000000, 2850000, 2850000, 2850000,
132 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000,
133 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000,
134};
135
136/* DLDO 4 voltage table */
137static const int lp8788_dldo4_vtbl[] = { 1800000, 3000000 };
138
139/* DLDO 5, 7, 8 and ALDO 6 voltage table */
140static const int lp8788_dldo578_aldo6_vtbl[] = {
141 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
142 2600000, 2700000, 2800000, 2900000, 3000000, 3000000, 3000000, 3000000,
143};
144
145/* DLDO 6 voltage table */
146static const int lp8788_dldo6_vtbl[] = {
147 3000000, 3100000, 3200000, 3300000, 3400000, 3500000, 3600000, 3600000,
148};
149
150/* DLDO 10, 11 voltage table */
151static const int lp8788_dldo1011_vtbl[] = {
152 1100000, 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000,
153 1500000, 1500000, 1500000, 1500000, 1500000, 1500000, 1500000, 1500000,
154};
155
156/* ALDO 1 voltage table */
157static const int lp8788_aldo1_vtbl[] = { 1800000, 2850000 };
158
159/* ALDO 7 voltage table */
160static const int lp8788_aldo7_vtbl[] = {
161 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1800000,
162};
163
164static enum lp8788_ldo_id lp8788_dldo_id[] = {
165 DLDO1,
166 DLDO2,
167 DLDO3,
168 DLDO4,
169 DLDO5,
170 DLDO6,
171 DLDO7,
172 DLDO8,
173 DLDO9,
174 DLDO10,
175 DLDO11,
176 DLDO12,
177};
178
179static enum lp8788_ldo_id lp8788_aldo_id[] = {
180 ALDO1,
181 ALDO2,
182 ALDO3,
183 ALDO4,
184 ALDO5,
185 ALDO6,
186 ALDO7,
187 ALDO8,
188 ALDO9,
189 ALDO10,
190};
191
192/* DLDO 7, 9 and 11, ALDO 1 ~ 5 and 7
193 : can be enabled either by external pin or by i2c register */
194static enum lp8788_enable_mode
195lp8788_get_ldo_enable_mode(struct lp8788_ldo *ldo, enum lp8788_ldo_id id)
196{
197 int ret;
198 u8 val, mask;
199
200 ret = lp8788_read_byte(ldo->lp, LP8788_EN_SEL, &val);
201 if (ret)
202 return ret;
203
204 switch (id) {
205 case DLDO7:
206 mask = LP8788_EN_SEL_DLDO7_M;
207 break;
208 case DLDO9:
209 case DLDO11:
210 mask = LP8788_EN_SEL_DLDO911_M;
211 break;
212 case ALDO1:
213 mask = LP8788_EN_SEL_ALDO1_M;
214 break;
215 case ALDO2 ... ALDO4:
216 mask = LP8788_EN_SEL_ALDO234_M;
217 break;
218 case ALDO5:
219 mask = LP8788_EN_SEL_ALDO5_M;
220 break;
221 case ALDO7:
222 mask = LP8788_EN_SEL_ALDO7_M;
223 break;
224 default:
225 return REGISTER;
226 }
227
228 return val & mask ? EXTPIN : REGISTER;
229}
230
231static int lp8788_ldo_ctrl_by_extern_pin(struct lp8788_ldo *ldo, int pinstate)
232{
233 struct lp8788_ldo_enable_pin *pin = ldo->en_pin;
234
235 if (!pin)
236 return -EINVAL;
237
238 if (gpio_is_valid(pin->gpio))
239 gpio_set_value(pin->gpio, pinstate);
240
241 return 0;
242}
243
244static int lp8788_ldo_is_enabled_by_extern_pin(struct lp8788_ldo *ldo)
245{
246 struct lp8788_ldo_enable_pin *pin = ldo->en_pin;
247
248 if (!pin)
249 return -EINVAL;
250
251 return gpio_get_value(pin->gpio) ? 1 : 0;
252}
253
254static int lp8788_ldo_enable(struct regulator_dev *rdev)
255{
256 struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
257 enum lp8788_ldo_id id = rdev_get_id(rdev);
258 enum lp8788_enable_mode mode = lp8788_get_ldo_enable_mode(ldo, id);
259
260 switch (mode) {
261 case EXTPIN:
262 return lp8788_ldo_ctrl_by_extern_pin(ldo, ENABLE);
263 case REGISTER:
264 return regulator_enable_regmap(rdev);
265 default:
266 return -EINVAL;
267 }
268}
269
270static int lp8788_ldo_disable(struct regulator_dev *rdev)
271{
272 struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
273 enum lp8788_ldo_id id = rdev_get_id(rdev);
274 enum lp8788_enable_mode mode = lp8788_get_ldo_enable_mode(ldo, id);
275
276 switch (mode) {
277 case EXTPIN:
278 return lp8788_ldo_ctrl_by_extern_pin(ldo, DISABLE);
279 case REGISTER:
280 return regulator_disable_regmap(rdev);
281 default:
282 return -EINVAL;
283 }
284}
285
286static int lp8788_ldo_is_enabled(struct regulator_dev *rdev)
287{
288 struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
289 enum lp8788_ldo_id id = rdev_get_id(rdev);
290 enum lp8788_enable_mode mode = lp8788_get_ldo_enable_mode(ldo, id);
291
292 switch (mode) {
293 case EXTPIN:
294 return lp8788_ldo_is_enabled_by_extern_pin(ldo);
295 case REGISTER:
296 return regulator_is_enabled_regmap(rdev);
297 default:
298 return -EINVAL;
299 }
300}
301
302static int lp8788_ldo_enable_time(struct regulator_dev *rdev)
303{
304 struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
305 enum lp8788_ldo_id id = rdev_get_id(rdev);
306 u8 val, addr = LP8788_DLDO1_TIMESTEP + id;
307
308 if (lp8788_read_byte(ldo->lp, addr, &val))
309 return -EINVAL;
310
311 val = (val & LP8788_STARTUP_TIME_M) >> LP8788_STARTUP_TIME_S;
312
313 return ENABLE_TIME_USEC * val;
314}
315
316static int lp8788_ldo_fixed_get_voltage(struct regulator_dev *rdev)
317{
318 enum lp8788_ldo_id id = rdev_get_id(rdev);
319
320 switch (id) {
321 case ALDO2 ... ALDO5:
322 return 2850000;
323 case DLDO12:
324 case ALDO8 ... ALDO9:
325 return 2500000;
326 case ALDO10:
327 return 1100000;
328 default:
329 return -EINVAL;
330 }
331}
332
333static struct regulator_ops lp8788_ldo_voltage_table_ops = {
334 .list_voltage = regulator_list_voltage_table,
335 .set_voltage_sel = regulator_set_voltage_sel_regmap,
336 .get_voltage_sel = regulator_get_voltage_sel_regmap,
337 .enable = lp8788_ldo_enable,
338 .disable = lp8788_ldo_disable,
339 .is_enabled = lp8788_ldo_is_enabled,
340 .enable_time = lp8788_ldo_enable_time,
341};
342
343static struct regulator_ops lp8788_ldo_voltage_fixed_ops = {
344 .get_voltage = lp8788_ldo_fixed_get_voltage,
345 .enable = lp8788_ldo_enable,
346 .disable = lp8788_ldo_disable,
347 .is_enabled = lp8788_ldo_is_enabled,
348 .enable_time = lp8788_ldo_enable_time,
349};
350
351static struct regulator_desc lp8788_dldo_desc[] = {
352 {
353 .name = "dldo1",
354 .id = DLDO1,
355 .ops = &lp8788_ldo_voltage_table_ops,
356 .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
357 .volt_table = lp8788_dldo1239_vtbl,
358 .type = REGULATOR_VOLTAGE,
359 .owner = THIS_MODULE,
360 .vsel_reg = LP8788_DLDO1_VOUT,
361 .vsel_mask = LP8788_VOUT_5BIT_M,
362 .enable_reg = LP8788_EN_LDO_A,
363 .enable_mask = LP8788_EN_DLDO1_M,
364 },
365 {
366 .name = "dldo2",
367 .id = DLDO2,
368 .ops = &lp8788_ldo_voltage_table_ops,
369 .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
370 .volt_table = lp8788_dldo1239_vtbl,
371 .type = REGULATOR_VOLTAGE,
372 .owner = THIS_MODULE,
373 .vsel_reg = LP8788_DLDO2_VOUT,
374 .vsel_mask = LP8788_VOUT_5BIT_M,
375 .enable_reg = LP8788_EN_LDO_A,
376 .enable_mask = LP8788_EN_DLDO2_M,
377 },
378 {
379 .name = "dldo3",
380 .id = DLDO3,
381 .ops = &lp8788_ldo_voltage_table_ops,
382 .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
383 .volt_table = lp8788_dldo1239_vtbl,
384 .type = REGULATOR_VOLTAGE,
385 .owner = THIS_MODULE,
386 .vsel_reg = LP8788_DLDO3_VOUT,
387 .vsel_mask = LP8788_VOUT_5BIT_M,
388 .enable_reg = LP8788_EN_LDO_A,
389 .enable_mask = LP8788_EN_DLDO3_M,
390 },
391 {
392 .name = "dldo4",
393 .id = DLDO4,
394 .ops = &lp8788_ldo_voltage_table_ops,
395 .n_voltages = ARRAY_SIZE(lp8788_dldo4_vtbl),
396 .volt_table = lp8788_dldo4_vtbl,
397 .type = REGULATOR_VOLTAGE,
398 .owner = THIS_MODULE,
399 .vsel_reg = LP8788_DLDO4_VOUT,
400 .vsel_mask = LP8788_VOUT_1BIT_M,
401 .enable_reg = LP8788_EN_LDO_A,
402 .enable_mask = LP8788_EN_DLDO4_M,
403 },
404 {
405 .name = "dldo5",
406 .id = DLDO5,
407 .ops = &lp8788_ldo_voltage_table_ops,
408 .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
409 .volt_table = lp8788_dldo578_aldo6_vtbl,
410 .type = REGULATOR_VOLTAGE,
411 .owner = THIS_MODULE,
412 .vsel_reg = LP8788_DLDO5_VOUT,
413 .vsel_mask = LP8788_VOUT_4BIT_M,
414 .enable_reg = LP8788_EN_LDO_A,
415 .enable_mask = LP8788_EN_DLDO5_M,
416 },
417 {
418 .name = "dldo6",
419 .id = DLDO6,
420 .ops = &lp8788_ldo_voltage_table_ops,
421 .n_voltages = ARRAY_SIZE(lp8788_dldo6_vtbl),
422 .volt_table = lp8788_dldo6_vtbl,
423 .type = REGULATOR_VOLTAGE,
424 .owner = THIS_MODULE,
425 .vsel_reg = LP8788_DLDO6_VOUT,
426 .vsel_mask = LP8788_VOUT_3BIT_M,
427 .enable_reg = LP8788_EN_LDO_A,
428 .enable_mask = LP8788_EN_DLDO6_M,
429 },
430 {
431 .name = "dldo7",
432 .id = DLDO7,
433 .ops = &lp8788_ldo_voltage_table_ops,
434 .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
435 .volt_table = lp8788_dldo578_aldo6_vtbl,
436 .type = REGULATOR_VOLTAGE,
437 .owner = THIS_MODULE,
438 .vsel_reg = LP8788_DLDO7_VOUT,
439 .vsel_mask = LP8788_VOUT_4BIT_M,
440 .enable_reg = LP8788_EN_LDO_A,
441 .enable_mask = LP8788_EN_DLDO7_M,
442 },
443 {
444 .name = "dldo8",
445 .id = DLDO8,
446 .ops = &lp8788_ldo_voltage_table_ops,
447 .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
448 .volt_table = lp8788_dldo578_aldo6_vtbl,
449 .type = REGULATOR_VOLTAGE,
450 .owner = THIS_MODULE,
451 .vsel_reg = LP8788_DLDO8_VOUT,
452 .vsel_mask = LP8788_VOUT_4BIT_M,
453 .enable_reg = LP8788_EN_LDO_A,
454 .enable_mask = LP8788_EN_DLDO8_M,
455 },
456 {
457 .name = "dldo9",
458 .id = DLDO9,
459 .ops = &lp8788_ldo_voltage_table_ops,
460 .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
461 .volt_table = lp8788_dldo1239_vtbl,
462 .type = REGULATOR_VOLTAGE,
463 .owner = THIS_MODULE,
464 .vsel_reg = LP8788_DLDO9_VOUT,
465 .vsel_mask = LP8788_VOUT_5BIT_M,
466 .enable_reg = LP8788_EN_LDO_B,
467 .enable_mask = LP8788_EN_DLDO9_M,
468 },
469 {
470 .name = "dldo10",
471 .id = DLDO10,
472 .ops = &lp8788_ldo_voltage_table_ops,
473 .n_voltages = ARRAY_SIZE(lp8788_dldo1011_vtbl),
474 .volt_table = lp8788_dldo1011_vtbl,
475 .type = REGULATOR_VOLTAGE,
476 .owner = THIS_MODULE,
477 .vsel_reg = LP8788_DLDO10_VOUT,
478 .vsel_mask = LP8788_VOUT_4BIT_M,
479 .enable_reg = LP8788_EN_LDO_B,
480 .enable_mask = LP8788_EN_DLDO10_M,
481 },
482 {
483 .name = "dldo11",
484 .id = DLDO11,
485 .ops = &lp8788_ldo_voltage_table_ops,
486 .n_voltages = ARRAY_SIZE(lp8788_dldo1011_vtbl),
487 .volt_table = lp8788_dldo1011_vtbl,
488 .type = REGULATOR_VOLTAGE,
489 .owner = THIS_MODULE,
490 .vsel_reg = LP8788_DLDO11_VOUT,
491 .vsel_mask = LP8788_VOUT_4BIT_M,
492 .enable_reg = LP8788_EN_LDO_B,
493 .enable_mask = LP8788_EN_DLDO11_M,
494 },
495 {
496 .name = "dldo12",
497 .id = DLDO12,
498 .ops = &lp8788_ldo_voltage_fixed_ops,
499 .type = REGULATOR_VOLTAGE,
500 .owner = THIS_MODULE,
501 .enable_reg = LP8788_EN_LDO_B,
502 .enable_mask = LP8788_EN_DLDO12_M,
503 },
504};
505
506static struct regulator_desc lp8788_aldo_desc[] = {
507 {
508 .name = "aldo1",
509 .id = ALDO1,
510 .ops = &lp8788_ldo_voltage_table_ops,
511 .n_voltages = ARRAY_SIZE(lp8788_aldo1_vtbl),
512 .volt_table = lp8788_aldo1_vtbl,
513 .type = REGULATOR_VOLTAGE,
514 .owner = THIS_MODULE,
515 .vsel_reg = LP8788_ALDO1_VOUT,
516 .vsel_mask = LP8788_VOUT_1BIT_M,
517 .enable_reg = LP8788_EN_LDO_B,
518 .enable_mask = LP8788_EN_ALDO1_M,
519 },
520 {
521 .name = "aldo2",
522 .id = ALDO2,
523 .ops = &lp8788_ldo_voltage_fixed_ops,
524 .type = REGULATOR_VOLTAGE,
525 .owner = THIS_MODULE,
526 .enable_reg = LP8788_EN_LDO_B,
527 .enable_mask = LP8788_EN_ALDO2_M,
528 },
529 {
530 .name = "aldo3",
531 .id = ALDO3,
532 .ops = &lp8788_ldo_voltage_fixed_ops,
533 .type = REGULATOR_VOLTAGE,
534 .owner = THIS_MODULE,
535 .enable_reg = LP8788_EN_LDO_B,
536 .enable_mask = LP8788_EN_ALDO3_M,
537 },
538 {
539 .name = "aldo4",
540 .id = ALDO4,
541 .ops = &lp8788_ldo_voltage_fixed_ops,
542 .type = REGULATOR_VOLTAGE,
543 .owner = THIS_MODULE,
544 .enable_reg = LP8788_EN_LDO_B,
545 .enable_mask = LP8788_EN_ALDO4_M,
546 },
547 {
548 .name = "aldo5",
549 .id = ALDO5,
550 .ops = &lp8788_ldo_voltage_fixed_ops,
551 .type = REGULATOR_VOLTAGE,
552 .owner = THIS_MODULE,
553 .enable_reg = LP8788_EN_LDO_C,
554 .enable_mask = LP8788_EN_ALDO5_M,
555 },
556 {
557 .name = "aldo6",
558 .id = ALDO6,
559 .ops = &lp8788_ldo_voltage_table_ops,
560 .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
561 .volt_table = lp8788_dldo578_aldo6_vtbl,
562 .type = REGULATOR_VOLTAGE,
563 .owner = THIS_MODULE,
564 .vsel_reg = LP8788_ALDO6_VOUT,
565 .vsel_mask = LP8788_VOUT_4BIT_M,
566 .enable_reg = LP8788_EN_LDO_C,
567 .enable_mask = LP8788_EN_ALDO6_M,
568 },
569 {
570 .name = "aldo7",
571 .id = ALDO7,
572 .ops = &lp8788_ldo_voltage_table_ops,
573 .n_voltages = ARRAY_SIZE(lp8788_aldo7_vtbl),
574 .volt_table = lp8788_aldo7_vtbl,
575 .type = REGULATOR_VOLTAGE,
576 .owner = THIS_MODULE,
577 .vsel_reg = LP8788_ALDO7_VOUT,
578 .vsel_mask = LP8788_VOUT_3BIT_M,
579 .enable_reg = LP8788_EN_LDO_C,
580 .enable_mask = LP8788_EN_ALDO7_M,
581 },
582 {
583 .name = "aldo8",
584 .id = ALDO8,
585 .ops = &lp8788_ldo_voltage_fixed_ops,
586 .type = REGULATOR_VOLTAGE,
587 .owner = THIS_MODULE,
588 .enable_reg = LP8788_EN_LDO_C,
589 .enable_mask = LP8788_EN_ALDO8_M,
590 },
591 {
592 .name = "aldo9",
593 .id = ALDO9,
594 .ops = &lp8788_ldo_voltage_fixed_ops,
595 .type = REGULATOR_VOLTAGE,
596 .owner = THIS_MODULE,
597 .enable_reg = LP8788_EN_LDO_C,
598 .enable_mask = LP8788_EN_ALDO9_M,
599 },
600 {
601 .name = "aldo10",
602 .id = ALDO10,
603 .ops = &lp8788_ldo_voltage_fixed_ops,
604 .type = REGULATOR_VOLTAGE,
605 .owner = THIS_MODULE,
606 .enable_reg = LP8788_EN_LDO_C,
607 .enable_mask = LP8788_EN_ALDO10_M,
608 },
609};
610
611static int lp8788_gpio_request_ldo_en(struct lp8788_ldo *ldo,
612 enum lp8788_ext_ldo_en_id id)
613{
614 struct device *dev = ldo->lp->dev;
615 struct lp8788_ldo_enable_pin *pin = ldo->en_pin;
616 int ret, gpio, pinstate;
617 char *name[] = {
618 [EN_ALDO1] = "LP8788_EN_ALDO1",
619 [EN_ALDO234] = "LP8788_EN_ALDO234",
620 [EN_ALDO5] = "LP8788_EN_ALDO5",
621 [EN_ALDO7] = "LP8788_EN_ALDO7",
622 [EN_DLDO7] = "LP8788_EN_DLDO7",
623 [EN_DLDO911] = "LP8788_EN_DLDO911",
624 };
625
626 gpio = pin->gpio;
627 if (!gpio_is_valid(gpio)) {
628 dev_err(dev, "invalid gpio: %d\n", gpio);
629 return -EINVAL;
630 }
631
632 pinstate = pin->init_state;
633 ret = devm_gpio_request_one(dev, gpio, pinstate, name[id]);
634 if (ret == -EBUSY) {
635 dev_warn(dev, "gpio%d already used\n", gpio);
636 return 0;
637 }
638
639 return ret;
640}
641
642static int lp8788_config_ldo_enable_mode(struct lp8788_ldo *ldo,
643 enum lp8788_ldo_id id)
644{
645 int ret;
646 struct lp8788 *lp = ldo->lp;
647 struct lp8788_platform_data *pdata = lp->pdata;
648 enum lp8788_ext_ldo_en_id enable_id;
649 u8 en_mask[] = {
650 [EN_ALDO1] = LP8788_EN_SEL_ALDO1_M,
651 [EN_ALDO234] = LP8788_EN_SEL_ALDO234_M,
652 [EN_ALDO5] = LP8788_EN_SEL_ALDO5_M,
653 [EN_ALDO7] = LP8788_EN_SEL_ALDO7_M,
654 [EN_DLDO7] = LP8788_EN_SEL_DLDO7_M,
655 [EN_DLDO911] = LP8788_EN_SEL_DLDO911_M,
656 };
657 u8 val[] = {
658 [EN_ALDO1] = 0 << 5,
659 [EN_ALDO234] = 0 << 4,
660 [EN_ALDO5] = 0 << 3,
661 [EN_ALDO7] = 0 << 2,
662 [EN_DLDO7] = 0 << 1,
663 [EN_DLDO911] = 0 << 0,
664 };
665
666 switch (id) {
667 case DLDO7:
668 enable_id = EN_DLDO7;
669 break;
670 case DLDO9:
671 case DLDO11:
672 enable_id = EN_DLDO911;
673 break;
674 case ALDO1:
675 enable_id = EN_ALDO1;
676 break;
677 case ALDO2 ... ALDO4:
678 enable_id = EN_ALDO234;
679 break;
680 case ALDO5:
681 enable_id = EN_ALDO5;
682 break;
683 case ALDO7:
684 enable_id = EN_ALDO7;
685 break;
686 default:
687 return 0;
688 }
689
690 /* if no platform data for ldo pin, then set default enable mode */
691 if (!pdata || !pdata->ldo_pin || !pdata->ldo_pin[enable_id])
692 goto set_default_ldo_enable_mode;
693
694 ldo->en_pin = pdata->ldo_pin[enable_id];
695
696 ret = lp8788_gpio_request_ldo_en(ldo, enable_id);
697 if (ret)
698 goto set_default_ldo_enable_mode;
699
700 return ret;
701
702set_default_ldo_enable_mode:
703 return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id],
704 val[enable_id]);
705}
706
707static __devinit int lp8788_dldo_probe(struct platform_device *pdev)
708{
709 struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
710 int id = pdev->id;
711 struct lp8788_ldo *ldo;
712 struct regulator_config cfg = { };
713 struct regulator_dev *rdev;
714 int ret;
715
716 ldo = devm_kzalloc(lp->dev, sizeof(struct lp8788_ldo), GFP_KERNEL);
717 if (!ldo)
718 return -ENOMEM;
719
720 ldo->lp = lp;
721 ret = lp8788_config_ldo_enable_mode(ldo, lp8788_dldo_id[id]);
722 if (ret)
723 return ret;
724
725 cfg.dev = lp->dev;
726 cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL;
727 cfg.driver_data = ldo;
728 cfg.regmap = lp->regmap;
729
730 rdev = regulator_register(&lp8788_dldo_desc[id], &cfg);
731 if (IS_ERR(rdev)) {
732 ret = PTR_ERR(rdev);
733 dev_err(lp->dev, "DLDO%d regulator register err = %d\n",
734 id + 1, ret);
735 return ret;
736 }
737
738 ldo->regulator = rdev;
739 platform_set_drvdata(pdev, ldo);
740
741 return 0;
742}
743
744static int __devexit lp8788_dldo_remove(struct platform_device *pdev)
745{
746 struct lp8788_ldo *ldo = platform_get_drvdata(pdev);
747
748 platform_set_drvdata(pdev, NULL);
749 regulator_unregister(ldo->regulator);
750
751 return 0;
752}
753
754static struct platform_driver lp8788_dldo_driver = {
755 .probe = lp8788_dldo_probe,
756 .remove = __devexit_p(lp8788_dldo_remove),
757 .driver = {
758 .name = LP8788_DEV_DLDO,
759 .owner = THIS_MODULE,
760 },
761};
762
763static __devinit int lp8788_aldo_probe(struct platform_device *pdev)
764{
765 struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
766 int id = pdev->id;
767 struct lp8788_ldo *ldo;
768 struct regulator_config cfg = { };
769 struct regulator_dev *rdev;
770 int ret;
771
772 ldo = devm_kzalloc(lp->dev, sizeof(struct lp8788_ldo), GFP_KERNEL);
773 if (!ldo)
774 return -ENOMEM;
775
776 ldo->lp = lp;
777 ret = lp8788_config_ldo_enable_mode(ldo, lp8788_aldo_id[id]);
778 if (ret)
779 return ret;
780
781 cfg.dev = lp->dev;
782 cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL;
783 cfg.driver_data = ldo;
784 cfg.regmap = lp->regmap;
785
786 rdev = regulator_register(&lp8788_aldo_desc[id], &cfg);
787 if (IS_ERR(rdev)) {
788 ret = PTR_ERR(rdev);
789 dev_err(lp->dev, "ALDO%d regulator register err = %d\n",
790 id + 1, ret);
791 return ret;
792 }
793
794 ldo->regulator = rdev;
795 platform_set_drvdata(pdev, ldo);
796
797 return 0;
798}
799
800static int __devexit lp8788_aldo_remove(struct platform_device *pdev)
801{
802 struct lp8788_ldo *ldo = platform_get_drvdata(pdev);
803
804 platform_set_drvdata(pdev, NULL);
805 regulator_unregister(ldo->regulator);
806
807 return 0;
808}
809
810static struct platform_driver lp8788_aldo_driver = {
811 .probe = lp8788_aldo_probe,
812 .remove = __devexit_p(lp8788_aldo_remove),
813 .driver = {
814 .name = LP8788_DEV_ALDO,
815 .owner = THIS_MODULE,
816 },
817};
818
819static int __init lp8788_ldo_init(void)
820{
821 int ret;
822
823 ret = platform_driver_register(&lp8788_dldo_driver);
824 if (ret)
825 return ret;
826
827 return platform_driver_register(&lp8788_aldo_driver);
828}
829subsys_initcall(lp8788_ldo_init);
830
831static void __exit lp8788_ldo_exit(void)
832{
833 platform_driver_unregister(&lp8788_aldo_driver);
834 platform_driver_unregister(&lp8788_dldo_driver);
835}
836module_exit(lp8788_ldo_exit);
837
838MODULE_DESCRIPTION("TI LP8788 LDO Driver");
839MODULE_AUTHOR("Milo Kim");
840MODULE_LICENSE("GPL");
841MODULE_ALIAS("platform:lp8788-dldo");
842MODULE_ALIAS("platform:lp8788-aldo");
diff --git a/drivers/regulator/max1586.c b/drivers/regulator/max1586.c
index b9444ee08da9..f67af3c1b963 100644
--- a/drivers/regulator/max1586.c
+++ b/drivers/regulator/max1586.c
@@ -48,6 +48,14 @@ struct max1586_data {
48}; 48};
49 49
50/* 50/*
51 * V6 voltage
52 * On I2C bus, sending a "x" byte to the max1586 means :
53 * set V6 to either 0V, 1.8V, 2.5V, 3V depending on (x & 0x3)
54 * As regulator framework doesn't accept voltages to be 0V, we use 1uV.
55 */
56static int v6_voltages_uv[] = { 1, 1800000, 2500000, 3000000 };
57
58/*
51 * V3 voltage 59 * V3 voltage
52 * On I2C bus, sending a "x" byte to the max1586 means : 60 * On I2C bus, sending a "x" byte to the max1586 means :
53 * set V3 to 0.700V + (x & 0x1f) * 0.025V 61 * set V3 to 0.700V + (x & 0x1f) * 0.025V
@@ -55,113 +63,49 @@ struct max1586_data {
55 * R24 and R25=100kOhm as described in the data sheet. 63 * R24 and R25=100kOhm as described in the data sheet.
56 * The gain is approximately: 1 + R24/R25 + R24/185.5kOhm 64 * The gain is approximately: 1 + R24/R25 + R24/185.5kOhm
57 */ 65 */
58static int max1586_v3_calc_voltage(struct max1586_data *max1586, 66static int max1586_v3_set_voltage_sel(struct regulator_dev *rdev,
59 unsigned selector) 67 unsigned selector)
60{
61 unsigned range_uV = max1586->max_uV - max1586->min_uV;
62
63 return max1586->min_uV + (selector * range_uV / MAX1586_V3_MAX_VSEL);
64}
65
66static int max1586_v3_set(struct regulator_dev *rdev, int min_uV, int max_uV,
67 unsigned *selector)
68{ 68{
69 struct max1586_data *max1586 = rdev_get_drvdata(rdev); 69 struct max1586_data *max1586 = rdev_get_drvdata(rdev);
70 struct i2c_client *client = max1586->client; 70 struct i2c_client *client = max1586->client;
71 unsigned range_uV = max1586->max_uV - max1586->min_uV;
72 u8 v3_prog; 71 u8 v3_prog;
73 72
74 if (min_uV > max1586->max_uV || max_uV < max1586->min_uV)
75 return -EINVAL;
76 if (min_uV < max1586->min_uV)
77 min_uV = max1586->min_uV;
78
79 *selector = DIV_ROUND_UP((min_uV - max1586->min_uV) *
80 MAX1586_V3_MAX_VSEL, range_uV);
81 if (max1586_v3_calc_voltage(max1586, *selector) > max_uV)
82 return -EINVAL;
83
84 dev_dbg(&client->dev, "changing voltage v3 to %dmv\n", 73 dev_dbg(&client->dev, "changing voltage v3 to %dmv\n",
85 max1586_v3_calc_voltage(max1586, *selector) / 1000); 74 regulator_list_voltage_linear(rdev, selector) / 1000);
86 75
87 v3_prog = I2C_V3_SELECT | (u8) *selector; 76 v3_prog = I2C_V3_SELECT | (u8) selector;
88 return i2c_smbus_write_byte(client, v3_prog); 77 return i2c_smbus_write_byte(client, v3_prog);
89} 78}
90 79
91static int max1586_v3_list(struct regulator_dev *rdev, unsigned selector) 80static int max1586_v6_set_voltage_sel(struct regulator_dev *rdev,
92{ 81 unsigned int selector)
93 struct max1586_data *max1586 = rdev_get_drvdata(rdev);
94
95 if (selector > MAX1586_V3_MAX_VSEL)
96 return -EINVAL;
97 return max1586_v3_calc_voltage(max1586, selector);
98}
99
100/*
101 * V6 voltage
102 * On I2C bus, sending a "x" byte to the max1586 means :
103 * set V6 to either 0V, 1.8V, 2.5V, 3V depending on (x & 0x3)
104 * As regulator framework doesn't accept voltages to be 0V, we use 1uV.
105 */
106static int max1586_v6_calc_voltage(unsigned selector)
107{
108 static int voltages_uv[] = { 1, 1800000, 2500000, 3000000 };
109
110 return voltages_uv[selector];
111}
112
113static int max1586_v6_set(struct regulator_dev *rdev, int min_uV, int max_uV,
114 unsigned int *selector)
115{ 82{
116 struct i2c_client *client = rdev_get_drvdata(rdev); 83 struct i2c_client *client = rdev_get_drvdata(rdev);
117 u8 v6_prog; 84 u8 v6_prog;
118 85
119 if (min_uV < MAX1586_V6_MIN_UV || min_uV > MAX1586_V6_MAX_UV)
120 return -EINVAL;
121 if (max_uV < MAX1586_V6_MIN_UV || max_uV > MAX1586_V6_MAX_UV)
122 return -EINVAL;
123
124 if (min_uV < 1800000)
125 *selector = 0;
126 else if (min_uV < 2500000)
127 *selector = 1;
128 else if (min_uV < 3000000)
129 *selector = 2;
130 else if (min_uV >= 3000000)
131 *selector = 3;
132
133 if (max1586_v6_calc_voltage(*selector) > max_uV)
134 return -EINVAL;
135
136 dev_dbg(&client->dev, "changing voltage v6 to %dmv\n", 86 dev_dbg(&client->dev, "changing voltage v6 to %dmv\n",
137 max1586_v6_calc_voltage(*selector) / 1000); 87 rdev->desc->volt_table[selector] / 1000);
138 88
139 v6_prog = I2C_V6_SELECT | (u8) *selector; 89 v6_prog = I2C_V6_SELECT | (u8) selector;
140 return i2c_smbus_write_byte(client, v6_prog); 90 return i2c_smbus_write_byte(client, v6_prog);
141} 91}
142 92
143static int max1586_v6_list(struct regulator_dev *rdev, unsigned selector)
144{
145 if (selector > MAX1586_V6_MAX_VSEL)
146 return -EINVAL;
147 return max1586_v6_calc_voltage(selector);
148}
149
150/* 93/*
151 * The Maxim 1586 controls V3 and V6 voltages, but offers no way of reading back 94 * The Maxim 1586 controls V3 and V6 voltages, but offers no way of reading back
152 * the set up value. 95 * the set up value.
153 */ 96 */
154static struct regulator_ops max1586_v3_ops = { 97static struct regulator_ops max1586_v3_ops = {
155 .set_voltage = max1586_v3_set, 98 .set_voltage_sel = max1586_v3_set_voltage_sel,
156 .list_voltage = max1586_v3_list, 99 .list_voltage = regulator_list_voltage_linear,
100 .map_voltage = regulator_map_voltage_linear,
157}; 101};
158 102
159static struct regulator_ops max1586_v6_ops = { 103static struct regulator_ops max1586_v6_ops = {
160 .set_voltage = max1586_v6_set, 104 .set_voltage_sel = max1586_v6_set_voltage_sel,
161 .list_voltage = max1586_v6_list, 105 .list_voltage = regulator_list_voltage_table,
162}; 106};
163 107
164static const struct regulator_desc max1586_reg[] = { 108static struct regulator_desc max1586_reg[] = {
165 { 109 {
166 .name = "Output_V3", 110 .name = "Output_V3",
167 .id = MAX1586_V3, 111 .id = MAX1586_V3,
@@ -176,6 +120,7 @@ static const struct regulator_desc max1586_reg[] = {
176 .ops = &max1586_v6_ops, 120 .ops = &max1586_v6_ops,
177 .type = REGULATOR_VOLTAGE, 121 .type = REGULATOR_VOLTAGE,
178 .n_voltages = MAX1586_V6_MAX_VSEL + 1, 122 .n_voltages = MAX1586_V6_MAX_VSEL + 1,
123 .volt_table = v6_voltages_uv,
179 .owner = THIS_MODULE, 124 .owner = THIS_MODULE,
180 }, 125 },
181}; 126};
@@ -213,6 +158,13 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
213 goto err; 158 goto err;
214 } 159 }
215 160
161 if (id == MAX1586_V3) {
162 max1586_reg[id].min_uV = max1586->min_uV;
163 max1586_reg[id].uV_step =
164 (max1586->max_uV - max1586->min_uV) /
165 MAX1586_V3_MAX_VSEL;
166 }
167
216 config.dev = &client->dev; 168 config.dev = &client->dev;
217 config.init_data = pdata->subdevs[i].platform_data; 169 config.init_data = pdata->subdevs[i].platform_data;
218 config.driver_data = max1586; 170 config.driver_data = max1586;
diff --git a/drivers/regulator/max77686.c b/drivers/regulator/max77686.c
new file mode 100644
index 000000000000..c564af6f05a3
--- /dev/null
+++ b/drivers/regulator/max77686.c
@@ -0,0 +1,389 @@
1/*
2 * max77686.c - Regulator driver for the Maxim 77686
3 *
4 * Copyright (C) 2012 Samsung Electronics
5 * Chiwoong Byun <woong.byun@smasung.com>
6 * Jonghwa Lee <jonghwa3.lee@samsung.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 * This driver is based on max8997.c
23 */
24
25#include <linux/kernel.h>
26#include <linux/bug.h>
27#include <linux/delay.h>
28#include <linux/err.h>
29#include <linux/gpio.h>
30#include <linux/slab.h>
31#include <linux/platform_device.h>
32#include <linux/regulator/driver.h>
33#include <linux/regulator/machine.h>
34#include <linux/regulator/of_regulator.h>
35#include <linux/mfd/max77686.h>
36#include <linux/mfd/max77686-private.h>
37
38#define MAX77686_LDO_MINUV 800000
39#define MAX77686_LDO_UVSTEP 50000
40#define MAX77686_LDO_LOW_MINUV 800000
41#define MAX77686_LDO_LOW_UVSTEP 25000
42#define MAX77686_BUCK_MINUV 750000
43#define MAX77686_BUCK_UVSTEP 50000
44#define MAX77686_RAMP_DELAY 100000 /* uV/us */
45#define MAX77686_DVS_RAMP_DELAY 27500 /* uV/us */
46#define MAX77686_DVS_MINUV 600000
47#define MAX77686_DVS_UVSTEP 12500
48
49#define MAX77686_OPMODE_SHIFT 6
50#define MAX77686_OPMODE_BUCK234_SHIFT 4
51#define MAX77686_OPMODE_MASK 0x3
52
53#define MAX77686_VSEL_MASK 0x3F
54#define MAX77686_DVS_VSEL_MASK 0xFF
55
56#define MAX77686_RAMP_RATE_MASK 0xC0
57
58#define MAX77686_REGULATORS MAX77686_REG_MAX
59#define MAX77686_LDOS 26
60
61enum max77686_ramp_rate {
62 RAMP_RATE_13P75MV,
63 RAMP_RATE_27P5MV,
64 RAMP_RATE_55MV,
65 RAMP_RATE_NO_CTRL, /* 100mV/us */
66};
67
68struct max77686_data {
69 struct regulator_dev **rdev;
70};
71
72static int max77686_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
73{
74 unsigned int ramp_value = RAMP_RATE_NO_CTRL;
75
76 switch (ramp_delay) {
77 case 1 ... 13750:
78 ramp_value = RAMP_RATE_13P75MV;
79 break;
80 case 13751 ... 27500:
81 ramp_value = RAMP_RATE_27P5MV;
82 break;
83 case 27501 ... 55000:
84 ramp_value = RAMP_RATE_55MV;
85 break;
86 case 55001 ... 100000:
87 break;
88 default:
89 pr_warn("%s: ramp_delay: %d not supported, setting 100000\n",
90 rdev->desc->name, ramp_delay);
91 }
92
93 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
94 MAX77686_RAMP_RATE_MASK, ramp_value << 6);
95}
96
97static struct regulator_ops max77686_ops = {
98 .list_voltage = regulator_list_voltage_linear,
99 .map_voltage = regulator_map_voltage_linear,
100 .is_enabled = regulator_is_enabled_regmap,
101 .enable = regulator_enable_regmap,
102 .disable = regulator_disable_regmap,
103 .get_voltage_sel = regulator_get_voltage_sel_regmap,
104 .set_voltage_sel = regulator_set_voltage_sel_regmap,
105 .set_voltage_time_sel = regulator_set_voltage_time_sel,
106};
107
108static struct regulator_ops max77686_buck_dvs_ops = {
109 .list_voltage = regulator_list_voltage_linear,
110 .map_voltage = regulator_map_voltage_linear,
111 .is_enabled = regulator_is_enabled_regmap,
112 .enable = regulator_enable_regmap,
113 .disable = regulator_disable_regmap,
114 .get_voltage_sel = regulator_get_voltage_sel_regmap,
115 .set_voltage_sel = regulator_set_voltage_sel_regmap,
116 .set_voltage_time_sel = regulator_set_voltage_time_sel,
117 .set_ramp_delay = max77686_set_ramp_delay,
118};
119
120#define regulator_desc_ldo(num) { \
121 .name = "LDO"#num, \
122 .id = MAX77686_LDO##num, \
123 .ops = &max77686_ops, \
124 .type = REGULATOR_VOLTAGE, \
125 .owner = THIS_MODULE, \
126 .min_uV = MAX77686_LDO_MINUV, \
127 .uV_step = MAX77686_LDO_UVSTEP, \
128 .ramp_delay = MAX77686_RAMP_DELAY, \
129 .n_voltages = MAX77686_VSEL_MASK + 1, \
130 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
131 .vsel_mask = MAX77686_VSEL_MASK, \
132 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
133 .enable_mask = MAX77686_OPMODE_MASK \
134 << MAX77686_OPMODE_SHIFT, \
135}
136#define regulator_desc_ldo_low(num) { \
137 .name = "LDO"#num, \
138 .id = MAX77686_LDO##num, \
139 .ops = &max77686_ops, \
140 .type = REGULATOR_VOLTAGE, \
141 .owner = THIS_MODULE, \
142 .min_uV = MAX77686_LDO_LOW_MINUV, \
143 .uV_step = MAX77686_LDO_LOW_UVSTEP, \
144 .ramp_delay = MAX77686_RAMP_DELAY, \
145 .n_voltages = MAX77686_VSEL_MASK + 1, \
146 .vsel_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
147 .vsel_mask = MAX77686_VSEL_MASK, \
148 .enable_reg = MAX77686_REG_LDO1CTRL1 + num - 1, \
149 .enable_mask = MAX77686_OPMODE_MASK \
150 << MAX77686_OPMODE_SHIFT, \
151}
152#define regulator_desc_buck(num) { \
153 .name = "BUCK"#num, \
154 .id = MAX77686_BUCK##num, \
155 .ops = &max77686_ops, \
156 .type = REGULATOR_VOLTAGE, \
157 .owner = THIS_MODULE, \
158 .min_uV = MAX77686_BUCK_MINUV, \
159 .uV_step = MAX77686_BUCK_UVSTEP, \
160 .ramp_delay = MAX77686_RAMP_DELAY, \
161 .n_voltages = MAX77686_VSEL_MASK + 1, \
162 .vsel_reg = MAX77686_REG_BUCK5OUT + (num - 5) * 2, \
163 .vsel_mask = MAX77686_VSEL_MASK, \
164 .enable_reg = MAX77686_REG_BUCK5CTRL + (num - 5) * 2, \
165 .enable_mask = MAX77686_OPMODE_MASK, \
166}
167#define regulator_desc_buck1(num) { \
168 .name = "BUCK"#num, \
169 .id = MAX77686_BUCK##num, \
170 .ops = &max77686_ops, \
171 .type = REGULATOR_VOLTAGE, \
172 .owner = THIS_MODULE, \
173 .min_uV = MAX77686_BUCK_MINUV, \
174 .uV_step = MAX77686_BUCK_UVSTEP, \
175 .ramp_delay = MAX77686_RAMP_DELAY, \
176 .n_voltages = MAX77686_VSEL_MASK + 1, \
177 .vsel_reg = MAX77686_REG_BUCK1OUT, \
178 .vsel_mask = MAX77686_VSEL_MASK, \
179 .enable_reg = MAX77686_REG_BUCK1CTRL, \
180 .enable_mask = MAX77686_OPMODE_MASK, \
181}
182#define regulator_desc_buck_dvs(num) { \
183 .name = "BUCK"#num, \
184 .id = MAX77686_BUCK##num, \
185 .ops = &max77686_buck_dvs_ops, \
186 .type = REGULATOR_VOLTAGE, \
187 .owner = THIS_MODULE, \
188 .min_uV = MAX77686_DVS_MINUV, \
189 .uV_step = MAX77686_DVS_UVSTEP, \
190 .ramp_delay = MAX77686_DVS_RAMP_DELAY, \
191 .n_voltages = MAX77686_DVS_VSEL_MASK + 1, \
192 .vsel_reg = MAX77686_REG_BUCK2DVS1 + (num - 2) * 10, \
193 .vsel_mask = MAX77686_DVS_VSEL_MASK, \
194 .enable_reg = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10, \
195 .enable_mask = MAX77686_OPMODE_MASK \
196 << MAX77686_OPMODE_BUCK234_SHIFT, \
197}
198
199static struct regulator_desc regulators[] = {
200 regulator_desc_ldo_low(1),
201 regulator_desc_ldo_low(2),
202 regulator_desc_ldo(3),
203 regulator_desc_ldo(4),
204 regulator_desc_ldo(5),
205 regulator_desc_ldo_low(6),
206 regulator_desc_ldo_low(7),
207 regulator_desc_ldo_low(8),
208 regulator_desc_ldo(9),
209 regulator_desc_ldo(10),
210 regulator_desc_ldo(11),
211 regulator_desc_ldo(12),
212 regulator_desc_ldo(13),
213 regulator_desc_ldo(14),
214 regulator_desc_ldo_low(15),
215 regulator_desc_ldo(16),
216 regulator_desc_ldo(17),
217 regulator_desc_ldo(18),
218 regulator_desc_ldo(19),
219 regulator_desc_ldo(20),
220 regulator_desc_ldo(21),
221 regulator_desc_ldo(22),
222 regulator_desc_ldo(23),
223 regulator_desc_ldo(24),
224 regulator_desc_ldo(25),
225 regulator_desc_ldo(26),
226 regulator_desc_buck1(1),
227 regulator_desc_buck_dvs(2),
228 regulator_desc_buck_dvs(3),
229 regulator_desc_buck_dvs(4),
230 regulator_desc_buck(5),
231 regulator_desc_buck(6),
232 regulator_desc_buck(7),
233 regulator_desc_buck(8),
234 regulator_desc_buck(9),
235};
236
237#ifdef CONFIG_OF
238static int max77686_pmic_dt_parse_pdata(struct max77686_dev *iodev,
239 struct max77686_platform_data *pdata)
240{
241 struct device_node *pmic_np, *regulators_np;
242 struct max77686_regulator_data *rdata;
243 struct of_regulator_match rmatch;
244 unsigned int i;
245
246 pmic_np = iodev->dev->of_node;
247 regulators_np = of_find_node_by_name(pmic_np, "voltage-regulators");
248 if (!regulators_np) {
249 dev_err(iodev->dev, "could not find regulators sub-node\n");
250 return -EINVAL;
251 }
252
253 pdata->num_regulators = ARRAY_SIZE(regulators);
254 rdata = devm_kzalloc(iodev->dev, sizeof(*rdata) *
255 pdata->num_regulators, GFP_KERNEL);
256 if (!rdata) {
257 dev_err(iodev->dev,
258 "could not allocate memory for regulator data\n");
259 return -ENOMEM;
260 }
261
262 for (i = 0; i < pdata->num_regulators; i++) {
263 rmatch.name = regulators[i].name;
264 rmatch.init_data = NULL;
265 rmatch.of_node = NULL;
266 of_regulator_match(iodev->dev, regulators_np, &rmatch, 1);
267 rdata[i].initdata = rmatch.init_data;
268 }
269
270 pdata->regulators = rdata;
271
272 return 0;
273}
274#else
275static int max77686_pmic_dt_parse_pdata(struct max77686_dev *iodev,
276 struct max77686_platform_data *pdata)
277{
278 return 0;
279}
280#endif /* CONFIG_OF */
281
282static __devinit int max77686_pmic_probe(struct platform_device *pdev)
283{
284 struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent);
285 struct max77686_platform_data *pdata = dev_get_platdata(iodev->dev);
286 struct regulator_dev **rdev;
287 struct max77686_data *max77686;
288 int i, size;
289 int ret = 0;
290 struct regulator_config config = { };
291
292 dev_dbg(&pdev->dev, "%s\n", __func__);
293
294 if (!pdata) {
295 dev_err(&pdev->dev, "no platform data found for regulator\n");
296 return -ENODEV;
297 }
298
299 if (iodev->dev->of_node) {
300 ret = max77686_pmic_dt_parse_pdata(iodev, pdata);
301 if (ret)
302 return ret;
303 }
304
305 if (pdata->num_regulators != MAX77686_REGULATORS) {
306 dev_err(&pdev->dev,
307 "Invalid initial data for regulator's initialiation\n");
308 return -EINVAL;
309 }
310
311 max77686 = devm_kzalloc(&pdev->dev, sizeof(struct max77686_data),
312 GFP_KERNEL);
313 if (!max77686)
314 return -ENOMEM;
315
316 size = sizeof(struct regulator_dev *) * MAX77686_REGULATORS;
317 max77686->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
318 if (!max77686->rdev)
319 return -ENOMEM;
320
321 rdev = max77686->rdev;
322 config.dev = &pdev->dev;
323 config.regmap = iodev->regmap;
324 platform_set_drvdata(pdev, max77686);
325
326 for (i = 0; i < MAX77686_REGULATORS; i++) {
327 config.init_data = pdata->regulators[i].initdata;
328
329 rdev[i] = regulator_register(&regulators[i], &config);
330 if (IS_ERR(rdev[i])) {
331 ret = PTR_ERR(rdev[i]);
332 dev_err(&pdev->dev,
333 "regulator init failed for %d\n", i);
334 rdev[i] = NULL;
335 goto err;
336 }
337 }
338
339 return 0;
340err:
341 while (--i >= 0)
342 regulator_unregister(rdev[i]);
343 return ret;
344}
345
346static int __devexit max77686_pmic_remove(struct platform_device *pdev)
347{
348 struct max77686_data *max77686 = platform_get_drvdata(pdev);
349 struct regulator_dev **rdev = max77686->rdev;
350 int i;
351
352 for (i = 0; i < MAX77686_REGULATORS; i++)
353 if (rdev[i])
354 regulator_unregister(rdev[i]);
355
356 return 0;
357}
358
359static const struct platform_device_id max77686_pmic_id[] = {
360 {"max77686-pmic", 0},
361 { },
362};
363MODULE_DEVICE_TABLE(platform, max77686_pmic_id);
364
365static struct platform_driver max77686_pmic_driver = {
366 .driver = {
367 .name = "max77686-pmic",
368 .owner = THIS_MODULE,
369 },
370 .probe = max77686_pmic_probe,
371 .remove = __devexit_p(max77686_pmic_remove),
372 .id_table = max77686_pmic_id,
373};
374
375static int __init max77686_pmic_init(void)
376{
377 return platform_driver_register(&max77686_pmic_driver);
378}
379subsys_initcall(max77686_pmic_init);
380
381static void __exit max77686_pmic_cleanup(void)
382{
383 platform_driver_unregister(&max77686_pmic_driver);
384}
385module_exit(max77686_pmic_cleanup);
386
387MODULE_DESCRIPTION("MAXIM 77686 Regulator Driver");
388MODULE_AUTHOR("Chiwoong Byun <woong.byun@samsung.com>");
389MODULE_LICENSE("GPL");
diff --git a/drivers/regulator/max8952.c b/drivers/regulator/max8952.c
index 910c9b26d499..355ca7bad9d5 100644
--- a/drivers/regulator/max8952.c
+++ b/drivers/regulator/max8952.c
@@ -51,7 +51,6 @@ struct max8952_data {
51 51
52 bool vid0; 52 bool vid0;
53 bool vid1; 53 bool vid1;
54 bool en;
55}; 54};
56 55
57static int max8952_read_reg(struct max8952_data *max8952, u8 reg) 56static int max8952_read_reg(struct max8952_data *max8952, u8 reg)
@@ -80,38 +79,6 @@ static int max8952_list_voltage(struct regulator_dev *rdev,
80 return (max8952->pdata->dvs_mode[selector] * 10 + 770) * 1000; 79 return (max8952->pdata->dvs_mode[selector] * 10 + 770) * 1000;
81} 80}
82 81
83static int max8952_is_enabled(struct regulator_dev *rdev)
84{
85 struct max8952_data *max8952 = rdev_get_drvdata(rdev);
86 return max8952->en;
87}
88
89static int max8952_enable(struct regulator_dev *rdev)
90{
91 struct max8952_data *max8952 = rdev_get_drvdata(rdev);
92
93 /* If not valid, assume "ALWAYS_HIGH" */
94 if (gpio_is_valid(max8952->pdata->gpio_en))
95 gpio_set_value(max8952->pdata->gpio_en, 1);
96
97 max8952->en = true;
98 return 0;
99}
100
101static int max8952_disable(struct regulator_dev *rdev)
102{
103 struct max8952_data *max8952 = rdev_get_drvdata(rdev);
104
105 /* If not valid, assume "ALWAYS_HIGH" -> not permitted */
106 if (gpio_is_valid(max8952->pdata->gpio_en))
107 gpio_set_value(max8952->pdata->gpio_en, 0);
108 else
109 return -EPERM;
110
111 max8952->en = false;
112 return 0;
113}
114
115static int max8952_get_voltage_sel(struct regulator_dev *rdev) 82static int max8952_get_voltage_sel(struct regulator_dev *rdev)
116{ 83{
117 struct max8952_data *max8952 = rdev_get_drvdata(rdev); 84 struct max8952_data *max8952 = rdev_get_drvdata(rdev);
@@ -146,12 +113,8 @@ static int max8952_set_voltage_sel(struct regulator_dev *rdev,
146 113
147static struct regulator_ops max8952_ops = { 114static struct regulator_ops max8952_ops = {
148 .list_voltage = max8952_list_voltage, 115 .list_voltage = max8952_list_voltage,
149 .is_enabled = max8952_is_enabled,
150 .enable = max8952_enable,
151 .disable = max8952_disable,
152 .get_voltage_sel = max8952_get_voltage_sel, 116 .get_voltage_sel = max8952_get_voltage_sel,
153 .set_voltage_sel = max8952_set_voltage_sel, 117 .set_voltage_sel = max8952_set_voltage_sel,
154 .set_suspend_disable = max8952_disable,
155}; 118};
156 119
157static const struct regulator_desc regulator = { 120static const struct regulator_desc regulator = {
@@ -194,6 +157,10 @@ static int __devinit max8952_pmic_probe(struct i2c_client *client,
194 config.init_data = &pdata->reg_data; 157 config.init_data = &pdata->reg_data;
195 config.driver_data = max8952; 158 config.driver_data = max8952;
196 159
160 config.ena_gpio = pdata->gpio_en;
161 if (pdata->reg_data.constraints.boot_on)
162 config.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
163
197 max8952->rdev = regulator_register(&regulator, &config); 164 max8952->rdev = regulator_register(&regulator, &config);
198 165
199 if (IS_ERR(max8952->rdev)) { 166 if (IS_ERR(max8952->rdev)) {
@@ -202,27 +169,9 @@ static int __devinit max8952_pmic_probe(struct i2c_client *client,
202 return ret; 169 return ret;
203 } 170 }
204 171
205 max8952->en = !!(pdata->reg_data.constraints.boot_on);
206 max8952->vid0 = pdata->default_mode & 0x1; 172 max8952->vid0 = pdata->default_mode & 0x1;
207 max8952->vid1 = (pdata->default_mode >> 1) & 0x1; 173 max8952->vid1 = (pdata->default_mode >> 1) & 0x1;
208 174
209 if (gpio_is_valid(pdata->gpio_en)) {
210 if (!gpio_request(pdata->gpio_en, "MAX8952 EN"))
211 gpio_direction_output(pdata->gpio_en, max8952->en);
212 else
213 err = 1;
214 } else
215 err = 2;
216
217 if (err) {
218 dev_info(max8952->dev, "EN gpio invalid: assume that EN"
219 "is always High\n");
220 max8952->en = 1;
221 pdata->gpio_en = -1; /* Mark invalid */
222 }
223
224 err = 0;
225
226 if (gpio_is_valid(pdata->gpio_vid0) && 175 if (gpio_is_valid(pdata->gpio_vid0) &&
227 gpio_is_valid(pdata->gpio_vid1)) { 176 gpio_is_valid(pdata->gpio_vid1)) {
228 if (!gpio_request(pdata->gpio_vid0, "MAX8952 VID0")) 177 if (!gpio_request(pdata->gpio_vid0, "MAX8952 VID0"))
@@ -308,7 +257,6 @@ static int __devexit max8952_pmic_remove(struct i2c_client *client)
308 257
309 gpio_free(pdata->gpio_vid0); 258 gpio_free(pdata->gpio_vid0);
310 gpio_free(pdata->gpio_vid1); 259 gpio_free(pdata->gpio_vid1);
311 gpio_free(pdata->gpio_en);
312 return 0; 260 return 0;
313} 261}
314 262
diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
index 704cd49ef375..e39a0c7260dc 100644
--- a/drivers/regulator/max8997.c
+++ b/drivers/regulator/max8997.c
@@ -1025,7 +1025,6 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1025 */ 1025 */
1026 if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs || 1026 if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
1027 pdata->buck5_gpiodvs) { 1027 pdata->buck5_gpiodvs) {
1028 bool gpio1set = false, gpio2set = false;
1029 1028
1030 if (!gpio_is_valid(pdata->buck125_gpios[0]) || 1029 if (!gpio_is_valid(pdata->buck125_gpios[0]) ||
1031 !gpio_is_valid(pdata->buck125_gpios[1]) || 1030 !gpio_is_valid(pdata->buck125_gpios[1]) ||
@@ -1035,40 +1034,20 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1035 goto err_out; 1034 goto err_out;
1036 } 1035 }
1037 1036
1038 ret = gpio_request(pdata->buck125_gpios[0], 1037 ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[0],
1039 "MAX8997 SET1"); 1038 "MAX8997 SET1");
1040 if (ret == -EBUSY) 1039 if (ret)
1041 dev_warn(&pdev->dev, "Duplicated gpio request"
1042 " on SET1\n");
1043 else if (ret)
1044 goto err_out; 1040 goto err_out;
1045 else 1041
1046 gpio1set = true; 1042 ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[1],
1047 1043 "MAX8997 SET2");
1048 ret = gpio_request(pdata->buck125_gpios[1], 1044 if (ret)
1049 "MAX8997 SET2");
1050 if (ret == -EBUSY)
1051 dev_warn(&pdev->dev, "Duplicated gpio request"
1052 " on SET2\n");
1053 else if (ret) {
1054 if (gpio1set)
1055 gpio_free(pdata->buck125_gpios[0]);
1056 goto err_out; 1045 goto err_out;
1057 } else
1058 gpio2set = true;
1059 1046
1060 ret = gpio_request(pdata->buck125_gpios[2], 1047 ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[2],
1061 "MAX8997 SET3"); 1048 "MAX8997 SET3");
1062 if (ret == -EBUSY) 1049 if (ret)
1063 dev_warn(&pdev->dev, "Duplicated gpio request"
1064 " on SET3\n");
1065 else if (ret) {
1066 if (gpio1set)
1067 gpio_free(pdata->buck125_gpios[0]);
1068 if (gpio2set)
1069 gpio_free(pdata->buck125_gpios[1]);
1070 goto err_out; 1050 goto err_out;
1071 }
1072 1051
1073 gpio_direction_output(pdata->buck125_gpios[0], 1052 gpio_direction_output(pdata->buck125_gpios[0],
1074 (max8997->buck125_gpioindex >> 2) 1053 (max8997->buck125_gpioindex >> 2)
@@ -1079,7 +1058,6 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1079 gpio_direction_output(pdata->buck125_gpios[2], 1058 gpio_direction_output(pdata->buck125_gpios[2],
1080 (max8997->buck125_gpioindex >> 0) 1059 (max8997->buck125_gpioindex >> 0)
1081 & 0x1); /* SET3 */ 1060 & 0x1); /* SET3 */
1082 ret = 0;
1083 } 1061 }
1084 1062
1085 /* DVS-GPIO disabled */ 1063 /* DVS-GPIO disabled */
diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c
index 18bb58b9b96e..5dfa920ff0c8 100644
--- a/drivers/regulator/max8998.c
+++ b/drivers/regulator/max8998.c
@@ -111,27 +111,6 @@ static const struct voltage_map_desc *ldo_voltage_map[] = {
111 &buck4_voltage_map_desc, /* BUCK4 */ 111 &buck4_voltage_map_desc, /* BUCK4 */
112}; 112};
113 113
114static int max8998_list_voltage(struct regulator_dev *rdev,
115 unsigned int selector)
116{
117 const struct voltage_map_desc *desc;
118 int ldo = rdev_get_id(rdev);
119 int val;
120
121 if (ldo >= ARRAY_SIZE(ldo_voltage_map))
122 return -EINVAL;
123
124 desc = ldo_voltage_map[ldo];
125 if (desc == NULL)
126 return -EINVAL;
127
128 val = desc->min + desc->step * selector;
129 if (val > desc->max)
130 return -EINVAL;
131
132 return val * 1000;
133}
134
135static int max8998_get_enable_register(struct regulator_dev *rdev, 114static int max8998_get_enable_register(struct regulator_dev *rdev,
136 int *reg, int *shift) 115 int *reg, int *shift)
137{ 116{
@@ -297,41 +276,18 @@ static int max8998_get_voltage_sel(struct regulator_dev *rdev)
297 return val; 276 return val;
298} 277}
299 278
300static int max8998_set_voltage_ldo(struct regulator_dev *rdev, 279static int max8998_set_voltage_ldo_sel(struct regulator_dev *rdev,
301 int min_uV, int max_uV, unsigned *selector) 280 unsigned selector)
302{ 281{
303 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 282 struct max8998_data *max8998 = rdev_get_drvdata(rdev);
304 struct i2c_client *i2c = max8998->iodev->i2c; 283 struct i2c_client *i2c = max8998->iodev->i2c;
305 int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 284 int reg, shift = 0, mask, ret;
306 const struct voltage_map_desc *desc;
307 int ldo = rdev_get_id(rdev);
308 int reg, shift = 0, mask, ret, i;
309
310 if (ldo >= ARRAY_SIZE(ldo_voltage_map))
311 return -EINVAL;
312
313 desc = ldo_voltage_map[ldo];
314 if (desc == NULL)
315 return -EINVAL;
316
317 if (max_vol < desc->min || min_vol > desc->max)
318 return -EINVAL;
319
320 if (min_vol < desc->min)
321 min_vol = desc->min;
322
323 i = DIV_ROUND_UP(min_vol - desc->min, desc->step);
324
325 if (desc->min + desc->step*i > max_vol)
326 return -EINVAL;
327
328 *selector = i;
329 285
330 ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask); 286 ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask);
331 if (ret) 287 if (ret)
332 return ret; 288 return ret;
333 289
334 ret = max8998_update_reg(i2c, reg, i<<shift, mask<<shift); 290 ret = max8998_update_reg(i2c, reg, selector<<shift, mask<<shift);
335 291
336 return ret; 292 return ret;
337} 293}
@@ -347,41 +303,18 @@ static inline void buck2_gpio_set(int gpio, int v)
347 gpio_set_value(gpio, v & 0x1); 303 gpio_set_value(gpio, v & 0x1);
348} 304}
349 305
350static int max8998_set_voltage_buck(struct regulator_dev *rdev, 306static int max8998_set_voltage_buck_sel(struct regulator_dev *rdev,
351 int min_uV, int max_uV, unsigned *selector) 307 unsigned selector)
352{ 308{
353 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 309 struct max8998_data *max8998 = rdev_get_drvdata(rdev);
354 struct max8998_platform_data *pdata = 310 struct max8998_platform_data *pdata =
355 dev_get_platdata(max8998->iodev->dev); 311 dev_get_platdata(max8998->iodev->dev);
356 struct i2c_client *i2c = max8998->iodev->i2c; 312 struct i2c_client *i2c = max8998->iodev->i2c;
357 int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
358 const struct voltage_map_desc *desc;
359 int buck = rdev_get_id(rdev); 313 int buck = rdev_get_id(rdev);
360 int reg, shift = 0, mask, ret; 314 int reg, shift = 0, mask, ret;
361 int i, j, previous_sel; 315 int j, previous_sel;
362 static u8 buck1_last_val; 316 static u8 buck1_last_val;
363 317
364 if (buck >= ARRAY_SIZE(ldo_voltage_map))
365 return -EINVAL;
366
367 desc = ldo_voltage_map[buck];
368
369 if (desc == NULL)
370 return -EINVAL;
371
372 if (max_vol < desc->min || min_vol > desc->max)
373 return -EINVAL;
374
375 if (min_vol < desc->min)
376 min_vol = desc->min;
377
378 i = DIV_ROUND_UP(min_vol - desc->min, desc->step);
379
380 if (desc->min + desc->step*i > max_vol)
381 return -EINVAL;
382
383 *selector = i;
384
385 ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask); 318 ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask);
386 if (ret) 319 if (ret)
387 return ret; 320 return ret;
@@ -390,19 +323,19 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev,
390 323
391 /* Check if voltage needs to be changed */ 324 /* Check if voltage needs to be changed */
392 /* if previous_voltage equal new voltage, return */ 325 /* if previous_voltage equal new voltage, return */
393 if (previous_sel == i) { 326 if (previous_sel == selector) {
394 dev_dbg(max8998->dev, "No voltage change, old:%d, new:%d\n", 327 dev_dbg(max8998->dev, "No voltage change, old:%d, new:%d\n",
395 max8998_list_voltage(rdev, previous_sel), 328 regulator_list_voltage_linear(rdev, previous_sel),
396 max8998_list_voltage(rdev, i)); 329 regulator_list_voltage_linear(rdev, selector));
397 return ret; 330 return ret;
398 } 331 }
399 332
400 switch (buck) { 333 switch (buck) {
401 case MAX8998_BUCK1: 334 case MAX8998_BUCK1:
402 dev_dbg(max8998->dev, 335 dev_dbg(max8998->dev,
403 "BUCK1, i:%d, buck1_vol1:%d, buck1_vol2:%d\n" 336 "BUCK1, selector:%d, buck1_vol1:%d, buck1_vol2:%d\n"
404 "buck1_vol3:%d, buck1_vol4:%d\n", 337 "buck1_vol3:%d, buck1_vol4:%d\n",
405 i, max8998->buck1_vol[0], max8998->buck1_vol[1], 338 selector, max8998->buck1_vol[0], max8998->buck1_vol[1],
406 max8998->buck1_vol[2], max8998->buck1_vol[3]); 339 max8998->buck1_vol[2], max8998->buck1_vol[3]);
407 340
408 if (gpio_is_valid(pdata->buck1_set1) && 341 if (gpio_is_valid(pdata->buck1_set1) &&
@@ -411,7 +344,7 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev,
411 /* check if requested voltage */ 344 /* check if requested voltage */
412 /* value is already defined */ 345 /* value is already defined */
413 for (j = 0; j < ARRAY_SIZE(max8998->buck1_vol); j++) { 346 for (j = 0; j < ARRAY_SIZE(max8998->buck1_vol); j++) {
414 if (max8998->buck1_vol[j] == i) { 347 if (max8998->buck1_vol[j] == selector) {
415 max8998->buck1_idx = j; 348 max8998->buck1_idx = j;
416 buck1_gpio_set(pdata->buck1_set1, 349 buck1_gpio_set(pdata->buck1_set1,
417 pdata->buck1_set2, j); 350 pdata->buck1_set2, j);
@@ -426,11 +359,11 @@ static int max8998_set_voltage_buck(struct regulator_dev *rdev,
426 max8998->buck1_idx = (buck1_last_val % 2) + 2; 359 max8998->buck1_idx = (buck1_last_val % 2) + 2;
427 dev_dbg(max8998->dev, "max8998->buck1_idx:%d\n", 360 dev_dbg(max8998->dev, "max8998->buck1_idx:%d\n",
428 max8998->buck1_idx); 361 max8998->buck1_idx);
429 max8998->buck1_vol[max8998->buck1_idx] = i; 362 max8998->buck1_vol[max8998->buck1_idx] = selector;
430 ret = max8998_get_voltage_register(rdev, &reg, 363 ret = max8998_get_voltage_register(rdev, &reg,
431 &shift, 364 &shift,
432 &mask); 365 &mask);
433 ret = max8998_write_reg(i2c, reg, i); 366 ret = max8998_write_reg(i2c, reg, selector);
434 buck1_gpio_set(pdata->buck1_set1, 367 buck1_gpio_set(pdata->buck1_set1,
435 pdata->buck1_set2, max8998->buck1_idx); 368 pdata->buck1_set2, max8998->buck1_idx);
436 buck1_last_val++; 369 buck1_last_val++;
@@ -440,20 +373,20 @@ buck1_exit:
440 gpio_get_value(pdata->buck1_set2)); 373 gpio_get_value(pdata->buck1_set2));
441 break; 374 break;
442 } else { 375 } else {
443 ret = max8998_write_reg(i2c, reg, i); 376 ret = max8998_write_reg(i2c, reg, selector);
444 } 377 }
445 break; 378 break;
446 379
447 case MAX8998_BUCK2: 380 case MAX8998_BUCK2:
448 dev_dbg(max8998->dev, 381 dev_dbg(max8998->dev,
449 "BUCK2, i:%d buck2_vol1:%d, buck2_vol2:%d\n" 382 "BUCK2, selector:%d buck2_vol1:%d, buck2_vol2:%d\n",
450 , i, max8998->buck2_vol[0], max8998->buck2_vol[1]); 383 selector, max8998->buck2_vol[0], max8998->buck2_vol[1]);
451 if (gpio_is_valid(pdata->buck2_set3)) { 384 if (gpio_is_valid(pdata->buck2_set3)) {
452 385
453 /* check if requested voltage */ 386 /* check if requested voltage */
454 /* value is already defined */ 387 /* value is already defined */
455 for (j = 0; j < ARRAY_SIZE(max8998->buck2_vol); j++) { 388 for (j = 0; j < ARRAY_SIZE(max8998->buck2_vol); j++) {
456 if (max8998->buck2_vol[j] == i) { 389 if (max8998->buck2_vol[j] == selector) {
457 max8998->buck2_idx = j; 390 max8998->buck2_idx = j;
458 buck2_gpio_set(pdata->buck2_set3, j); 391 buck2_gpio_set(pdata->buck2_set3, j);
459 goto buck2_exit; 392 goto buck2_exit;
@@ -465,20 +398,21 @@ buck1_exit:
465 398
466 max8998_get_voltage_register(rdev, 399 max8998_get_voltage_register(rdev,
467 &reg, &shift, &mask); 400 &reg, &shift, &mask);
468 ret = max8998_write_reg(i2c, reg, i); 401 ret = max8998_write_reg(i2c, reg, selector);
469 max8998->buck2_vol[max8998->buck2_idx] = i; 402 max8998->buck2_vol[max8998->buck2_idx] = selector;
470 buck2_gpio_set(pdata->buck2_set3, max8998->buck2_idx); 403 buck2_gpio_set(pdata->buck2_set3, max8998->buck2_idx);
471buck2_exit: 404buck2_exit:
472 dev_dbg(max8998->dev, "%s: SET3:%d\n", i2c->name, 405 dev_dbg(max8998->dev, "%s: SET3:%d\n", i2c->name,
473 gpio_get_value(pdata->buck2_set3)); 406 gpio_get_value(pdata->buck2_set3));
474 } else { 407 } else {
475 ret = max8998_write_reg(i2c, reg, i); 408 ret = max8998_write_reg(i2c, reg, selector);
476 } 409 }
477 break; 410 break;
478 411
479 case MAX8998_BUCK3: 412 case MAX8998_BUCK3:
480 case MAX8998_BUCK4: 413 case MAX8998_BUCK4:
481 ret = max8998_update_reg(i2c, reg, i<<shift, mask<<shift); 414 ret = max8998_update_reg(i2c, reg, selector<<shift,
415 mask<<shift);
482 break; 416 break;
483 } 417 }
484 418
@@ -519,34 +453,30 @@ static int max8998_set_voltage_buck_time_sel(struct regulator_dev *rdev,
519} 453}
520 454
521static struct regulator_ops max8998_ldo_ops = { 455static struct regulator_ops max8998_ldo_ops = {
522 .list_voltage = max8998_list_voltage, 456 .list_voltage = regulator_list_voltage_linear,
457 .map_voltage = regulator_map_voltage_linear,
523 .is_enabled = max8998_ldo_is_enabled, 458 .is_enabled = max8998_ldo_is_enabled,
524 .enable = max8998_ldo_enable, 459 .enable = max8998_ldo_enable,
525 .disable = max8998_ldo_disable, 460 .disable = max8998_ldo_disable,
526 .get_voltage_sel = max8998_get_voltage_sel, 461 .get_voltage_sel = max8998_get_voltage_sel,
527 .set_voltage = max8998_set_voltage_ldo, 462 .set_voltage_sel = max8998_set_voltage_ldo_sel,
528 .set_suspend_enable = max8998_ldo_enable,
529 .set_suspend_disable = max8998_ldo_disable,
530}; 463};
531 464
532static struct regulator_ops max8998_buck_ops = { 465static struct regulator_ops max8998_buck_ops = {
533 .list_voltage = max8998_list_voltage, 466 .list_voltage = regulator_list_voltage_linear,
467 .map_voltage = regulator_map_voltage_linear,
534 .is_enabled = max8998_ldo_is_enabled, 468 .is_enabled = max8998_ldo_is_enabled,
535 .enable = max8998_ldo_enable, 469 .enable = max8998_ldo_enable,
536 .disable = max8998_ldo_disable, 470 .disable = max8998_ldo_disable,
537 .get_voltage_sel = max8998_get_voltage_sel, 471 .get_voltage_sel = max8998_get_voltage_sel,
538 .set_voltage = max8998_set_voltage_buck, 472 .set_voltage_sel = max8998_set_voltage_buck_sel,
539 .set_voltage_time_sel = max8998_set_voltage_buck_time_sel, 473 .set_voltage_time_sel = max8998_set_voltage_buck_time_sel,
540 .set_suspend_enable = max8998_ldo_enable,
541 .set_suspend_disable = max8998_ldo_disable,
542}; 474};
543 475
544static struct regulator_ops max8998_others_ops = { 476static struct regulator_ops max8998_others_ops = {
545 .is_enabled = max8998_ldo_is_enabled, 477 .is_enabled = max8998_ldo_is_enabled,
546 .enable = max8998_ldo_enable, 478 .enable = max8998_ldo_enable,
547 .disable = max8998_ldo_disable, 479 .disable = max8998_ldo_disable,
548 .set_suspend_enable = max8998_ldo_enable,
549 .set_suspend_disable = max8998_ldo_disable,
550}; 480};
551 481
552static struct regulator_desc regulators[] = { 482static struct regulator_desc regulators[] = {
@@ -860,7 +790,10 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
860 desc = ldo_voltage_map[id]; 790 desc = ldo_voltage_map[id];
861 if (desc && regulators[index].ops != &max8998_others_ops) { 791 if (desc && regulators[index].ops != &max8998_others_ops) {
862 int count = (desc->max - desc->min) / desc->step + 1; 792 int count = (desc->max - desc->min) / desc->step + 1;
793
863 regulators[index].n_voltages = count; 794 regulators[index].n_voltages = count;
795 regulators[index].min_uV = desc->min * 1000;
796 regulators[index].uV_step = desc->step * 1000;
864 } 797 }
865 798
866 config.dev = max8998->dev; 799 config.dev = max8998->dev;
diff --git a/drivers/regulator/mc13783-regulator.c b/drivers/regulator/mc13783-regulator.c
index 7dcdfa283e93..4932e3449fe1 100644
--- a/drivers/regulator/mc13783-regulator.c
+++ b/drivers/regulator/mc13783-regulator.c
@@ -93,78 +93,78 @@
93 93
94 94
95/* Voltage Values */ 95/* Voltage Values */
96static const int mc13783_sw3_val[] = { 96static const unsigned int mc13783_sw3_val[] = {
97 5000000, 5000000, 5000000, 5500000, 97 5000000, 5000000, 5000000, 5500000,
98}; 98};
99 99
100static const int mc13783_vaudio_val[] = { 100static const unsigned int mc13783_vaudio_val[] = {
101 2775000, 101 2775000,
102}; 102};
103 103
104static const int mc13783_viohi_val[] = { 104static const unsigned int mc13783_viohi_val[] = {
105 2775000, 105 2775000,
106}; 106};
107 107
108static const int mc13783_violo_val[] = { 108static const unsigned int mc13783_violo_val[] = {
109 1200000, 1300000, 1500000, 1800000, 109 1200000, 1300000, 1500000, 1800000,
110}; 110};
111 111
112static const int mc13783_vdig_val[] = { 112static const unsigned int mc13783_vdig_val[] = {
113 1200000, 1300000, 1500000, 1800000, 113 1200000, 1300000, 1500000, 1800000,
114}; 114};
115 115
116static const int mc13783_vgen_val[] = { 116static const unsigned int mc13783_vgen_val[] = {
117 1200000, 1300000, 1500000, 1800000, 117 1200000, 1300000, 1500000, 1800000,
118 1100000, 2000000, 2775000, 2400000, 118 1100000, 2000000, 2775000, 2400000,
119}; 119};
120 120
121static const int mc13783_vrfdig_val[] = { 121static const unsigned int mc13783_vrfdig_val[] = {
122 1200000, 1500000, 1800000, 1875000, 122 1200000, 1500000, 1800000, 1875000,
123}; 123};
124 124
125static const int mc13783_vrfref_val[] = { 125static const unsigned int mc13783_vrfref_val[] = {
126 2475000, 2600000, 2700000, 2775000, 126 2475000, 2600000, 2700000, 2775000,
127}; 127};
128 128
129static const int mc13783_vrfcp_val[] = { 129static const unsigned int mc13783_vrfcp_val[] = {
130 2700000, 2775000, 130 2700000, 2775000,
131}; 131};
132 132
133static const int mc13783_vsim_val[] = { 133static const unsigned int mc13783_vsim_val[] = {
134 1800000, 2900000, 3000000, 134 1800000, 2900000, 3000000,
135}; 135};
136 136
137static const int mc13783_vesim_val[] = { 137static const unsigned int mc13783_vesim_val[] = {
138 1800000, 2900000, 138 1800000, 2900000,
139}; 139};
140 140
141static const int mc13783_vcam_val[] = { 141static const unsigned int mc13783_vcam_val[] = {
142 1500000, 1800000, 2500000, 2550000, 142 1500000, 1800000, 2500000, 2550000,
143 2600000, 2750000, 2800000, 3000000, 143 2600000, 2750000, 2800000, 3000000,
144}; 144};
145 145
146static const int mc13783_vrfbg_val[] = { 146static const unsigned int mc13783_vrfbg_val[] = {
147 1250000, 147 1250000,
148}; 148};
149 149
150static const int mc13783_vvib_val[] = { 150static const unsigned int mc13783_vvib_val[] = {
151 1300000, 1800000, 2000000, 3000000, 151 1300000, 1800000, 2000000, 3000000,
152}; 152};
153 153
154static const int mc13783_vmmc_val[] = { 154static const unsigned int mc13783_vmmc_val[] = {
155 1600000, 1800000, 2000000, 2600000, 155 1600000, 1800000, 2000000, 2600000,
156 2700000, 2800000, 2900000, 3000000, 156 2700000, 2800000, 2900000, 3000000,
157}; 157};
158 158
159static const int mc13783_vrf_val[] = { 159static const unsigned int mc13783_vrf_val[] = {
160 1500000, 1875000, 2700000, 2775000, 160 1500000, 1875000, 2700000, 2775000,
161}; 161};
162 162
163static const int mc13783_gpo_val[] = { 163static const unsigned int mc13783_gpo_val[] = {
164 3100000, 164 3100000,
165}; 165};
166 166
167static const int mc13783_pwgtdrv_val[] = { 167static const unsigned int mc13783_pwgtdrv_val[] = {
168 5500000, 168 5500000,
169}; 169};
170 170
@@ -328,7 +328,7 @@ static struct regulator_ops mc13783_gpo_regulator_ops = {
328 .enable = mc13783_gpo_regulator_enable, 328 .enable = mc13783_gpo_regulator_enable,
329 .disable = mc13783_gpo_regulator_disable, 329 .disable = mc13783_gpo_regulator_disable,
330 .is_enabled = mc13783_gpo_regulator_is_enabled, 330 .is_enabled = mc13783_gpo_regulator_is_enabled,
331 .list_voltage = mc13xxx_regulator_list_voltage, 331 .list_voltage = regulator_list_voltage_table,
332 .set_voltage = mc13xxx_fixed_regulator_set_voltage, 332 .set_voltage = mc13xxx_fixed_regulator_set_voltage,
333 .get_voltage = mc13xxx_fixed_regulator_get_voltage, 333 .get_voltage = mc13xxx_fixed_regulator_get_voltage,
334}; 334};
diff --git a/drivers/regulator/mc13892-regulator.c b/drivers/regulator/mc13892-regulator.c
index 970a233dbe46..b388b746452e 100644
--- a/drivers/regulator/mc13892-regulator.c
+++ b/drivers/regulator/mc13892-regulator.c
@@ -150,12 +150,12 @@
150#define MC13892_USB1 50 150#define MC13892_USB1 50
151#define MC13892_USB1_VUSBEN (1<<3) 151#define MC13892_USB1_VUSBEN (1<<3)
152 152
153static const int mc13892_vcoincell[] = { 153static const unsigned int mc13892_vcoincell[] = {
154 2500000, 2700000, 2800000, 2900000, 3000000, 3100000, 154 2500000, 2700000, 2800000, 2900000, 3000000, 3100000,
155 3200000, 3300000, 155 3200000, 3300000,
156}; 156};
157 157
158static const int mc13892_sw1[] = { 158static const unsigned int mc13892_sw1[] = {
159 600000, 625000, 650000, 675000, 700000, 725000, 159 600000, 625000, 650000, 675000, 700000, 725000,
160 750000, 775000, 800000, 825000, 850000, 875000, 160 750000, 775000, 800000, 825000, 850000, 875000,
161 900000, 925000, 950000, 975000, 1000000, 1025000, 161 900000, 925000, 950000, 975000, 1000000, 1025000,
@@ -164,7 +164,7 @@ static const int mc13892_sw1[] = {
164 1350000, 1375000 164 1350000, 1375000
165}; 165};
166 166
167static const int mc13892_sw[] = { 167static const unsigned int mc13892_sw[] = {
168 600000, 625000, 650000, 675000, 700000, 725000, 168 600000, 625000, 650000, 675000, 700000, 725000,
169 750000, 775000, 800000, 825000, 850000, 875000, 169 750000, 775000, 800000, 825000, 850000, 875000,
170 900000, 925000, 950000, 975000, 1000000, 1025000, 170 900000, 925000, 950000, 975000, 1000000, 1025000,
@@ -176,65 +176,65 @@ static const int mc13892_sw[] = {
176 1800000, 1825000, 1850000, 1875000 176 1800000, 1825000, 1850000, 1875000
177}; 177};
178 178
179static const int mc13892_swbst[] = { 179static const unsigned int mc13892_swbst[] = {
180 5000000, 180 5000000,
181}; 181};
182 182
183static const int mc13892_viohi[] = { 183static const unsigned int mc13892_viohi[] = {
184 2775000, 184 2775000,
185}; 185};
186 186
187static const int mc13892_vpll[] = { 187static const unsigned int mc13892_vpll[] = {
188 1050000, 1250000, 1650000, 1800000, 188 1050000, 1250000, 1650000, 1800000,
189}; 189};
190 190
191static const int mc13892_vdig[] = { 191static const unsigned int mc13892_vdig[] = {
192 1050000, 1250000, 1650000, 1800000, 192 1050000, 1250000, 1650000, 1800000,
193}; 193};
194 194
195static const int mc13892_vsd[] = { 195static const unsigned int mc13892_vsd[] = {
196 1800000, 2000000, 2600000, 2700000, 196 1800000, 2000000, 2600000, 2700000,
197 2800000, 2900000, 3000000, 3150000, 197 2800000, 2900000, 3000000, 3150000,
198}; 198};
199 199
200static const int mc13892_vusb2[] = { 200static const unsigned int mc13892_vusb2[] = {
201 2400000, 2600000, 2700000, 2775000, 201 2400000, 2600000, 2700000, 2775000,
202}; 202};
203 203
204static const int mc13892_vvideo[] = { 204static const unsigned int mc13892_vvideo[] = {
205 2700000, 2775000, 2500000, 2600000, 205 2700000, 2775000, 2500000, 2600000,
206}; 206};
207 207
208static const int mc13892_vaudio[] = { 208static const unsigned int mc13892_vaudio[] = {
209 2300000, 2500000, 2775000, 3000000, 209 2300000, 2500000, 2775000, 3000000,
210}; 210};
211 211
212static const int mc13892_vcam[] = { 212static const unsigned int mc13892_vcam[] = {
213 2500000, 2600000, 2750000, 3000000, 213 2500000, 2600000, 2750000, 3000000,
214}; 214};
215 215
216static const int mc13892_vgen1[] = { 216static const unsigned int mc13892_vgen1[] = {
217 1200000, 1500000, 2775000, 3150000, 217 1200000, 1500000, 2775000, 3150000,
218}; 218};
219 219
220static const int mc13892_vgen2[] = { 220static const unsigned int mc13892_vgen2[] = {
221 1200000, 1500000, 1600000, 1800000, 221 1200000, 1500000, 1600000, 1800000,
222 2700000, 2800000, 3000000, 3150000, 222 2700000, 2800000, 3000000, 3150000,
223}; 223};
224 224
225static const int mc13892_vgen3[] = { 225static const unsigned int mc13892_vgen3[] = {
226 1800000, 2900000, 226 1800000, 2900000,
227}; 227};
228 228
229static const int mc13892_vusb[] = { 229static const unsigned int mc13892_vusb[] = {
230 3300000, 230 3300000,
231}; 231};
232 232
233static const int mc13892_gpo[] = { 233static const unsigned int mc13892_gpo[] = {
234 2750000, 234 2750000,
235}; 235};
236 236
237static const int mc13892_pwgtdrv[] = { 237static const unsigned int mc13892_pwgtdrv[] = {
238 5000000, 238 5000000,
239}; 239};
240 240
@@ -394,7 +394,7 @@ static struct regulator_ops mc13892_gpo_regulator_ops = {
394 .enable = mc13892_gpo_regulator_enable, 394 .enable = mc13892_gpo_regulator_enable,
395 .disable = mc13892_gpo_regulator_disable, 395 .disable = mc13892_gpo_regulator_disable,
396 .is_enabled = mc13892_gpo_regulator_is_enabled, 396 .is_enabled = mc13892_gpo_regulator_is_enabled,
397 .list_voltage = mc13xxx_regulator_list_voltage, 397 .list_voltage = regulator_list_voltage_table,
398 .set_voltage = mc13xxx_fixed_regulator_set_voltage, 398 .set_voltage = mc13xxx_fixed_regulator_set_voltage,
399 .get_voltage = mc13xxx_fixed_regulator_get_voltage, 399 .get_voltage = mc13xxx_fixed_regulator_get_voltage,
400}; 400};
@@ -436,7 +436,7 @@ static int mc13892_sw_regulator_set_voltage_sel(struct regulator_dev *rdev,
436 u32 valread; 436 u32 valread;
437 int ret; 437 int ret;
438 438
439 value = mc13892_regulators[id].voltages[selector]; 439 value = rdev->desc->volt_table[selector];
440 440
441 mc13xxx_lock(priv->mc13xxx); 441 mc13xxx_lock(priv->mc13xxx);
442 ret = mc13xxx_reg_read(priv->mc13xxx, 442 ret = mc13xxx_reg_read(priv->mc13xxx,
@@ -469,8 +469,7 @@ err:
469} 469}
470 470
471static struct regulator_ops mc13892_sw_regulator_ops = { 471static struct regulator_ops mc13892_sw_regulator_ops = {
472 .is_enabled = mc13xxx_sw_regulator_is_enabled, 472 .list_voltage = regulator_list_voltage_table,
473 .list_voltage = mc13xxx_regulator_list_voltage,
474 .set_voltage_sel = mc13892_sw_regulator_set_voltage_sel, 473 .set_voltage_sel = mc13892_sw_regulator_set_voltage_sel,
475 .get_voltage = mc13892_sw_regulator_get_voltage, 474 .get_voltage = mc13892_sw_regulator_get_voltage,
476}; 475};
diff --git a/drivers/regulator/mc13xxx-regulator-core.c b/drivers/regulator/mc13xxx-regulator-core.c
index 4fa9704739bc..d6eda28ca5d0 100644
--- a/drivers/regulator/mc13xxx-regulator-core.c
+++ b/drivers/regulator/mc13xxx-regulator-core.c
@@ -80,20 +80,6 @@ static int mc13xxx_regulator_is_enabled(struct regulator_dev *rdev)
80 return (val & mc13xxx_regulators[id].enable_bit) != 0; 80 return (val & mc13xxx_regulators[id].enable_bit) != 0;
81} 81}
82 82
83int mc13xxx_regulator_list_voltage(struct regulator_dev *rdev,
84 unsigned selector)
85{
86 int id = rdev_get_id(rdev);
87 struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev);
88 struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;
89
90 if (selector >= mc13xxx_regulators[id].desc.n_voltages)
91 return -EINVAL;
92
93 return mc13xxx_regulators[id].voltages[selector];
94}
95EXPORT_SYMBOL_GPL(mc13xxx_regulator_list_voltage);
96
97static int mc13xxx_regulator_set_voltage_sel(struct regulator_dev *rdev, 83static int mc13xxx_regulator_set_voltage_sel(struct regulator_dev *rdev,
98 unsigned selector) 84 unsigned selector)
99{ 85{
@@ -135,14 +121,14 @@ static int mc13xxx_regulator_get_voltage(struct regulator_dev *rdev)
135 121
136 BUG_ON(val >= mc13xxx_regulators[id].desc.n_voltages); 122 BUG_ON(val >= mc13xxx_regulators[id].desc.n_voltages);
137 123
138 return mc13xxx_regulators[id].voltages[val]; 124 return rdev->desc->volt_table[val];
139} 125}
140 126
141struct regulator_ops mc13xxx_regulator_ops = { 127struct regulator_ops mc13xxx_regulator_ops = {
142 .enable = mc13xxx_regulator_enable, 128 .enable = mc13xxx_regulator_enable,
143 .disable = mc13xxx_regulator_disable, 129 .disable = mc13xxx_regulator_disable,
144 .is_enabled = mc13xxx_regulator_is_enabled, 130 .is_enabled = mc13xxx_regulator_is_enabled,
145 .list_voltage = mc13xxx_regulator_list_voltage, 131 .list_voltage = regulator_list_voltage_table,
146 .set_voltage_sel = mc13xxx_regulator_set_voltage_sel, 132 .set_voltage_sel = mc13xxx_regulator_set_voltage_sel,
147 .get_voltage = mc13xxx_regulator_get_voltage, 133 .get_voltage = mc13xxx_regulator_get_voltage,
148}; 134};
@@ -151,15 +137,13 @@ EXPORT_SYMBOL_GPL(mc13xxx_regulator_ops);
151int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev, int min_uV, 137int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev, int min_uV,
152 int max_uV, unsigned *selector) 138 int max_uV, unsigned *selector)
153{ 139{
154 struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev);
155 struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;
156 int id = rdev_get_id(rdev); 140 int id = rdev_get_id(rdev);
157 141
158 dev_dbg(rdev_get_dev(rdev), "%s id: %d min_uV: %d max_uV: %d\n", 142 dev_dbg(rdev_get_dev(rdev), "%s id: %d min_uV: %d max_uV: %d\n",
159 __func__, id, min_uV, max_uV); 143 __func__, id, min_uV, max_uV);
160 144
161 if (min_uV >= mc13xxx_regulators[id].voltages[0] && 145 if (min_uV <= rdev->desc->volt_table[0] &&
162 max_uV <= mc13xxx_regulators[id].voltages[0]) 146 rdev->desc->volt_table[0] <= max_uV)
163 return 0; 147 return 0;
164 else 148 else
165 return -EINVAL; 149 return -EINVAL;
@@ -168,13 +152,11 @@ EXPORT_SYMBOL_GPL(mc13xxx_fixed_regulator_set_voltage);
168 152
169int mc13xxx_fixed_regulator_get_voltage(struct regulator_dev *rdev) 153int mc13xxx_fixed_regulator_get_voltage(struct regulator_dev *rdev)
170{ 154{
171 struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev);
172 struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;
173 int id = rdev_get_id(rdev); 155 int id = rdev_get_id(rdev);
174 156
175 dev_dbg(rdev_get_dev(rdev), "%s id: %d\n", __func__, id); 157 dev_dbg(rdev_get_dev(rdev), "%s id: %d\n", __func__, id);
176 158
177 return mc13xxx_regulators[id].voltages[0]; 159 return rdev->desc->volt_table[0];
178} 160}
179EXPORT_SYMBOL_GPL(mc13xxx_fixed_regulator_get_voltage); 161EXPORT_SYMBOL_GPL(mc13xxx_fixed_regulator_get_voltage);
180 162
@@ -182,18 +164,12 @@ struct regulator_ops mc13xxx_fixed_regulator_ops = {
182 .enable = mc13xxx_regulator_enable, 164 .enable = mc13xxx_regulator_enable,
183 .disable = mc13xxx_regulator_disable, 165 .disable = mc13xxx_regulator_disable,
184 .is_enabled = mc13xxx_regulator_is_enabled, 166 .is_enabled = mc13xxx_regulator_is_enabled,
185 .list_voltage = mc13xxx_regulator_list_voltage, 167 .list_voltage = regulator_list_voltage_table,
186 .set_voltage = mc13xxx_fixed_regulator_set_voltage, 168 .set_voltage = mc13xxx_fixed_regulator_set_voltage,
187 .get_voltage = mc13xxx_fixed_regulator_get_voltage, 169 .get_voltage = mc13xxx_fixed_regulator_get_voltage,
188}; 170};
189EXPORT_SYMBOL_GPL(mc13xxx_fixed_regulator_ops); 171EXPORT_SYMBOL_GPL(mc13xxx_fixed_regulator_ops);
190 172
191int mc13xxx_sw_regulator_is_enabled(struct regulator_dev *rdev)
192{
193 return 1;
194}
195EXPORT_SYMBOL_GPL(mc13xxx_sw_regulator_is_enabled);
196
197#ifdef CONFIG_OF 173#ifdef CONFIG_OF
198int __devinit mc13xxx_get_num_regulators_dt(struct platform_device *pdev) 174int __devinit mc13xxx_get_num_regulators_dt(struct platform_device *pdev)
199{ 175{
diff --git a/drivers/regulator/mc13xxx.h b/drivers/regulator/mc13xxx.h
index 044aba4d28ec..eaff5510b6df 100644
--- a/drivers/regulator/mc13xxx.h
+++ b/drivers/regulator/mc13xxx.h
@@ -22,7 +22,6 @@ struct mc13xxx_regulator {
22 int vsel_shift; 22 int vsel_shift;
23 int vsel_mask; 23 int vsel_mask;
24 int hi_bit; 24 int hi_bit;
25 int const *voltages;
26}; 25};
27 26
28struct mc13xxx_regulator_priv { 27struct mc13xxx_regulator_priv {
@@ -33,10 +32,6 @@ struct mc13xxx_regulator_priv {
33 struct regulator_dev *regulators[]; 32 struct regulator_dev *regulators[];
34}; 33};
35 34
36extern int mc13xxx_sw_regulator(struct regulator_dev *rdev);
37extern int mc13xxx_sw_regulator_is_enabled(struct regulator_dev *rdev);
38extern int mc13xxx_regulator_list_voltage(struct regulator_dev *rdev,
39 unsigned selector);
40extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev, 35extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev,
41 int min_uV, int max_uV, unsigned *selector); 36 int min_uV, int max_uV, unsigned *selector);
42extern int mc13xxx_fixed_regulator_get_voltage(struct regulator_dev *rdev); 37extern int mc13xxx_fixed_regulator_get_voltage(struct regulator_dev *rdev);
@@ -68,6 +63,7 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
68 .desc = { \ 63 .desc = { \
69 .name = #_name, \ 64 .name = #_name, \
70 .n_voltages = ARRAY_SIZE(_voltages), \ 65 .n_voltages = ARRAY_SIZE(_voltages), \
66 .volt_table = _voltages, \
71 .ops = &_ops, \ 67 .ops = &_ops, \
72 .type = REGULATOR_VOLTAGE, \ 68 .type = REGULATOR_VOLTAGE, \
73 .id = prefix ## _name, \ 69 .id = prefix ## _name, \
@@ -78,7 +74,6 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
78 .vsel_reg = prefix ## _vsel_reg, \ 74 .vsel_reg = prefix ## _vsel_reg, \
79 .vsel_shift = prefix ## _vsel_reg ## _ ## _name ## VSEL,\ 75 .vsel_shift = prefix ## _vsel_reg ## _ ## _name ## VSEL,\
80 .vsel_mask = prefix ## _vsel_reg ## _ ## _name ## VSEL_M,\ 76 .vsel_mask = prefix ## _vsel_reg ## _ ## _name ## VSEL_M,\
81 .voltages = _voltages, \
82 } 77 }
83 78
84#define MC13xxx_FIXED_DEFINE(prefix, _name, _reg, _voltages, _ops) \ 79#define MC13xxx_FIXED_DEFINE(prefix, _name, _reg, _voltages, _ops) \
@@ -86,6 +81,7 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
86 .desc = { \ 81 .desc = { \
87 .name = #_name, \ 82 .name = #_name, \
88 .n_voltages = ARRAY_SIZE(_voltages), \ 83 .n_voltages = ARRAY_SIZE(_voltages), \
84 .volt_table = _voltages, \
89 .ops = &_ops, \ 85 .ops = &_ops, \
90 .type = REGULATOR_VOLTAGE, \ 86 .type = REGULATOR_VOLTAGE, \
91 .id = prefix ## _name, \ 87 .id = prefix ## _name, \
@@ -93,7 +89,6 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
93 }, \ 89 }, \
94 .reg = prefix ## _reg, \ 90 .reg = prefix ## _reg, \
95 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \ 91 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \
96 .voltages = _voltages, \
97 } 92 }
98 93
99#define MC13xxx_GPO_DEFINE(prefix, _name, _reg, _voltages, _ops) \ 94#define MC13xxx_GPO_DEFINE(prefix, _name, _reg, _voltages, _ops) \
@@ -101,6 +96,7 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
101 .desc = { \ 96 .desc = { \
102 .name = #_name, \ 97 .name = #_name, \
103 .n_voltages = ARRAY_SIZE(_voltages), \ 98 .n_voltages = ARRAY_SIZE(_voltages), \
99 .volt_table = _voltages, \
104 .ops = &_ops, \ 100 .ops = &_ops, \
105 .type = REGULATOR_VOLTAGE, \ 101 .type = REGULATOR_VOLTAGE, \
106 .id = prefix ## _name, \ 102 .id = prefix ## _name, \
@@ -108,7 +104,6 @@ extern struct regulator_ops mc13xxx_fixed_regulator_ops;
108 }, \ 104 }, \
109 .reg = prefix ## _reg, \ 105 .reg = prefix ## _reg, \
110 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \ 106 .enable_bit = prefix ## _reg ## _ ## _name ## EN, \
111 .voltages = _voltages, \
112 } 107 }
113 108
114#define MC13xxx_DEFINE_SW(_name, _reg, _vsel_reg, _voltages, ops) \ 109#define MC13xxx_DEFINE_SW(_name, _reg, _vsel_reg, _voltages, ops) \
diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
index 56593b75168a..3e4106f2bda9 100644
--- a/drivers/regulator/of_regulator.c
+++ b/drivers/regulator/of_regulator.c
@@ -20,7 +20,7 @@ static void of_get_regulation_constraints(struct device_node *np,
20 struct regulator_init_data **init_data) 20 struct regulator_init_data **init_data)
21{ 21{
22 const __be32 *min_uV, *max_uV, *uV_offset; 22 const __be32 *min_uV, *max_uV, *uV_offset;
23 const __be32 *min_uA, *max_uA; 23 const __be32 *min_uA, *max_uA, *ramp_delay;
24 struct regulation_constraints *constraints = &(*init_data)->constraints; 24 struct regulation_constraints *constraints = &(*init_data)->constraints;
25 25
26 constraints->name = of_get_property(np, "regulator-name", NULL); 26 constraints->name = of_get_property(np, "regulator-name", NULL);
@@ -60,6 +60,10 @@ static void of_get_regulation_constraints(struct device_node *np,
60 constraints->always_on = true; 60 constraints->always_on = true;
61 else /* status change should be possible if not always on. */ 61 else /* status change should be possible if not always on. */
62 constraints->valid_ops_mask |= REGULATOR_CHANGE_STATUS; 62 constraints->valid_ops_mask |= REGULATOR_CHANGE_STATUS;
63
64 ramp_delay = of_get_property(np, "regulator-ramp-delay", NULL);
65 if (ramp_delay)
66 constraints->ramp_delay = be32_to_cpu(*ramp_delay);
63} 67}
64 68
65/** 69/**
@@ -88,15 +92,17 @@ struct regulator_init_data *of_get_regulator_init_data(struct device *dev,
88EXPORT_SYMBOL_GPL(of_get_regulator_init_data); 92EXPORT_SYMBOL_GPL(of_get_regulator_init_data);
89 93
90/** 94/**
91 * of_regulator_match - extract regulator init data 95 * of_regulator_match - extract regulator init data when node
96 * property "regulator-compatible" matches with the regulator name.
92 * @dev: device requesting the data 97 * @dev: device requesting the data
93 * @node: parent device node of the regulators 98 * @node: parent device node of the regulators
94 * @matches: match table for the regulators 99 * @matches: match table for the regulators
95 * @num_matches: number of entries in match table 100 * @num_matches: number of entries in match table
96 * 101 *
97 * This function uses a match table specified by the regulator driver and 102 * This function uses a match table specified by the regulator driver and
98 * looks up the corresponding init data in the device tree. Note that the 103 * looks up the corresponding init data in the device tree if
99 * match table is modified in place. 104 * regulator-compatible matches. Note that the match table is modified
105 * in place.
100 * 106 *
101 * Returns the number of matches found or a negative error code on failure. 107 * Returns the number of matches found or a negative error code on failure.
102 */ 108 */
@@ -106,27 +112,40 @@ int of_regulator_match(struct device *dev, struct device_node *node,
106{ 112{
107 unsigned int count = 0; 113 unsigned int count = 0;
108 unsigned int i; 114 unsigned int i;
115 const char *regulator_comp;
116 struct device_node *child;
109 117
110 if (!dev || !node) 118 if (!dev || !node)
111 return -EINVAL; 119 return -EINVAL;
112 120
113 for (i = 0; i < num_matches; i++) { 121 for_each_child_of_node(node, child) {
114 struct of_regulator_match *match = &matches[i]; 122 regulator_comp = of_get_property(child,
115 struct device_node *child; 123 "regulator-compatible", NULL);
116 124 if (!regulator_comp) {
117 child = of_find_node_by_name(node, match->name); 125 dev_err(dev, "regulator-compatible is missing for node %s\n",
118 if (!child)
119 continue;
120
121 match->init_data = of_get_regulator_init_data(dev, child);
122 if (!match->init_data) {
123 dev_err(dev, "failed to parse DT for regulator %s\n",
124 child->name); 126 child->name);
125 return -EINVAL; 127 continue;
128 }
129 for (i = 0; i < num_matches; i++) {
130 struct of_regulator_match *match = &matches[i];
131 if (match->of_node)
132 continue;
133
134 if (strcmp(match->name, regulator_comp))
135 continue;
136
137 match->init_data =
138 of_get_regulator_init_data(dev, child);
139 if (!match->init_data) {
140 dev_err(dev,
141 "failed to parse DT for regulator %s\n",
142 child->name);
143 return -EINVAL;
144 }
145 match->of_node = child;
146 count++;
147 break;
126 } 148 }
127
128 match->of_node = child;
129 count++;
130 } 149 }
131 150
132 return count; 151 return count;
diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c
index 795f75a6ac33..17d19fbbc490 100644
--- a/drivers/regulator/palmas-regulator.c
+++ b/drivers/regulator/palmas-regulator.c
@@ -257,8 +257,7 @@ static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode)
257 unsigned int reg; 257 unsigned int reg;
258 258
259 palmas_smps_read(pmic->palmas, palmas_regs_info[id].ctrl_addr, &reg); 259 palmas_smps_read(pmic->palmas, palmas_regs_info[id].ctrl_addr, &reg);
260 reg &= ~PALMAS_SMPS12_CTRL_STATUS_MASK; 260 reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
261 reg >>= PALMAS_SMPS12_CTRL_STATUS_SHIFT;
262 261
263 switch (mode) { 262 switch (mode) {
264 case REGULATOR_MODE_NORMAL: 263 case REGULATOR_MODE_NORMAL:
@@ -374,11 +373,22 @@ static int palmas_set_voltage_smps_sel(struct regulator_dev *dev,
374static int palmas_map_voltage_smps(struct regulator_dev *rdev, 373static int palmas_map_voltage_smps(struct regulator_dev *rdev,
375 int min_uV, int max_uV) 374 int min_uV, int max_uV)
376{ 375{
376 struct palmas_pmic *pmic = rdev_get_drvdata(rdev);
377 int id = rdev_get_id(rdev);
377 int ret, voltage; 378 int ret, voltage;
378 379
379 ret = ((min_uV - 500000) / 10000) + 1; 380 if (min_uV == 0)
380 if (ret < 0) 381 return 0;
381 return ret; 382
383 if (pmic->range[id]) { /* RANGE is x2 */
384 if (min_uV < 1000000)
385 min_uV = 1000000;
386 ret = DIV_ROUND_UP(min_uV - 1000000, 20000) + 1;
387 } else { /* RANGE is x1 */
388 if (min_uV < 500000)
389 min_uV = 500000;
390 ret = DIV_ROUND_UP(min_uV - 500000, 10000) + 1;
391 }
382 392
383 /* Map back into a voltage to verify we're still in bounds */ 393 /* Map back into a voltage to verify we're still in bounds */
384 voltage = palmas_list_voltage_smps(rdev, ret); 394 voltage = palmas_list_voltage_smps(rdev, ret);
@@ -400,19 +410,14 @@ static struct regulator_ops palmas_ops_smps = {
400 .map_voltage = palmas_map_voltage_smps, 410 .map_voltage = palmas_map_voltage_smps,
401}; 411};
402 412
403static int palmas_list_voltage_smps10(struct regulator_dev *dev,
404 unsigned selector)
405{
406 return 3750000 + (selector * 1250000);
407}
408
409static struct regulator_ops palmas_ops_smps10 = { 413static struct regulator_ops palmas_ops_smps10 = {
410 .is_enabled = regulator_is_enabled_regmap, 414 .is_enabled = regulator_is_enabled_regmap,
411 .enable = regulator_enable_regmap, 415 .enable = regulator_enable_regmap,
412 .disable = regulator_disable_regmap, 416 .disable = regulator_disable_regmap,
413 .get_voltage_sel = regulator_get_voltage_sel_regmap, 417 .get_voltage_sel = regulator_get_voltage_sel_regmap,
414 .set_voltage_sel = regulator_set_voltage_sel_regmap, 418 .set_voltage_sel = regulator_set_voltage_sel_regmap,
415 .list_voltage = palmas_list_voltage_smps10, 419 .list_voltage = regulator_list_voltage_linear,
420 .map_voltage = regulator_map_voltage_linear,
416}; 421};
417 422
418static int palmas_is_enabled_ldo(struct regulator_dev *dev) 423static int palmas_is_enabled_ldo(struct regulator_dev *dev)
@@ -522,7 +527,15 @@ static int palmas_smps_init(struct palmas *palmas, int id,
522 if (ret) 527 if (ret)
523 return ret; 528 return ret;
524 529
525 if (id != PALMAS_REG_SMPS10) { 530 switch (id) {
531 case PALMAS_REG_SMPS10:
532 if (reg_init->mode_sleep) {
533 reg &= ~PALMAS_SMPS10_CTRL_MODE_SLEEP_MASK;
534 reg |= reg_init->mode_sleep <<
535 PALMAS_SMPS10_CTRL_MODE_SLEEP_SHIFT;
536 }
537 break;
538 default:
526 if (reg_init->warm_reset) 539 if (reg_init->warm_reset)
527 reg |= PALMAS_SMPS12_CTRL_WR_S; 540 reg |= PALMAS_SMPS12_CTRL_WR_S;
528 541
@@ -534,14 +547,8 @@ static int palmas_smps_init(struct palmas *palmas, int id,
534 reg |= reg_init->mode_sleep << 547 reg |= reg_init->mode_sleep <<
535 PALMAS_SMPS12_CTRL_MODE_SLEEP_SHIFT; 548 PALMAS_SMPS12_CTRL_MODE_SLEEP_SHIFT;
536 } 549 }
537 } else {
538 if (reg_init->mode_sleep) {
539 reg &= ~PALMAS_SMPS10_CTRL_MODE_SLEEP_MASK;
540 reg |= reg_init->mode_sleep <<
541 PALMAS_SMPS10_CTRL_MODE_SLEEP_SHIFT;
542 }
543
544 } 550 }
551
545 ret = palmas_smps_write(palmas, addr, reg); 552 ret = palmas_smps_write(palmas, addr, reg);
546 if (ret) 553 if (ret)
547 return ret; 554 return ret;
@@ -665,10 +672,8 @@ static __devinit int palmas_probe(struct platform_device *pdev)
665 pmic->desc[id].name = palmas_regs_info[id].name; 672 pmic->desc[id].name = palmas_regs_info[id].name;
666 pmic->desc[id].id = id; 673 pmic->desc[id].id = id;
667 674
668 if (id != PALMAS_REG_SMPS10) { 675 switch (id) {
669 pmic->desc[id].ops = &palmas_ops_smps; 676 case PALMAS_REG_SMPS10:
670 pmic->desc[id].n_voltages = PALMAS_SMPS_NUM_VOLTAGES;
671 } else {
672 pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES; 677 pmic->desc[id].n_voltages = PALMAS_SMPS10_NUM_VOLTAGES;
673 pmic->desc[id].ops = &palmas_ops_smps10; 678 pmic->desc[id].ops = &palmas_ops_smps10;
674 pmic->desc[id].vsel_reg = PALMAS_SMPS10_CTRL; 679 pmic->desc[id].vsel_reg = PALMAS_SMPS10_CTRL;
@@ -677,6 +682,12 @@ static __devinit int palmas_probe(struct platform_device *pdev)
677 PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, 682 PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
678 PALMAS_SMPS10_STATUS); 683 PALMAS_SMPS10_STATUS);
679 pmic->desc[id].enable_mask = SMPS10_BOOST_EN; 684 pmic->desc[id].enable_mask = SMPS10_BOOST_EN;
685 pmic->desc[id].min_uV = 3750000;
686 pmic->desc[id].uV_step = 1250000;
687 break;
688 default:
689 pmic->desc[id].ops = &palmas_ops_smps;
690 pmic->desc[id].n_voltages = PALMAS_SMPS_NUM_VOLTAGES;
680 } 691 }
681 692
682 pmic->desc[id].type = REGULATOR_VOLTAGE; 693 pmic->desc[id].type = REGULATOR_VOLTAGE;
diff --git a/drivers/regulator/pcap-regulator.c b/drivers/regulator/pcap-regulator.c
index 8211101121f0..68777acc099f 100644
--- a/drivers/regulator/pcap-regulator.c
+++ b/drivers/regulator/pcap-regulator.c
@@ -18,80 +18,80 @@
18#include <linux/regulator/machine.h> 18#include <linux/regulator/machine.h>
19#include <linux/mfd/ezx-pcap.h> 19#include <linux/mfd/ezx-pcap.h>
20 20
21static const u16 V1_table[] = { 21static const unsigned int V1_table[] = {
22 2775, 1275, 1600, 1725, 1825, 1925, 2075, 2275, 22 2775000, 1275000, 1600000, 1725000, 1825000, 1925000, 2075000, 2275000,
23}; 23};
24 24
25static const u16 V2_table[] = { 25static const unsigned int V2_table[] = {
26 2500, 2775, 26 2500000, 2775000,
27}; 27};
28 28
29static const u16 V3_table[] = { 29static const unsigned int V3_table[] = {
30 1075, 1275, 1550, 1725, 1876, 1950, 2075, 2275, 30 1075000, 1275000, 1550000, 1725000, 1876000, 1950000, 2075000, 2275000,
31}; 31};
32 32
33static const u16 V4_table[] = { 33static const unsigned int V4_table[] = {
34 1275, 1550, 1725, 1875, 1950, 2075, 2275, 2775, 34 1275000, 1550000, 1725000, 1875000, 1950000, 2075000, 2275000, 2775000,
35}; 35};
36 36
37static const u16 V5_table[] = { 37static const unsigned int V5_table[] = {
38 1875, 2275, 2475, 2775, 38 1875000, 2275000, 2475000, 2775000,
39}; 39};
40 40
41static const u16 V6_table[] = { 41static const unsigned int V6_table[] = {
42 2475, 2775, 42 2475000, 2775000,
43}; 43};
44 44
45static const u16 V7_table[] = { 45static const unsigned int V7_table[] = {
46 1875, 2775, 46 1875000, 2775000,
47}; 47};
48 48
49#define V8_table V4_table 49#define V8_table V4_table
50 50
51static const u16 V9_table[] = { 51static const unsigned int V9_table[] = {
52 1575, 1875, 2475, 2775, 52 1575000, 1875000, 2475000, 2775000,
53}; 53};
54 54
55static const u16 V10_table[] = { 55static const unsigned int V10_table[] = {
56 5000, 56 5000000,
57}; 57};
58 58
59static const u16 VAUX1_table[] = { 59static const unsigned int VAUX1_table[] = {
60 1875, 2475, 2775, 3000, 60 1875000, 2475000, 2775000, 3000000,
61}; 61};
62 62
63#define VAUX2_table VAUX1_table 63#define VAUX2_table VAUX1_table
64 64
65static const u16 VAUX3_table[] = { 65static const unsigned int VAUX3_table[] = {
66 1200, 1200, 1200, 1200, 1400, 1600, 1800, 2000, 66 1200000, 1200000, 1200000, 1200000, 1400000, 1600000, 1800000, 2000000,
67 2200, 2400, 2600, 2800, 3000, 3200, 3400, 3600, 67 2200000, 2400000, 2600000, 2800000, 3000000, 3200000, 3400000, 3600000,
68}; 68};
69 69
70static const u16 VAUX4_table[] = { 70static const unsigned int VAUX4_table[] = {
71 1800, 1800, 3000, 5000, 71 1800000, 1800000, 3000000, 5000000,
72}; 72};
73 73
74static const u16 VSIM_table[] = { 74static const unsigned int VSIM_table[] = {
75 1875, 3000, 75 1875000, 3000000,
76}; 76};
77 77
78static const u16 VSIM2_table[] = { 78static const unsigned int VSIM2_table[] = {
79 1875, 79 1875000,
80}; 80};
81 81
82static const u16 VVIB_table[] = { 82static const unsigned int VVIB_table[] = {
83 1300, 1800, 2000, 3000, 83 1300000, 1800000, 2000000, 3000000,
84}; 84};
85 85
86static const u16 SW1_table[] = { 86static const unsigned int SW1_table[] = {
87 900, 950, 1000, 1050, 1100, 1150, 1200, 1250, 87 900000, 950000, 1000000, 1050000, 1100000, 1150000, 1200000, 1250000,
88 1300, 1350, 1400, 1450, 1500, 1600, 1875, 2250, 88 1300000, 1350000, 1400000, 1450000, 1500000, 1600000, 1875000, 2250000,
89}; 89};
90 90
91#define SW2_table SW1_table 91#define SW2_table SW1_table
92 92
93static const u16 SW3_table[] = { 93static const unsigned int SW3_table[] = {
94 4000, 4500, 5000, 5500, 94 4000000, 4500000, 5000000, 5500000,
95}; 95};
96 96
97struct pcap_regulator { 97struct pcap_regulator {
@@ -100,8 +100,6 @@ struct pcap_regulator {
100 const u8 index; 100 const u8 index;
101 const u8 stby; 101 const u8 stby;
102 const u8 lowpwr; 102 const u8 lowpwr;
103 const u8 n_voltages;
104 const u16 *voltage_table;
105}; 103};
106 104
107#define NA 0xff 105#define NA 0xff
@@ -113,8 +111,6 @@ struct pcap_regulator {
113 .index = _index, \ 111 .index = _index, \
114 .stby = _stby, \ 112 .stby = _stby, \
115 .lowpwr = _lowpwr, \ 113 .lowpwr = _lowpwr, \
116 .n_voltages = ARRAY_SIZE(_vreg##_table), \
117 .voltage_table = _vreg##_table, \
118 } 114 }
119 115
120static struct pcap_regulator vreg_table[] = { 116static struct pcap_regulator vreg_table[] = {
@@ -157,11 +153,11 @@ static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev,
157 void *pcap = rdev_get_drvdata(rdev); 153 void *pcap = rdev_get_drvdata(rdev);
158 154
159 /* the regulator doesn't support voltage switching */ 155 /* the regulator doesn't support voltage switching */
160 if (vreg->n_voltages == 1) 156 if (rdev->desc->n_voltages == 1)
161 return -EINVAL; 157 return -EINVAL;
162 158
163 return ezx_pcap_set_bits(pcap, vreg->reg, 159 return ezx_pcap_set_bits(pcap, vreg->reg,
164 (vreg->n_voltages - 1) << vreg->index, 160 (rdev->desc->n_voltages - 1) << vreg->index,
165 selector << vreg->index); 161 selector << vreg->index);
166} 162}
167 163
@@ -171,11 +167,11 @@ static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev)
171 void *pcap = rdev_get_drvdata(rdev); 167 void *pcap = rdev_get_drvdata(rdev);
172 u32 tmp; 168 u32 tmp;
173 169
174 if (vreg->n_voltages == 1) 170 if (rdev->desc->n_voltages == 1)
175 return 0; 171 return 0;
176 172
177 ezx_pcap_read(pcap, vreg->reg, &tmp); 173 ezx_pcap_read(pcap, vreg->reg, &tmp);
178 tmp = ((tmp >> vreg->index) & (vreg->n_voltages - 1)); 174 tmp = ((tmp >> vreg->index) & (rdev->desc->n_voltages - 1));
179 return tmp; 175 return tmp;
180} 176}
181 177
@@ -214,16 +210,8 @@ static int pcap_regulator_is_enabled(struct regulator_dev *rdev)
214 return (tmp >> vreg->en) & 1; 210 return (tmp >> vreg->en) & 1;
215} 211}
216 212
217static int pcap_regulator_list_voltage(struct regulator_dev *rdev,
218 unsigned int index)
219{
220 struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
221
222 return vreg->voltage_table[index] * 1000;
223}
224
225static struct regulator_ops pcap_regulator_ops = { 213static struct regulator_ops pcap_regulator_ops = {
226 .list_voltage = pcap_regulator_list_voltage, 214 .list_voltage = regulator_list_voltage_table,
227 .set_voltage_sel = pcap_regulator_set_voltage_sel, 215 .set_voltage_sel = pcap_regulator_set_voltage_sel,
228 .get_voltage_sel = pcap_regulator_get_voltage_sel, 216 .get_voltage_sel = pcap_regulator_get_voltage_sel,
229 .enable = pcap_regulator_enable, 217 .enable = pcap_regulator_enable,
@@ -236,6 +224,7 @@ static struct regulator_ops pcap_regulator_ops = {
236 .name = #_vreg, \ 224 .name = #_vreg, \
237 .id = _vreg, \ 225 .id = _vreg, \
238 .n_voltages = ARRAY_SIZE(_vreg##_table), \ 226 .n_voltages = ARRAY_SIZE(_vreg##_table), \
227 .volt_table = _vreg##_table, \
239 .ops = &pcap_regulator_ops, \ 228 .ops = &pcap_regulator_ops, \
240 .type = REGULATOR_VOLTAGE, \ 229 .type = REGULATOR_VOLTAGE, \
241 .owner = THIS_MODULE, \ 230 .owner = THIS_MODULE, \
diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c
index 3c9d14c0017b..092e5cb848a1 100644
--- a/drivers/regulator/pcf50633-regulator.c
+++ b/drivers/regulator/pcf50633-regulator.c
@@ -100,13 +100,12 @@ static unsigned int ldo_voltage_value(u8 bits)
100 return 900 + (bits * 100); 100 return 900 + (bits * 100);
101} 101}
102 102
103static int pcf50633_regulator_set_voltage(struct regulator_dev *rdev, 103static int pcf50633_regulator_map_voltage(struct regulator_dev *rdev,
104 int min_uV, int max_uV, 104 int min_uV, int max_uV)
105 unsigned *selector)
106{ 105{
107 struct pcf50633 *pcf; 106 struct pcf50633 *pcf;
108 int regulator_id, millivolts; 107 int regulator_id, millivolts;
109 u8 volt_bits, regnr; 108 u8 volt_bits;
110 109
111 pcf = rdev_get_drvdata(rdev); 110 pcf = rdev_get_drvdata(rdev);
112 111
@@ -116,15 +115,11 @@ static int pcf50633_regulator_set_voltage(struct regulator_dev *rdev,
116 115
117 millivolts = min_uV / 1000; 116 millivolts = min_uV / 1000;
118 117
119 regnr = rdev->desc->vsel_reg;
120
121 switch (regulator_id) { 118 switch (regulator_id) {
122 case PCF50633_REGULATOR_AUTO: 119 case PCF50633_REGULATOR_AUTO:
123 volt_bits = auto_voltage_bits(millivolts); 120 volt_bits = auto_voltage_bits(millivolts);
124 break; 121 break;
125 case PCF50633_REGULATOR_DOWN1: 122 case PCF50633_REGULATOR_DOWN1:
126 volt_bits = down_voltage_bits(millivolts);
127 break;
128 case PCF50633_REGULATOR_DOWN2: 123 case PCF50633_REGULATOR_DOWN2:
129 volt_bits = down_voltage_bits(millivolts); 124 volt_bits = down_voltage_bits(millivolts);
130 break; 125 break;
@@ -142,9 +137,7 @@ static int pcf50633_regulator_set_voltage(struct regulator_dev *rdev,
142 return -EINVAL; 137 return -EINVAL;
143 } 138 }
144 139
145 *selector = volt_bits; 140 return volt_bits;
146
147 return pcf50633_reg_write(pcf, regnr, volt_bits);
148} 141}
149 142
150static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev, 143static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev,
@@ -159,8 +152,6 @@ static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev,
159 millivolts = auto_voltage_value(index); 152 millivolts = auto_voltage_value(index);
160 break; 153 break;
161 case PCF50633_REGULATOR_DOWN1: 154 case PCF50633_REGULATOR_DOWN1:
162 millivolts = down_voltage_value(index);
163 break;
164 case PCF50633_REGULATOR_DOWN2: 155 case PCF50633_REGULATOR_DOWN2:
165 millivolts = down_voltage_value(index); 156 millivolts = down_voltage_value(index);
166 break; 157 break;
@@ -182,9 +173,10 @@ static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev,
182} 173}
183 174
184static struct regulator_ops pcf50633_regulator_ops = { 175static struct regulator_ops pcf50633_regulator_ops = {
185 .set_voltage = pcf50633_regulator_set_voltage, 176 .set_voltage_sel = regulator_set_voltage_sel_regmap,
186 .get_voltage_sel = regulator_get_voltage_sel_regmap, 177 .get_voltage_sel = regulator_get_voltage_sel_regmap,
187 .list_voltage = pcf50633_regulator_list_voltage, 178 .list_voltage = pcf50633_regulator_list_voltage,
179 .map_voltage = pcf50633_regulator_map_voltage,
188 .enable = regulator_enable_regmap, 180 .enable = regulator_enable_regmap,
189 .disable = regulator_disable_regmap, 181 .disable = regulator_disable_regmap,
190 .is_enabled = regulator_is_enabled_regmap, 182 .is_enabled = regulator_is_enabled_regmap,
diff --git a/drivers/regulator/rc5t583-regulator.c b/drivers/regulator/rc5t583-regulator.c
index 1d34e64a1307..8bf4e8c9de9a 100644
--- a/drivers/regulator/rc5t583-regulator.c
+++ b/drivers/regulator/rc5t583-regulator.c
@@ -42,7 +42,6 @@ struct rc5t583_regulator_info {
42 42
43 /* Regulator specific turn-on delay and voltage settling time*/ 43 /* Regulator specific turn-on delay and voltage settling time*/
44 int enable_uv_per_us; 44 int enable_uv_per_us;
45 int change_uv_per_us;
46 45
47 /* Used by regulator core */ 46 /* Used by regulator core */
48 struct regulator_desc desc; 47 struct regulator_desc desc;
@@ -66,25 +65,6 @@ static int rc5t583_regulator_enable_time(struct regulator_dev *rdev)
66 return DIV_ROUND_UP(curr_uV, reg->reg_info->enable_uv_per_us); 65 return DIV_ROUND_UP(curr_uV, reg->reg_info->enable_uv_per_us);
67} 66}
68 67
69static int rc5t583_set_voltage_time_sel(struct regulator_dev *rdev,
70 unsigned int old_selector, unsigned int new_selector)
71{
72 struct rc5t583_regulator *reg = rdev_get_drvdata(rdev);
73 int old_uV, new_uV;
74 old_uV = regulator_list_voltage_linear(rdev, old_selector);
75
76 if (old_uV < 0)
77 return old_uV;
78
79 new_uV = regulator_list_voltage_linear(rdev, new_selector);
80 if (new_uV < 0)
81 return new_uV;
82
83 return DIV_ROUND_UP(abs(old_uV - new_uV),
84 reg->reg_info->change_uv_per_us);
85}
86
87
88static struct regulator_ops rc5t583_ops = { 68static struct regulator_ops rc5t583_ops = {
89 .is_enabled = regulator_is_enabled_regmap, 69 .is_enabled = regulator_is_enabled_regmap,
90 .enable = regulator_enable_regmap, 70 .enable = regulator_enable_regmap,
@@ -94,7 +74,7 @@ static struct regulator_ops rc5t583_ops = {
94 .set_voltage_sel = regulator_set_voltage_sel_regmap, 74 .set_voltage_sel = regulator_set_voltage_sel_regmap,
95 .list_voltage = regulator_list_voltage_linear, 75 .list_voltage = regulator_list_voltage_linear,
96 .map_voltage = regulator_map_voltage_linear, 76 .map_voltage = regulator_map_voltage_linear,
97 .set_voltage_time_sel = rc5t583_set_voltage_time_sel, 77 .set_voltage_time_sel = regulator_set_voltage_time_sel,
98}; 78};
99 79
100#define RC5T583_REG(_id, _en_reg, _en_bit, _disc_reg, _disc_bit, \ 80#define RC5T583_REG(_id, _en_reg, _en_bit, _disc_reg, _disc_bit, \
@@ -104,7 +84,6 @@ static struct regulator_ops rc5t583_ops = {
104 .disc_bit = _disc_bit, \ 84 .disc_bit = _disc_bit, \
105 .deepsleep_reg = RC5T583_REG_##_id##DAC_DS, \ 85 .deepsleep_reg = RC5T583_REG_##_id##DAC_DS, \
106 .enable_uv_per_us = _enable_mv * 1000, \ 86 .enable_uv_per_us = _enable_mv * 1000, \
107 .change_uv_per_us = 40 * 1000, \
108 .deepsleep_id = RC5T583_DS_##_id, \ 87 .deepsleep_id = RC5T583_DS_##_id, \
109 .desc = { \ 88 .desc = { \
110 .name = "rc5t583-regulator-"#_id, \ 89 .name = "rc5t583-regulator-"#_id, \
@@ -119,6 +98,7 @@ static struct regulator_ops rc5t583_ops = {
119 .enable_mask = BIT(_en_bit), \ 98 .enable_mask = BIT(_en_bit), \
120 .min_uV = _min_mv * 1000, \ 99 .min_uV = _min_mv * 1000, \
121 .uV_step = _step_uV, \ 100 .uV_step = _step_uV, \
101 .ramp_delay = 40 * 1000, \
122 }, \ 102 }, \
123} 103}
124 104
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
new file mode 100644
index 000000000000..4669dc9ac74a
--- /dev/null
+++ b/drivers/regulator/s2mps11.c
@@ -0,0 +1,363 @@
1/*
2 * s2mps11.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd
5 * http://www.samsung.com
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14#include <linux/bug.h>
15#include <linux/delay.h>
16#include <linux/err.h>
17#include <linux/gpio.h>
18#include <linux/slab.h>
19#include <linux/module.h>
20#include <linux/platform_device.h>
21#include <linux/regulator/driver.h>
22#include <linux/regulator/machine.h>
23#include <linux/mfd/samsung/core.h>
24#include <linux/mfd/samsung/s2mps11.h>
25
26struct s2mps11_info {
27 struct regulator_dev **rdev;
28
29 int ramp_delay2;
30 int ramp_delay34;
31 int ramp_delay5;
32 int ramp_delay16;
33 int ramp_delay7810;
34 int ramp_delay9;
35
36 bool buck6_ramp;
37 bool buck2_ramp;
38 bool buck3_ramp;
39 bool buck4_ramp;
40};
41
42static int get_ramp_delay(int ramp_delay)
43{
44 unsigned char cnt = 0;
45
46 ramp_delay /= 6;
47
48 while (true) {
49 ramp_delay = ramp_delay >> 1;
50 if (ramp_delay == 0)
51 break;
52 cnt++;
53 }
54 return cnt;
55}
56
57static struct regulator_ops s2mps11_ldo_ops = {
58 .list_voltage = regulator_list_voltage_linear,
59 .map_voltage = regulator_map_voltage_linear,
60 .is_enabled = regulator_is_enabled_regmap,
61 .enable = regulator_enable_regmap,
62 .disable = regulator_disable_regmap,
63 .get_voltage_sel = regulator_get_voltage_sel_regmap,
64 .set_voltage_sel = regulator_set_voltage_sel_regmap,
65 .set_voltage_time_sel = regulator_set_voltage_time_sel,
66};
67
68static struct regulator_ops s2mps11_buck_ops = {
69 .list_voltage = regulator_list_voltage_linear,
70 .map_voltage = regulator_map_voltage_linear,
71 .is_enabled = regulator_is_enabled_regmap,
72 .enable = regulator_enable_regmap,
73 .disable = regulator_disable_regmap,
74 .get_voltage_sel = regulator_get_voltage_sel_regmap,
75 .set_voltage_sel = regulator_set_voltage_sel_regmap,
76 .set_voltage_time_sel = regulator_set_voltage_time_sel,
77};
78
79#define regulator_desc_ldo1(num) { \
80 .name = "LDO"#num, \
81 .id = S2MPS11_LDO##num, \
82 .ops = &s2mps11_ldo_ops, \
83 .type = REGULATOR_VOLTAGE, \
84 .owner = THIS_MODULE, \
85 .min_uV = S2MPS11_LDO_MIN, \
86 .uV_step = S2MPS11_LDO_STEP1, \
87 .n_voltages = S2MPS11_LDO_N_VOLTAGES, \
88 .vsel_reg = S2MPS11_REG_L1CTRL + num - 1, \
89 .vsel_mask = S2MPS11_LDO_VSEL_MASK, \
90 .enable_reg = S2MPS11_REG_L1CTRL + num - 1, \
91 .enable_mask = S2MPS11_ENABLE_MASK \
92}
93#define regulator_desc_ldo2(num) { \
94 .name = "LDO"#num, \
95 .id = S2MPS11_LDO##num, \
96 .ops = &s2mps11_ldo_ops, \
97 .type = REGULATOR_VOLTAGE, \
98 .owner = THIS_MODULE, \
99 .min_uV = S2MPS11_LDO_MIN, \
100 .uV_step = S2MPS11_LDO_STEP2, \
101 .n_voltages = S2MPS11_LDO_N_VOLTAGES, \
102 .vsel_reg = S2MPS11_REG_L1CTRL + num - 1, \
103 .vsel_mask = S2MPS11_LDO_VSEL_MASK, \
104 .enable_reg = S2MPS11_REG_L1CTRL + num - 1, \
105 .enable_mask = S2MPS11_ENABLE_MASK \
106}
107
108#define regulator_desc_buck1_4(num) { \
109 .name = "BUCK"#num, \
110 .id = S2MPS11_BUCK##num, \
111 .ops = &s2mps11_buck_ops, \
112 .type = REGULATOR_VOLTAGE, \
113 .owner = THIS_MODULE, \
114 .min_uV = S2MPS11_BUCK_MIN1, \
115 .uV_step = S2MPS11_BUCK_STEP1, \
116 .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
117 .vsel_reg = S2MPS11_REG_B1CTRL2 + (num - 1) * 2, \
118 .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
119 .enable_reg = S2MPS11_REG_B1CTRL1 + (num - 1) * 2, \
120 .enable_mask = S2MPS11_ENABLE_MASK \
121}
122
123#define regulator_desc_buck5 { \
124 .name = "BUCK5", \
125 .id = S2MPS11_BUCK5, \
126 .ops = &s2mps11_buck_ops, \
127 .type = REGULATOR_VOLTAGE, \
128 .owner = THIS_MODULE, \
129 .min_uV = S2MPS11_BUCK_MIN1, \
130 .uV_step = S2MPS11_BUCK_STEP1, \
131 .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
132 .vsel_reg = S2MPS11_REG_B5CTRL2, \
133 .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
134 .enable_reg = S2MPS11_REG_B5CTRL1, \
135 .enable_mask = S2MPS11_ENABLE_MASK \
136}
137
138#define regulator_desc_buck6_8(num) { \
139 .name = "BUCK"#num, \
140 .id = S2MPS11_BUCK##num, \
141 .ops = &s2mps11_buck_ops, \
142 .type = REGULATOR_VOLTAGE, \
143 .owner = THIS_MODULE, \
144 .min_uV = S2MPS11_BUCK_MIN1, \
145 .uV_step = S2MPS11_BUCK_STEP1, \
146 .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
147 .vsel_reg = S2MPS11_REG_B6CTRL2 + (num - 6) * 2, \
148 .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
149 .enable_reg = S2MPS11_REG_B6CTRL1 + (num - 6) * 2, \
150 .enable_mask = S2MPS11_ENABLE_MASK \
151}
152
153#define regulator_desc_buck9 { \
154 .name = "BUCK9", \
155 .id = S2MPS11_BUCK9, \
156 .ops = &s2mps11_buck_ops, \
157 .type = REGULATOR_VOLTAGE, \
158 .owner = THIS_MODULE, \
159 .min_uV = S2MPS11_BUCK_MIN3, \
160 .uV_step = S2MPS11_BUCK_STEP3, \
161 .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
162 .vsel_reg = S2MPS11_REG_B9CTRL2, \
163 .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
164 .enable_reg = S2MPS11_REG_B9CTRL1, \
165 .enable_mask = S2MPS11_ENABLE_MASK \
166}
167
168#define regulator_desc_buck10 { \
169 .name = "BUCK10", \
170 .id = S2MPS11_BUCK10, \
171 .ops = &s2mps11_buck_ops, \
172 .type = REGULATOR_VOLTAGE, \
173 .owner = THIS_MODULE, \
174 .min_uV = S2MPS11_BUCK_MIN2, \
175 .uV_step = S2MPS11_BUCK_STEP2, \
176 .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
177 .vsel_reg = S2MPS11_REG_B9CTRL2, \
178 .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
179 .enable_reg = S2MPS11_REG_B9CTRL1, \
180 .enable_mask = S2MPS11_ENABLE_MASK \
181}
182
183static struct regulator_desc regulators[] = {
184 regulator_desc_ldo2(1),
185 regulator_desc_ldo1(2),
186 regulator_desc_ldo1(3),
187 regulator_desc_ldo1(4),
188 regulator_desc_ldo1(5),
189 regulator_desc_ldo2(6),
190 regulator_desc_ldo1(7),
191 regulator_desc_ldo1(8),
192 regulator_desc_ldo1(9),
193 regulator_desc_ldo1(10),
194 regulator_desc_ldo2(11),
195 regulator_desc_ldo1(12),
196 regulator_desc_ldo1(13),
197 regulator_desc_ldo1(14),
198 regulator_desc_ldo1(15),
199 regulator_desc_ldo1(16),
200 regulator_desc_ldo1(17),
201 regulator_desc_ldo1(18),
202 regulator_desc_ldo1(19),
203 regulator_desc_ldo1(20),
204 regulator_desc_ldo1(21),
205 regulator_desc_ldo2(22),
206 regulator_desc_ldo2(23),
207 regulator_desc_ldo1(24),
208 regulator_desc_ldo1(25),
209 regulator_desc_ldo1(26),
210 regulator_desc_ldo2(27),
211 regulator_desc_ldo1(28),
212 regulator_desc_ldo1(29),
213 regulator_desc_ldo1(30),
214 regulator_desc_ldo1(31),
215 regulator_desc_ldo1(32),
216 regulator_desc_ldo1(33),
217 regulator_desc_ldo1(34),
218 regulator_desc_ldo1(35),
219 regulator_desc_ldo1(36),
220 regulator_desc_ldo1(37),
221 regulator_desc_ldo1(38),
222 regulator_desc_buck1_4(1),
223 regulator_desc_buck1_4(2),
224 regulator_desc_buck1_4(3),
225 regulator_desc_buck1_4(4),
226 regulator_desc_buck5,
227 regulator_desc_buck6_8(6),
228 regulator_desc_buck6_8(7),
229 regulator_desc_buck6_8(8),
230 regulator_desc_buck9,
231 regulator_desc_buck10,
232};
233
234static __devinit int s2mps11_pmic_probe(struct platform_device *pdev)
235{
236 struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
237 struct sec_platform_data *pdata = dev_get_platdata(iodev->dev);
238 struct regulator_config config = { };
239 struct regulator_dev **rdev;
240 struct s2mps11_info *s2mps11;
241 int i, ret, size;
242 unsigned char ramp_enable, ramp_reg = 0;
243
244 if (!pdata) {
245 dev_err(pdev->dev.parent, "Platform data not supplied\n");
246 return -ENODEV;
247 }
248
249 s2mps11 = devm_kzalloc(&pdev->dev, sizeof(struct s2mps11_info),
250 GFP_KERNEL);
251 if (!s2mps11)
252 return -ENOMEM;
253
254 size = sizeof(struct regulator_dev *) * S2MPS11_REGULATOR_MAX;
255 s2mps11->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
256 if (!s2mps11->rdev) {
257 return -ENOMEM;
258 }
259
260 rdev = s2mps11->rdev;
261 platform_set_drvdata(pdev, s2mps11);
262
263 s2mps11->ramp_delay2 = pdata->buck2_ramp_delay;
264 s2mps11->ramp_delay34 = pdata->buck34_ramp_delay;
265 s2mps11->ramp_delay5 = pdata->buck5_ramp_delay;
266 s2mps11->ramp_delay16 = pdata->buck16_ramp_delay;
267 s2mps11->ramp_delay7810 = pdata->buck7810_ramp_delay;
268 s2mps11->ramp_delay9 = pdata->buck9_ramp_delay;
269
270 s2mps11->buck6_ramp = pdata->buck6_ramp_enable;
271 s2mps11->buck2_ramp = pdata->buck2_ramp_enable;
272 s2mps11->buck3_ramp = pdata->buck3_ramp_enable;
273 s2mps11->buck4_ramp = pdata->buck4_ramp_enable;
274
275 ramp_enable = (s2mps11->buck2_ramp << 3) | (s2mps11->buck3_ramp << 2) |
276 (s2mps11->buck4_ramp << 1) | s2mps11->buck6_ramp ;
277
278 if (ramp_enable) {
279 if (s2mps11->buck2_ramp)
280 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay2) >> 6;
281 if (s2mps11->buck3_ramp || s2mps11->buck4_ramp)
282 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay34) >> 4;
283 sec_reg_write(iodev, S2MPS11_REG_RAMP, ramp_reg | ramp_enable);
284 }
285
286 ramp_reg &= 0x00;
287 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay5) >> 6;
288 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay16) >> 4;
289 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay7810) >> 2;
290 ramp_reg |= get_ramp_delay(s2mps11->ramp_delay9);
291 sec_reg_write(iodev, S2MPS11_REG_RAMP_BUCK, ramp_reg);
292
293 for (i = 0; i < S2MPS11_REGULATOR_MAX; i++) {
294
295 config.dev = &pdev->dev;
296 config.regmap = iodev->regmap;
297 config.init_data = pdata->regulators[i].initdata;
298 config.driver_data = s2mps11;
299
300 rdev[i] = regulator_register(&regulators[i], &config);
301 if (IS_ERR(rdev[i])) {
302 ret = PTR_ERR(rdev[i]);
303 dev_err(&pdev->dev, "regulator init failed for %d\n",
304 i);
305 rdev[i] = NULL;
306 goto err;
307 }
308 }
309
310 return 0;
311err:
312 for (i = 0; i < S2MPS11_REGULATOR_MAX; i++)
313 if (rdev[i])
314 regulator_unregister(rdev[i]);
315
316 return ret;
317}
318
319static int __devexit s2mps11_pmic_remove(struct platform_device *pdev)
320{
321 struct s2mps11_info *s2mps11 = platform_get_drvdata(pdev);
322 struct regulator_dev **rdev = s2mps11->rdev;
323 int i;
324
325 for (i = 0; i < S2MPS11_REGULATOR_MAX; i++)
326 if (rdev[i])
327 regulator_unregister(rdev[i]);
328
329 return 0;
330}
331
332static const struct platform_device_id s2mps11_pmic_id[] = {
333 { "s2mps11-pmic", 0},
334 { },
335};
336MODULE_DEVICE_TABLE(platform, s2mps11_pmic_id);
337
338static struct platform_driver s2mps11_pmic_driver = {
339 .driver = {
340 .name = "s2mps11-pmic",
341 .owner = THIS_MODULE,
342 },
343 .probe = s2mps11_pmic_probe,
344 .remove = __devexit_p(s2mps11_pmic_remove),
345 .id_table = s2mps11_pmic_id,
346};
347
348static int __init s2mps11_pmic_init(void)
349{
350 return platform_driver_register(&s2mps11_pmic_driver);
351}
352subsys_initcall(s2mps11_pmic_init);
353
354static void __exit s2mps11_pmic_exit(void)
355{
356 platform_driver_unregister(&s2mps11_pmic_driver);
357}
358module_exit(s2mps11_pmic_exit);
359
360/* Module information */
361MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
362MODULE_DESCRIPTION("SAMSUNG S2MPS11 Regulator Driver");
363MODULE_LICENSE("GPL");
diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c
index 9caadb482178..102287fa7ecb 100644
--- a/drivers/regulator/s5m8767.c
+++ b/drivers/regulator/s5m8767.c
@@ -41,6 +41,7 @@ struct s5m8767_info {
41 u8 buck3_vol[8]; 41 u8 buck3_vol[8];
42 u8 buck4_vol[8]; 42 u8 buck4_vol[8];
43 int buck_gpios[3]; 43 int buck_gpios[3];
44 int buck_ds[3];
44 int buck_gpioindex; 45 int buck_gpioindex;
45}; 46};
46 47
@@ -120,27 +121,6 @@ static const struct s5m_voltage_desc *reg_voltage_map[] = {
120 [S5M8767_BUCK9] = &buck_voltage_val3, 121 [S5M8767_BUCK9] = &buck_voltage_val3,
121}; 122};
122 123
123static int s5m8767_list_voltage(struct regulator_dev *rdev,
124 unsigned int selector)
125{
126 const struct s5m_voltage_desc *desc;
127 int reg_id = rdev_get_id(rdev);
128 int val;
129
130 if (reg_id >= ARRAY_SIZE(reg_voltage_map) || reg_id < 0)
131 return -EINVAL;
132
133 desc = reg_voltage_map[reg_id];
134 if (desc == NULL)
135 return -EINVAL;
136
137 val = desc->min + desc->step * selector;
138 if (val > desc->max)
139 return -EINVAL;
140
141 return val;
142}
143
144static unsigned int s5m8767_opmode_reg[][4] = { 124static unsigned int s5m8767_opmode_reg[][4] = {
145 /* {OFF, ON, LOWPOWER, SUSPEND} */ 125 /* {OFF, ON, LOWPOWER, SUSPEND} */
146 /* LDO1 ... LDO28 */ 126 /* LDO1 ... LDO28 */
@@ -283,17 +263,17 @@ static int s5m8767_get_voltage_register(struct regulator_dev *rdev, int *_reg)
283 reg = S5M8767_REG_BUCK1CTRL2; 263 reg = S5M8767_REG_BUCK1CTRL2;
284 break; 264 break;
285 case S5M8767_BUCK2: 265 case S5M8767_BUCK2:
286 reg = S5M8767_REG_BUCK2DVS1; 266 reg = S5M8767_REG_BUCK2DVS2;
287 if (s5m8767->buck2_gpiodvs) 267 if (s5m8767->buck2_gpiodvs)
288 reg += s5m8767->buck_gpioindex; 268 reg += s5m8767->buck_gpioindex;
289 break; 269 break;
290 case S5M8767_BUCK3: 270 case S5M8767_BUCK3:
291 reg = S5M8767_REG_BUCK3DVS1; 271 reg = S5M8767_REG_BUCK3DVS2;
292 if (s5m8767->buck3_gpiodvs) 272 if (s5m8767->buck3_gpiodvs)
293 reg += s5m8767->buck_gpioindex; 273 reg += s5m8767->buck_gpioindex;
294 break; 274 break;
295 case S5M8767_BUCK4: 275 case S5M8767_BUCK4:
296 reg = S5M8767_REG_BUCK4DVS1; 276 reg = S5M8767_REG_BUCK4DVS2;
297 if (s5m8767->buck4_gpiodvs) 277 if (s5m8767->buck4_gpiodvs)
298 reg += s5m8767->buck_gpioindex; 278 reg += s5m8767->buck_gpioindex;
299 break; 279 break;
@@ -357,32 +337,34 @@ static int s5m8767_convert_voltage_to_sel(
357 return selector; 337 return selector;
358} 338}
359 339
360static inline void s5m8767_set_high(struct s5m8767_info *s5m8767) 340static inline int s5m8767_set_high(struct s5m8767_info *s5m8767)
361{ 341{
362 int temp_index = s5m8767->buck_gpioindex; 342 int temp_index = s5m8767->buck_gpioindex;
363 343
364 gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); 344 gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1);
365 gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); 345 gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1);
366 gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); 346 gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1);
347
348 return 0;
367} 349}
368 350
369static inline void s5m8767_set_low(struct s5m8767_info *s5m8767) 351static inline int s5m8767_set_low(struct s5m8767_info *s5m8767)
370{ 352{
371 int temp_index = s5m8767->buck_gpioindex; 353 int temp_index = s5m8767->buck_gpioindex;
372 354
373 gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1); 355 gpio_set_value(s5m8767->buck_gpios[2], temp_index & 0x1);
374 gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1); 356 gpio_set_value(s5m8767->buck_gpios[1], (temp_index >> 1) & 0x1);
375 gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); 357 gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1);
358
359 return 0;
376} 360}
377 361
378static int s5m8767_set_voltage(struct regulator_dev *rdev, 362static int s5m8767_set_voltage_sel(struct regulator_dev *rdev,
379 int min_uV, int max_uV, unsigned *selector) 363 unsigned selector)
380{ 364{
381 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 365 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev);
382 const struct s5m_voltage_desc *desc;
383 int reg_id = rdev_get_id(rdev); 366 int reg_id = rdev_get_id(rdev);
384 int sel, reg, mask, ret = 0, old_index, index = 0; 367 int reg, mask, ret = 0, old_index, index = 0;
385 u8 val;
386 u8 *buck234_vol = NULL; 368 u8 *buck234_vol = NULL;
387 369
388 switch (reg_id) { 370 switch (reg_id) {
@@ -407,15 +389,9 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
407 return -EINVAL; 389 return -EINVAL;
408 } 390 }
409 391
410 desc = reg_voltage_map[reg_id];
411
412 sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV);
413 if (sel < 0)
414 return sel;
415
416 /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */ 392 /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */
417 if (buck234_vol) { 393 if (buck234_vol) {
418 while (*buck234_vol != sel) { 394 while (*buck234_vol != selector) {
419 buck234_vol++; 395 buck234_vol++;
420 index++; 396 index++;
421 } 397 }
@@ -423,22 +399,16 @@ static int s5m8767_set_voltage(struct regulator_dev *rdev,
423 s5m8767->buck_gpioindex = index; 399 s5m8767->buck_gpioindex = index;
424 400
425 if (index > old_index) 401 if (index > old_index)
426 s5m8767_set_high(s5m8767); 402 return s5m8767_set_high(s5m8767);
427 else 403 else
428 s5m8767_set_low(s5m8767); 404 return s5m8767_set_low(s5m8767);
429 } else { 405 } else {
430 ret = s5m8767_get_voltage_register(rdev, &reg); 406 ret = s5m8767_get_voltage_register(rdev, &reg);
431 if (ret) 407 if (ret)
432 return ret; 408 return ret;
433 409
434 s5m_reg_read(s5m8767->iodev, reg, &val); 410 return s5m_reg_update(s5m8767->iodev, reg, selector, mask);
435 val = (val & ~mask) | sel;
436
437 ret = s5m_reg_write(s5m8767->iodev, reg, val);
438 } 411 }
439
440 *selector = sel;
441 return ret;
442} 412}
443 413
444static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, 414static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev,
@@ -458,15 +428,21 @@ static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev,
458} 428}
459 429
460static struct regulator_ops s5m8767_ops = { 430static struct regulator_ops s5m8767_ops = {
461 .list_voltage = s5m8767_list_voltage, 431 .list_voltage = regulator_list_voltage_linear,
462 .is_enabled = s5m8767_reg_is_enabled, 432 .is_enabled = s5m8767_reg_is_enabled,
463 .enable = s5m8767_reg_enable, 433 .enable = s5m8767_reg_enable,
464 .disable = s5m8767_reg_disable, 434 .disable = s5m8767_reg_disable,
465 .get_voltage_sel = s5m8767_get_voltage_sel, 435 .get_voltage_sel = s5m8767_get_voltage_sel,
466 .set_voltage = s5m8767_set_voltage, 436 .set_voltage_sel = s5m8767_set_voltage_sel,
467 .set_voltage_time_sel = s5m8767_set_voltage_time_sel, 437 .set_voltage_time_sel = s5m8767_set_voltage_time_sel,
468}; 438};
469 439
440static struct regulator_ops s5m8767_buck78_ops = {
441 .is_enabled = s5m8767_reg_is_enabled,
442 .enable = s5m8767_reg_enable,
443 .disable = s5m8767_reg_disable,
444};
445
470#define s5m8767_regulator_desc(_name) { \ 446#define s5m8767_regulator_desc(_name) { \
471 .name = #_name, \ 447 .name = #_name, \
472 .id = S5M8767_##_name, \ 448 .id = S5M8767_##_name, \
@@ -475,6 +451,14 @@ static struct regulator_ops s5m8767_ops = {
475 .owner = THIS_MODULE, \ 451 .owner = THIS_MODULE, \
476} 452}
477 453
454#define s5m8767_regulator_buck78_desc(_name) { \
455 .name = #_name, \
456 .id = S5M8767_##_name, \
457 .ops = &s5m8767_buck78_ops, \
458 .type = REGULATOR_VOLTAGE, \
459 .owner = THIS_MODULE, \
460}
461
478static struct regulator_desc regulators[] = { 462static struct regulator_desc regulators[] = {
479 s5m8767_regulator_desc(LDO1), 463 s5m8767_regulator_desc(LDO1),
480 s5m8767_regulator_desc(LDO2), 464 s5m8767_regulator_desc(LDO2),
@@ -510,8 +494,8 @@ static struct regulator_desc regulators[] = {
510 s5m8767_regulator_desc(BUCK4), 494 s5m8767_regulator_desc(BUCK4),
511 s5m8767_regulator_desc(BUCK5), 495 s5m8767_regulator_desc(BUCK5),
512 s5m8767_regulator_desc(BUCK6), 496 s5m8767_regulator_desc(BUCK6),
513 s5m8767_regulator_desc(BUCK7), 497 s5m8767_regulator_buck78_desc(BUCK7),
514 s5m8767_regulator_desc(BUCK8), 498 s5m8767_regulator_buck78_desc(BUCK8),
515 s5m8767_regulator_desc(BUCK9), 499 s5m8767_regulator_desc(BUCK9),
516}; 500};
517 501
@@ -522,7 +506,7 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
522 struct regulator_config config = { }; 506 struct regulator_config config = { };
523 struct regulator_dev **rdev; 507 struct regulator_dev **rdev;
524 struct s5m8767_info *s5m8767; 508 struct s5m8767_info *s5m8767;
525 int i, ret, size; 509 int i, ret, size, buck_init;
526 510
527 if (!pdata) { 511 if (!pdata) {
528 dev_err(pdev->dev.parent, "Platform data not supplied\n"); 512 dev_err(pdev->dev.parent, "Platform data not supplied\n");
@@ -573,12 +557,37 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
573 s5m8767->buck_gpios[0] = pdata->buck_gpios[0]; 557 s5m8767->buck_gpios[0] = pdata->buck_gpios[0];
574 s5m8767->buck_gpios[1] = pdata->buck_gpios[1]; 558 s5m8767->buck_gpios[1] = pdata->buck_gpios[1];
575 s5m8767->buck_gpios[2] = pdata->buck_gpios[2]; 559 s5m8767->buck_gpios[2] = pdata->buck_gpios[2];
560 s5m8767->buck_ds[0] = pdata->buck_ds[0];
561 s5m8767->buck_ds[1] = pdata->buck_ds[1];
562 s5m8767->buck_ds[2] = pdata->buck_ds[2];
563
576 s5m8767->ramp_delay = pdata->buck_ramp_delay; 564 s5m8767->ramp_delay = pdata->buck_ramp_delay;
577 s5m8767->buck2_ramp = pdata->buck2_ramp_enable; 565 s5m8767->buck2_ramp = pdata->buck2_ramp_enable;
578 s5m8767->buck3_ramp = pdata->buck3_ramp_enable; 566 s5m8767->buck3_ramp = pdata->buck3_ramp_enable;
579 s5m8767->buck4_ramp = pdata->buck4_ramp_enable; 567 s5m8767->buck4_ramp = pdata->buck4_ramp_enable;
580 s5m8767->opmode = pdata->opmode; 568 s5m8767->opmode = pdata->opmode;
581 569
570 buck_init = s5m8767_convert_voltage_to_sel(&buck_voltage_val2,
571 pdata->buck2_init,
572 pdata->buck2_init +
573 buck_voltage_val2.step);
574
575 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK2DVS2, buck_init);
576
577 buck_init = s5m8767_convert_voltage_to_sel(&buck_voltage_val2,
578 pdata->buck3_init,
579 pdata->buck3_init +
580 buck_voltage_val2.step);
581
582 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK3DVS2, buck_init);
583
584 buck_init = s5m8767_convert_voltage_to_sel(&buck_voltage_val2,
585 pdata->buck4_init,
586 pdata->buck4_init +
587 buck_voltage_val2.step);
588
589 s5m_reg_write(s5m8767->iodev, S5M8767_REG_BUCK4DVS2, buck_init);
590
582 for (i = 0; i < 8; i++) { 591 for (i = 0; i < 8; i++) {
583 if (s5m8767->buck2_gpiodvs) { 592 if (s5m8767->buck2_gpiodvs) {
584 s5m8767->buck2_vol[i] = 593 s5m8767->buck2_vol[i] =
@@ -608,48 +617,70 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
608 } 617 }
609 } 618 }
610 619
611 if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs || 620 if (gpio_is_valid(pdata->buck_gpios[0]) &&
612 pdata->buck4_gpiodvs) { 621 gpio_is_valid(pdata->buck_gpios[1]) &&
613 if (gpio_is_valid(pdata->buck_gpios[0]) && 622 gpio_is_valid(pdata->buck_gpios[2])) {
614 gpio_is_valid(pdata->buck_gpios[1]) && 623 ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[0],
615 gpio_is_valid(pdata->buck_gpios[2])) { 624 "S5M8767 SET1");
616 ret = gpio_request(pdata->buck_gpios[0], 625 if (ret)
617 "S5M8767 SET1");
618 if (ret == -EBUSY)
619 dev_warn(&pdev->dev, "Duplicated gpio request for SET1\n");
620
621 ret = gpio_request(pdata->buck_gpios[1],
622 "S5M8767 SET2");
623 if (ret == -EBUSY)
624 dev_warn(&pdev->dev, "Duplicated gpio request for SET2\n");
625
626 ret = gpio_request(pdata->buck_gpios[2],
627 "S5M8767 SET3");
628 if (ret == -EBUSY)
629 dev_warn(&pdev->dev, "Duplicated gpio request for SET3\n");
630 /* SET1 GPIO */
631 gpio_direction_output(pdata->buck_gpios[0],
632 (s5m8767->buck_gpioindex >> 2) & 0x1);
633 /* SET2 GPIO */
634 gpio_direction_output(pdata->buck_gpios[1],
635 (s5m8767->buck_gpioindex >> 1) & 0x1);
636 /* SET3 GPIO */
637 gpio_direction_output(pdata->buck_gpios[2],
638 (s5m8767->buck_gpioindex >> 0) & 0x1);
639 ret = 0;
640 } else {
641 dev_err(&pdev->dev, "GPIO NOT VALID\n");
642 ret = -EINVAL;
643 return ret; 626 return ret;
644 } 627
628 ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[1],
629 "S5M8767 SET2");
630 if (ret)
631 return ret;
632
633 ret = devm_gpio_request(&pdev->dev, pdata->buck_gpios[2],
634 "S5M8767 SET3");
635 if (ret)
636 return ret;
637
638 /* SET1 GPIO */
639 gpio_direction_output(pdata->buck_gpios[0],
640 (s5m8767->buck_gpioindex >> 2) & 0x1);
641 /* SET2 GPIO */
642 gpio_direction_output(pdata->buck_gpios[1],
643 (s5m8767->buck_gpioindex >> 1) & 0x1);
644 /* SET3 GPIO */
645 gpio_direction_output(pdata->buck_gpios[2],
646 (s5m8767->buck_gpioindex >> 0) & 0x1);
647 } else {
648 dev_err(&pdev->dev, "GPIO NOT VALID\n");
649 ret = -EINVAL;
650 return ret;
645 } 651 }
646 652
647 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL, 653 ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[0], "S5M8767 DS2");
648 (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1); 654 if (ret)
649 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL, 655 return ret;
650 (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1); 656
651 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL, 657 ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[1], "S5M8767 DS3");
652 (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1), 1 << 1); 658 if (ret)
659 return ret;
660
661 ret = devm_gpio_request(&pdev->dev, pdata->buck_ds[2], "S5M8767 DS4");
662 if (ret)
663 return ret;
664
665 /* DS2 GPIO */
666 gpio_direction_output(pdata->buck_ds[0], 0x0);
667 /* DS3 GPIO */
668 gpio_direction_output(pdata->buck_ds[1], 0x0);
669 /* DS4 GPIO */
670 gpio_direction_output(pdata->buck_ds[2], 0x0);
671
672 if (pdata->buck2_gpiodvs || pdata->buck3_gpiodvs ||
673 pdata->buck4_gpiodvs) {
674 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL,
675 (pdata->buck2_gpiodvs) ? (1 << 1) : (0 << 1),
676 1 << 1);
677 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL,
678 (pdata->buck3_gpiodvs) ? (1 << 1) : (0 << 1),
679 1 << 1);
680 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL,
681 (pdata->buck4_gpiodvs) ? (1 << 1) : (0 << 1),
682 1 << 1);
683 }
653 684
654 /* Initialize GPIO DVS registers */ 685 /* Initialize GPIO DVS registers */
655 for (i = 0; i < 8; i++) { 686 for (i = 0; i < 8; i++) {
@@ -668,9 +699,6 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
668 s5m8767->buck4_vol[i]); 699 s5m8767->buck4_vol[i]);
669 } 700 }
670 } 701 }
671 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK2CTRL, 0x78, 0xff);
672 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK3CTRL, 0x58, 0xff);
673 s5m_reg_update(s5m8767->iodev, S5M8767_REG_BUCK4CTRL, 0x78, 0xff);
674 702
675 if (s5m8767->buck2_ramp) 703 if (s5m8767->buck2_ramp)
676 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08); 704 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 0x08, 0x08);
@@ -684,9 +712,13 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
684 if (s5m8767->buck2_ramp || s5m8767->buck3_ramp 712 if (s5m8767->buck2_ramp || s5m8767->buck3_ramp
685 || s5m8767->buck4_ramp) { 713 || s5m8767->buck4_ramp) {
686 switch (s5m8767->ramp_delay) { 714 switch (s5m8767->ramp_delay) {
687 case 15: 715 case 5:
688 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 716 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
689 0xc0, 0xf0); 717 0x40, 0xf0);
718 break;
719 case 10:
720 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
721 0x90, 0xf0);
690 break; 722 break;
691 case 25: 723 case 25:
692 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP, 724 s5m_reg_update(s5m8767->iodev, S5M8767_REG_DVSRAMP,
@@ -711,9 +743,12 @@ static __devinit int s5m8767_pmic_probe(struct platform_device *pdev)
711 int id = pdata->regulators[i].id; 743 int id = pdata->regulators[i].id;
712 744
713 desc = reg_voltage_map[id]; 745 desc = reg_voltage_map[id];
714 if (desc) 746 if (desc) {
715 regulators[id].n_voltages = 747 regulators[id].n_voltages =
716 (desc->max - desc->min) / desc->step + 1; 748 (desc->max - desc->min) / desc->step + 1;
749 regulators[id].min_uV = desc->min;
750 regulators[id].uV_step = desc->step;
751 }
717 752
718 config.dev = s5m8767->dev; 753 config.dev = s5m8767->dev;
719 config.init_data = pdata->regulators[i].initdata; 754 config.init_data = pdata->regulators[i].initdata;
diff --git a/drivers/regulator/tps6105x-regulator.c b/drivers/regulator/tps6105x-regulator.c
index d840d8440a91..1378409efaec 100644
--- a/drivers/regulator/tps6105x-regulator.c
+++ b/drivers/regulator/tps6105x-regulator.c
@@ -20,7 +20,7 @@
20#include <linux/mfd/core.h> 20#include <linux/mfd/core.h>
21#include <linux/mfd/tps6105x.h> 21#include <linux/mfd/tps6105x.h>
22 22
23static const int tps6105x_voltages[] = { 23static const unsigned int tps6105x_voltages[] = {
24 4500000, 24 4500000,
25 5000000, 25 5000000,
26 5250000, 26 5250000,
@@ -105,22 +105,13 @@ static int tps6105x_regulator_set_voltage_sel(struct regulator_dev *rdev,
105 return 0; 105 return 0;
106} 106}
107 107
108static int tps6105x_regulator_list_voltage(struct regulator_dev *rdev,
109 unsigned selector)
110{
111 if (selector >= ARRAY_SIZE(tps6105x_voltages))
112 return -EINVAL;
113
114 return tps6105x_voltages[selector];
115}
116
117static struct regulator_ops tps6105x_regulator_ops = { 108static struct regulator_ops tps6105x_regulator_ops = {
118 .enable = tps6105x_regulator_enable, 109 .enable = tps6105x_regulator_enable,
119 .disable = tps6105x_regulator_disable, 110 .disable = tps6105x_regulator_disable,
120 .is_enabled = tps6105x_regulator_is_enabled, 111 .is_enabled = tps6105x_regulator_is_enabled,
121 .get_voltage_sel = tps6105x_regulator_get_voltage_sel, 112 .get_voltage_sel = tps6105x_regulator_get_voltage_sel,
122 .set_voltage_sel = tps6105x_regulator_set_voltage_sel, 113 .set_voltage_sel = tps6105x_regulator_set_voltage_sel,
123 .list_voltage = tps6105x_regulator_list_voltage, 114 .list_voltage = regulator_list_voltage_table,
124}; 115};
125 116
126static const struct regulator_desc tps6105x_regulator_desc = { 117static const struct regulator_desc tps6105x_regulator_desc = {
@@ -130,6 +121,7 @@ static const struct regulator_desc tps6105x_regulator_desc = {
130 .id = 0, 121 .id = 0,
131 .owner = THIS_MODULE, 122 .owner = THIS_MODULE,
132 .n_voltages = ARRAY_SIZE(tps6105x_voltages), 123 .n_voltages = ARRAY_SIZE(tps6105x_voltages),
124 .volt_table = tps6105x_voltages,
133}; 125};
134 126
135/* 127/*
diff --git a/drivers/regulator/tps62360-regulator.c b/drivers/regulator/tps62360-regulator.c
index e534269ed44a..68729a7c8709 100644
--- a/drivers/regulator/tps62360-regulator.c
+++ b/drivers/regulator/tps62360-regulator.c
@@ -65,10 +65,8 @@ struct tps62360_chip {
65 struct regulator_desc desc; 65 struct regulator_desc desc;
66 struct regulator_dev *rdev; 66 struct regulator_dev *rdev;
67 struct regmap *regmap; 67 struct regmap *regmap;
68 int chip_id;
69 int vsel0_gpio; 68 int vsel0_gpio;
70 int vsel1_gpio; 69 int vsel1_gpio;
71 int voltage_base;
72 u8 voltage_reg_mask; 70 u8 voltage_reg_mask;
73 bool en_internal_pulldn; 71 bool en_internal_pulldn;
74 bool en_discharge; 72 bool en_discharge;
@@ -76,7 +74,6 @@ struct tps62360_chip {
76 int lru_index[4]; 74 int lru_index[4];
77 int curr_vset_vsel[4]; 75 int curr_vset_vsel[4];
78 int curr_vset_id; 76 int curr_vset_id;
79 int change_uv_per_us;
80}; 77};
81 78
82/* 79/*
@@ -175,23 +172,6 @@ static int tps62360_dcdc_set_voltage_sel(struct regulator_dev *dev,
175 return 0; 172 return 0;
176} 173}
177 174
178static int tps62360_set_voltage_time_sel(struct regulator_dev *rdev,
179 unsigned int old_selector, unsigned int new_selector)
180{
181 struct tps62360_chip *tps = rdev_get_drvdata(rdev);
182 int old_uV, new_uV;
183
184 old_uV = regulator_list_voltage_linear(rdev, old_selector);
185 if (old_uV < 0)
186 return old_uV;
187
188 new_uV = regulator_list_voltage_linear(rdev, new_selector);
189 if (new_uV < 0)
190 return new_uV;
191
192 return DIV_ROUND_UP(abs(old_uV - new_uV), tps->change_uv_per_us);
193}
194
195static int tps62360_set_mode(struct regulator_dev *rdev, unsigned int mode) 175static int tps62360_set_mode(struct regulator_dev *rdev, unsigned int mode)
196{ 176{
197 struct tps62360_chip *tps = rdev_get_drvdata(rdev); 177 struct tps62360_chip *tps = rdev_get_drvdata(rdev);
@@ -258,7 +238,7 @@ static struct regulator_ops tps62360_dcdc_ops = {
258 .set_voltage_sel = tps62360_dcdc_set_voltage_sel, 238 .set_voltage_sel = tps62360_dcdc_set_voltage_sel,
259 .list_voltage = regulator_list_voltage_linear, 239 .list_voltage = regulator_list_voltage_linear,
260 .map_voltage = regulator_map_voltage_linear, 240 .map_voltage = regulator_map_voltage_linear,
261 .set_voltage_time_sel = tps62360_set_voltage_time_sel, 241 .set_voltage_time_sel = regulator_set_voltage_time_sel,
262 .set_mode = tps62360_set_mode, 242 .set_mode = tps62360_set_mode,
263 .get_mode = tps62360_get_mode, 243 .get_mode = tps62360_get_mode,
264}; 244};
@@ -301,7 +281,7 @@ static int __devinit tps62360_init_dcdc(struct tps62360_chip *tps,
301 ramp_ctrl = (ramp_ctrl >> 4) & 0x7; 281 ramp_ctrl = (ramp_ctrl >> 4) & 0x7;
302 282
303 /* ramp mV/us = 32/(2^ramp_ctrl) */ 283 /* ramp mV/us = 32/(2^ramp_ctrl) */
304 tps->change_uv_per_us = DIV_ROUND_UP(32000, BIT(ramp_ctrl)); 284 tps->desc.ramp_delay = DIV_ROUND_UP(32000, BIT(ramp_ctrl));
305 return ret; 285 return ret;
306} 286}
307 287
@@ -408,13 +388,13 @@ static int __devinit tps62360_probe(struct i2c_client *client,
408 switch (chip_id) { 388 switch (chip_id) {
409 case TPS62360: 389 case TPS62360:
410 case TPS62362: 390 case TPS62362:
411 tps->voltage_base = TPS62360_BASE_VOLTAGE; 391 tps->desc.min_uV = TPS62360_BASE_VOLTAGE;
412 tps->voltage_reg_mask = 0x3F; 392 tps->voltage_reg_mask = 0x3F;
413 tps->desc.n_voltages = TPS62360_N_VOLTAGES; 393 tps->desc.n_voltages = TPS62360_N_VOLTAGES;
414 break; 394 break;
415 case TPS62361: 395 case TPS62361:
416 case TPS62363: 396 case TPS62363:
417 tps->voltage_base = TPS62361_BASE_VOLTAGE; 397 tps->desc.min_uV = TPS62361_BASE_VOLTAGE;
418 tps->voltage_reg_mask = 0x7F; 398 tps->voltage_reg_mask = 0x7F;
419 tps->desc.n_voltages = TPS62361_N_VOLTAGES; 399 tps->desc.n_voltages = TPS62361_N_VOLTAGES;
420 break; 400 break;
@@ -427,7 +407,6 @@ static int __devinit tps62360_probe(struct i2c_client *client,
427 tps->desc.ops = &tps62360_dcdc_ops; 407 tps->desc.ops = &tps62360_dcdc_ops;
428 tps->desc.type = REGULATOR_VOLTAGE; 408 tps->desc.type = REGULATOR_VOLTAGE;
429 tps->desc.owner = THIS_MODULE; 409 tps->desc.owner = THIS_MODULE;
430 tps->desc.min_uV = tps->voltage_base;
431 tps->desc.uV_step = 10000; 410 tps->desc.uV_step = 10000;
432 411
433 tps->regmap = devm_regmap_init_i2c(client, &tps62360_regmap_config); 412 tps->regmap = devm_regmap_init_i2c(client, &tps62360_regmap_config);
@@ -449,24 +428,24 @@ static int __devinit tps62360_probe(struct i2c_client *client,
449 int gpio_flags; 428 int gpio_flags;
450 gpio_flags = (pdata->vsel0_def_state) ? 429 gpio_flags = (pdata->vsel0_def_state) ?
451 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; 430 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
452 ret = gpio_request_one(tps->vsel0_gpio, 431 ret = devm_gpio_request_one(&client->dev, tps->vsel0_gpio,
453 gpio_flags, "tps62360-vsel0"); 432 gpio_flags, "tps62360-vsel0");
454 if (ret) { 433 if (ret) {
455 dev_err(&client->dev, 434 dev_err(&client->dev,
456 "%s(): Could not obtain vsel0 GPIO %d: %d\n", 435 "%s(): Could not obtain vsel0 GPIO %d: %d\n",
457 __func__, tps->vsel0_gpio, ret); 436 __func__, tps->vsel0_gpio, ret);
458 goto err_gpio0; 437 return ret;
459 } 438 }
460 439
461 gpio_flags = (pdata->vsel1_def_state) ? 440 gpio_flags = (pdata->vsel1_def_state) ?
462 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; 441 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
463 ret = gpio_request_one(tps->vsel1_gpio, 442 ret = devm_gpio_request_one(&client->dev, tps->vsel1_gpio,
464 gpio_flags, "tps62360-vsel1"); 443 gpio_flags, "tps62360-vsel1");
465 if (ret) { 444 if (ret) {
466 dev_err(&client->dev, 445 dev_err(&client->dev,
467 "%s(): Could not obtain vsel1 GPIO %d: %d\n", 446 "%s(): Could not obtain vsel1 GPIO %d: %d\n",
468 __func__, tps->vsel1_gpio, ret); 447 __func__, tps->vsel1_gpio, ret);
469 goto err_gpio1; 448 return ret;
470 } 449 }
471 tps->valid_gpios = true; 450 tps->valid_gpios = true;
472 451
@@ -484,7 +463,7 @@ static int __devinit tps62360_probe(struct i2c_client *client,
484 if (ret < 0) { 463 if (ret < 0) {
485 dev_err(tps->dev, "%s(): Init failed with err = %d\n", 464 dev_err(tps->dev, "%s(): Init failed with err = %d\n",
486 __func__, ret); 465 __func__, ret);
487 goto err_init; 466 return ret;
488 } 467 }
489 468
490 config.dev = &client->dev; 469 config.dev = &client->dev;
@@ -498,21 +477,11 @@ static int __devinit tps62360_probe(struct i2c_client *client,
498 dev_err(tps->dev, 477 dev_err(tps->dev,
499 "%s(): regulator register failed with err %s\n", 478 "%s(): regulator register failed with err %s\n",
500 __func__, id->name); 479 __func__, id->name);
501 ret = PTR_ERR(rdev); 480 return PTR_ERR(rdev);
502 goto err_init;
503 } 481 }
504 482
505 tps->rdev = rdev; 483 tps->rdev = rdev;
506 return 0; 484 return 0;
507
508err_init:
509 if (gpio_is_valid(tps->vsel1_gpio))
510 gpio_free(tps->vsel1_gpio);
511err_gpio1:
512 if (gpio_is_valid(tps->vsel0_gpio))
513 gpio_free(tps->vsel0_gpio);
514err_gpio0:
515 return ret;
516} 485}
517 486
518/** 487/**
@@ -525,12 +494,6 @@ static int __devexit tps62360_remove(struct i2c_client *client)
525{ 494{
526 struct tps62360_chip *tps = i2c_get_clientdata(client); 495 struct tps62360_chip *tps = i2c_get_clientdata(client);
527 496
528 if (gpio_is_valid(tps->vsel1_gpio))
529 gpio_free(tps->vsel1_gpio);
530
531 if (gpio_is_valid(tps->vsel0_gpio))
532 gpio_free(tps->vsel0_gpio);
533
534 regulator_unregister(tps->rdev); 497 regulator_unregister(tps->rdev);
535 return 0; 498 return 0;
536} 499}
diff --git a/drivers/regulator/tps65023-regulator.c b/drivers/regulator/tps65023-regulator.c
index 8f1be8586c72..6998d579d07b 100644
--- a/drivers/regulator/tps65023-regulator.c
+++ b/drivers/regulator/tps65023-regulator.c
@@ -69,10 +69,6 @@
69#define TPS65023_REG_CTRL2_DCDC1 BIT(1) 69#define TPS65023_REG_CTRL2_DCDC1 BIT(1)
70#define TPS65023_REG_CTRL2_DCDC3 BIT(0) 70#define TPS65023_REG_CTRL2_DCDC3 BIT(0)
71 71
72/* LDO_CTRL bitfields */
73#define TPS65023_LDO_CTRL_LDOx_SHIFT(ldo_id) ((ldo_id)*4)
74#define TPS65023_LDO_CTRL_LDOx_MASK(ldo_id) (0x07 << ((ldo_id)*4))
75
76/* Number of step-down converters available */ 72/* Number of step-down converters available */
77#define TPS65023_NUM_DCDC 3 73#define TPS65023_NUM_DCDC 3
78/* Number of LDO voltage regulators available */ 74/* Number of LDO voltage regulators available */
@@ -91,48 +87,53 @@
91#define TPS65023_MAX_REG_ID TPS65023_LDO_2 87#define TPS65023_MAX_REG_ID TPS65023_LDO_2
92 88
93/* Supported voltage values for regulators */ 89/* Supported voltage values for regulators */
94static const u16 VCORE_VSEL_table[] = { 90static const unsigned int VCORE_VSEL_table[] = {
95 800, 825, 850, 875, 91 800000, 825000, 850000, 875000,
96 900, 925, 950, 975, 92 900000, 925000, 950000, 975000,
97 1000, 1025, 1050, 1075, 93 1000000, 1025000, 1050000, 1075000,
98 1100, 1125, 1150, 1175, 94 1100000, 1125000, 1150000, 1175000,
99 1200, 1225, 1250, 1275, 95 1200000, 1225000, 1250000, 1275000,
100 1300, 1325, 1350, 1375, 96 1300000, 1325000, 1350000, 1375000,
101 1400, 1425, 1450, 1475, 97 1400000, 1425000, 1450000, 1475000,
102 1500, 1525, 1550, 1600, 98 1500000, 1525000, 1550000, 1600000,
99};
100
101static const unsigned int DCDC_FIXED_3300000_VSEL_table[] = {
102 3300000,
103};
104
105static const unsigned int DCDC_FIXED_1800000_VSEL_table[] = {
106 1800000,
103}; 107};
104 108
105/* Supported voltage values for LDO regulators for tps65020 */ 109/* Supported voltage values for LDO regulators for tps65020 */
106static const u16 TPS65020_LDO1_VSEL_table[] = { 110static const unsigned int TPS65020_LDO1_VSEL_table[] = {
107 1000, 1050, 1100, 1300, 111 1000000, 1050000, 1100000, 1300000,
108 1800, 2500, 3000, 3300, 112 1800000, 2500000, 3000000, 3300000,
109}; 113};
110 114
111static const u16 TPS65020_LDO2_VSEL_table[] = { 115static const unsigned int TPS65020_LDO2_VSEL_table[] = {
112 1000, 1050, 1100, 1300, 116 1000000, 1050000, 1100000, 1300000,
113 1800, 2500, 3000, 3300, 117 1800000, 2500000, 3000000, 3300000,
114}; 118};
115 119
116/* Supported voltage values for LDO regulators 120/* Supported voltage values for LDO regulators
117 * for tps65021 and tps65023 */ 121 * for tps65021 and tps65023 */
118static const u16 TPS65023_LDO1_VSEL_table[] = { 122static const unsigned int TPS65023_LDO1_VSEL_table[] = {
119 1000, 1100, 1300, 1800, 123 1000000, 1100000, 1300000, 1800000,
120 2200, 2600, 2800, 3150, 124 2200000, 2600000, 2800000, 3150000,
121}; 125};
122 126
123static const u16 TPS65023_LDO2_VSEL_table[] = { 127static const unsigned int TPS65023_LDO2_VSEL_table[] = {
124 1050, 1200, 1300, 1800, 128 1050000, 1200000, 1300000, 1800000,
125 2500, 2800, 3000, 3300, 129 2500000, 2800000, 3000000, 3300000,
126}; 130};
127 131
128/* Regulator specific details */ 132/* Regulator specific details */
129struct tps_info { 133struct tps_info {
130 const char *name; 134 const char *name;
131 unsigned min_uV;
132 unsigned max_uV;
133 bool fixed;
134 u8 table_len; 135 u8 table_len;
135 const u16 *table; 136 const unsigned int *table;
136}; 137};
137 138
138/* PMIC details */ 139/* PMIC details */
@@ -150,7 +151,7 @@ struct tps_driver_data {
150 u8 core_regulator; 151 u8 core_regulator;
151}; 152};
152 153
153static int tps65023_dcdc_get_voltage(struct regulator_dev *dev) 154static int tps65023_dcdc_get_voltage_sel(struct regulator_dev *dev)
154{ 155{
155 struct tps_pmic *tps = rdev_get_drvdata(dev); 156 struct tps_pmic *tps = rdev_get_drvdata(dev);
156 int ret; 157 int ret;
@@ -164,9 +165,9 @@ static int tps65023_dcdc_get_voltage(struct regulator_dev *dev)
164 if (ret != 0) 165 if (ret != 0)
165 return ret; 166 return ret;
166 data &= (tps->info[dcdc]->table_len - 1); 167 data &= (tps->info[dcdc]->table_len - 1);
167 return tps->info[dcdc]->table[data] * 1000; 168 return data;
168 } else 169 } else
169 return tps->info[dcdc]->min_uV; 170 return 0;
170} 171}
171 172
172static int tps65023_dcdc_set_voltage_sel(struct regulator_dev *dev, 173static int tps65023_dcdc_set_voltage_sel(struct regulator_dev *dev,
@@ -193,76 +194,14 @@ out:
193 return ret; 194 return ret;
194} 195}
195 196
196static int tps65023_ldo_get_voltage(struct regulator_dev *dev)
197{
198 struct tps_pmic *tps = rdev_get_drvdata(dev);
199 int data, ldo = rdev_get_id(dev);
200 int ret;
201
202 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2)
203 return -EINVAL;
204
205 ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data);
206 if (ret != 0)
207 return ret;
208
209 data >>= (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1));
210 data &= (tps->info[ldo]->table_len - 1);
211 return tps->info[ldo]->table[data] * 1000;
212}
213
214static int tps65023_ldo_set_voltage_sel(struct regulator_dev *dev,
215 unsigned selector)
216{
217 struct tps_pmic *tps = rdev_get_drvdata(dev);
218 int ldo_index = rdev_get_id(dev) - TPS65023_LDO_1;
219
220 return regmap_update_bits(tps->regmap, TPS65023_REG_LDO_CTRL,
221 TPS65023_LDO_CTRL_LDOx_MASK(ldo_index),
222 selector << TPS65023_LDO_CTRL_LDOx_SHIFT(ldo_index));
223}
224
225static int tps65023_dcdc_list_voltage(struct regulator_dev *dev,
226 unsigned selector)
227{
228 struct tps_pmic *tps = rdev_get_drvdata(dev);
229 int dcdc = rdev_get_id(dev);
230
231 if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3)
232 return -EINVAL;
233
234 if (dcdc == tps->core_regulator) {
235 if (selector >= tps->info[dcdc]->table_len)
236 return -EINVAL;
237 else
238 return tps->info[dcdc]->table[selector] * 1000;
239 } else
240 return tps->info[dcdc]->min_uV;
241}
242
243static int tps65023_ldo_list_voltage(struct regulator_dev *dev,
244 unsigned selector)
245{
246 struct tps_pmic *tps = rdev_get_drvdata(dev);
247 int ldo = rdev_get_id(dev);
248
249 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2)
250 return -EINVAL;
251
252 if (selector >= tps->info[ldo]->table_len)
253 return -EINVAL;
254 else
255 return tps->info[ldo]->table[selector] * 1000;
256}
257
258/* Operations permitted on VDCDCx */ 197/* Operations permitted on VDCDCx */
259static struct regulator_ops tps65023_dcdc_ops = { 198static struct regulator_ops tps65023_dcdc_ops = {
260 .is_enabled = regulator_is_enabled_regmap, 199 .is_enabled = regulator_is_enabled_regmap,
261 .enable = regulator_enable_regmap, 200 .enable = regulator_enable_regmap,
262 .disable = regulator_disable_regmap, 201 .disable = regulator_disable_regmap,
263 .get_voltage = tps65023_dcdc_get_voltage, 202 .get_voltage_sel = tps65023_dcdc_get_voltage_sel,
264 .set_voltage_sel = tps65023_dcdc_set_voltage_sel, 203 .set_voltage_sel = tps65023_dcdc_set_voltage_sel,
265 .list_voltage = tps65023_dcdc_list_voltage, 204 .list_voltage = regulator_list_voltage_table,
266}; 205};
267 206
268/* Operations permitted on LDOx */ 207/* Operations permitted on LDOx */
@@ -270,9 +209,9 @@ static struct regulator_ops tps65023_ldo_ops = {
270 .is_enabled = regulator_is_enabled_regmap, 209 .is_enabled = regulator_is_enabled_regmap,
271 .enable = regulator_enable_regmap, 210 .enable = regulator_enable_regmap,
272 .disable = regulator_disable_regmap, 211 .disable = regulator_disable_regmap,
273 .get_voltage = tps65023_ldo_get_voltage, 212 .get_voltage_sel = regulator_get_voltage_sel_regmap,
274 .set_voltage_sel = tps65023_ldo_set_voltage_sel, 213 .set_voltage_sel = regulator_set_voltage_sel_regmap,
275 .list_voltage = tps65023_ldo_list_voltage, 214 .list_voltage = regulator_list_voltage_table,
276}; 215};
277 216
278static struct regmap_config tps65023_regmap_config = { 217static struct regmap_config tps65023_regmap_config = {
@@ -325,19 +264,28 @@ static int __devinit tps_65023_probe(struct i2c_client *client,
325 tps->desc[i].name = info->name; 264 tps->desc[i].name = info->name;
326 tps->desc[i].id = i; 265 tps->desc[i].id = i;
327 tps->desc[i].n_voltages = info->table_len; 266 tps->desc[i].n_voltages = info->table_len;
267 tps->desc[i].volt_table = info->table;
328 tps->desc[i].ops = (i > TPS65023_DCDC_3 ? 268 tps->desc[i].ops = (i > TPS65023_DCDC_3 ?
329 &tps65023_ldo_ops : &tps65023_dcdc_ops); 269 &tps65023_ldo_ops : &tps65023_dcdc_ops);
330 tps->desc[i].type = REGULATOR_VOLTAGE; 270 tps->desc[i].type = REGULATOR_VOLTAGE;
331 tps->desc[i].owner = THIS_MODULE; 271 tps->desc[i].owner = THIS_MODULE;
332 272
333 tps->desc[i].enable_reg = TPS65023_REG_REG_CTRL; 273 tps->desc[i].enable_reg = TPS65023_REG_REG_CTRL;
334 if (i == TPS65023_LDO_1) 274 switch (i) {
275 case TPS65023_LDO_1:
276 tps->desc[i].vsel_reg = TPS65023_REG_LDO_CTRL;
277 tps->desc[i].vsel_mask = 0x07;
335 tps->desc[i].enable_mask = 1 << 1; 278 tps->desc[i].enable_mask = 1 << 1;
336 else if (i == TPS65023_LDO_2) 279 break;
280 case TPS65023_LDO_2:
281 tps->desc[i].vsel_reg = TPS65023_REG_LDO_CTRL;
282 tps->desc[i].vsel_mask = 0x70;
337 tps->desc[i].enable_mask = 1 << 2; 283 tps->desc[i].enable_mask = 1 << 2;
338 else /* DCDCx */ 284 break;
285 default: /* DCDCx */
339 tps->desc[i].enable_mask = 286 tps->desc[i].enable_mask =
340 1 << (TPS65023_NUM_REGULATOR - i); 287 1 << (TPS65023_NUM_REGULATOR - i);
288 }
341 289
342 config.dev = &client->dev; 290 config.dev = &client->dev;
343 config.init_data = init_data; 291 config.init_data = init_data;
@@ -384,35 +332,26 @@ static int __devexit tps_65023_remove(struct i2c_client *client)
384static const struct tps_info tps65020_regs[] = { 332static const struct tps_info tps65020_regs[] = {
385 { 333 {
386 .name = "VDCDC1", 334 .name = "VDCDC1",
387 .min_uV = 3300000, 335 .table_len = ARRAY_SIZE(DCDC_FIXED_3300000_VSEL_table),
388 .max_uV = 3300000, 336 .table = DCDC_FIXED_3300000_VSEL_table,
389 .fixed = 1,
390 }, 337 },
391 { 338 {
392 .name = "VDCDC2", 339 .name = "VDCDC2",
393 .min_uV = 1800000, 340 .table_len = ARRAY_SIZE(DCDC_FIXED_1800000_VSEL_table),
394 .max_uV = 1800000, 341 .table = DCDC_FIXED_1800000_VSEL_table,
395 .fixed = 1,
396 }, 342 },
397 { 343 {
398 .name = "VDCDC3", 344 .name = "VDCDC3",
399 .min_uV = 800000,
400 .max_uV = 1600000,
401 .table_len = ARRAY_SIZE(VCORE_VSEL_table), 345 .table_len = ARRAY_SIZE(VCORE_VSEL_table),
402 .table = VCORE_VSEL_table, 346 .table = VCORE_VSEL_table,
403 }, 347 },
404
405 { 348 {
406 .name = "LDO1", 349 .name = "LDO1",
407 .min_uV = 1000000,
408 .max_uV = 3150000,
409 .table_len = ARRAY_SIZE(TPS65020_LDO1_VSEL_table), 350 .table_len = ARRAY_SIZE(TPS65020_LDO1_VSEL_table),
410 .table = TPS65020_LDO1_VSEL_table, 351 .table = TPS65020_LDO1_VSEL_table,
411 }, 352 },
412 { 353 {
413 .name = "LDO2", 354 .name = "LDO2",
414 .min_uV = 1050000,
415 .max_uV = 3300000,
416 .table_len = ARRAY_SIZE(TPS65020_LDO2_VSEL_table), 355 .table_len = ARRAY_SIZE(TPS65020_LDO2_VSEL_table),
417 .table = TPS65020_LDO2_VSEL_table, 356 .table = TPS65020_LDO2_VSEL_table,
418 }, 357 },
@@ -421,34 +360,26 @@ static const struct tps_info tps65020_regs[] = {
421static const struct tps_info tps65021_regs[] = { 360static const struct tps_info tps65021_regs[] = {
422 { 361 {
423 .name = "VDCDC1", 362 .name = "VDCDC1",
424 .min_uV = 3300000, 363 .table_len = ARRAY_SIZE(DCDC_FIXED_3300000_VSEL_table),
425 .max_uV = 3300000, 364 .table = DCDC_FIXED_3300000_VSEL_table,
426 .fixed = 1,
427 }, 365 },
428 { 366 {
429 .name = "VDCDC2", 367 .name = "VDCDC2",
430 .min_uV = 1800000, 368 .table_len = ARRAY_SIZE(DCDC_FIXED_1800000_VSEL_table),
431 .max_uV = 1800000, 369 .table = DCDC_FIXED_1800000_VSEL_table,
432 .fixed = 1,
433 }, 370 },
434 { 371 {
435 .name = "VDCDC3", 372 .name = "VDCDC3",
436 .min_uV = 800000,
437 .max_uV = 1600000,
438 .table_len = ARRAY_SIZE(VCORE_VSEL_table), 373 .table_len = ARRAY_SIZE(VCORE_VSEL_table),
439 .table = VCORE_VSEL_table, 374 .table = VCORE_VSEL_table,
440 }, 375 },
441 { 376 {
442 .name = "LDO1", 377 .name = "LDO1",
443 .min_uV = 1000000,
444 .max_uV = 3150000,
445 .table_len = ARRAY_SIZE(TPS65023_LDO1_VSEL_table), 378 .table_len = ARRAY_SIZE(TPS65023_LDO1_VSEL_table),
446 .table = TPS65023_LDO1_VSEL_table, 379 .table = TPS65023_LDO1_VSEL_table,
447 }, 380 },
448 { 381 {
449 .name = "LDO2", 382 .name = "LDO2",
450 .min_uV = 1050000,
451 .max_uV = 3300000,
452 .table_len = ARRAY_SIZE(TPS65023_LDO2_VSEL_table), 383 .table_len = ARRAY_SIZE(TPS65023_LDO2_VSEL_table),
453 .table = TPS65023_LDO2_VSEL_table, 384 .table = TPS65023_LDO2_VSEL_table,
454 }, 385 },
@@ -457,34 +388,26 @@ static const struct tps_info tps65021_regs[] = {
457static const struct tps_info tps65023_regs[] = { 388static const struct tps_info tps65023_regs[] = {
458 { 389 {
459 .name = "VDCDC1", 390 .name = "VDCDC1",
460 .min_uV = 800000,
461 .max_uV = 1600000,
462 .table_len = ARRAY_SIZE(VCORE_VSEL_table), 391 .table_len = ARRAY_SIZE(VCORE_VSEL_table),
463 .table = VCORE_VSEL_table, 392 .table = VCORE_VSEL_table,
464 }, 393 },
465 { 394 {
466 .name = "VDCDC2", 395 .name = "VDCDC2",
467 .min_uV = 3300000, 396 .table_len = ARRAY_SIZE(DCDC_FIXED_3300000_VSEL_table),
468 .max_uV = 3300000, 397 .table = DCDC_FIXED_3300000_VSEL_table,
469 .fixed = 1,
470 }, 398 },
471 { 399 {
472 .name = "VDCDC3", 400 .name = "VDCDC3",
473 .min_uV = 1800000, 401 .table_len = ARRAY_SIZE(DCDC_FIXED_1800000_VSEL_table),
474 .max_uV = 1800000, 402 .table = DCDC_FIXED_1800000_VSEL_table,
475 .fixed = 1,
476 }, 403 },
477 { 404 {
478 .name = "LDO1", 405 .name = "LDO1",
479 .min_uV = 1000000,
480 .max_uV = 3150000,
481 .table_len = ARRAY_SIZE(TPS65023_LDO1_VSEL_table), 406 .table_len = ARRAY_SIZE(TPS65023_LDO1_VSEL_table),
482 .table = TPS65023_LDO1_VSEL_table, 407 .table = TPS65023_LDO1_VSEL_table,
483 }, 408 },
484 { 409 {
485 .name = "LDO2", 410 .name = "LDO2",
486 .min_uV = 1050000,
487 .max_uV = 3300000,
488 .table_len = ARRAY_SIZE(TPS65023_LDO2_VSEL_table), 411 .table_len = ARRAY_SIZE(TPS65023_LDO2_VSEL_table),
489 .table = TPS65023_LDO2_VSEL_table, 412 .table = TPS65023_LDO2_VSEL_table,
490 }, 413 },
diff --git a/drivers/regulator/tps6507x-regulator.c b/drivers/regulator/tps6507x-regulator.c
index da38be1016aa..07d01ccdf308 100644
--- a/drivers/regulator/tps6507x-regulator.c
+++ b/drivers/regulator/tps6507x-regulator.c
@@ -43,58 +43,40 @@
43/* Number of total regulators available */ 43/* Number of total regulators available */
44#define TPS6507X_NUM_REGULATOR (TPS6507X_NUM_DCDC + TPS6507X_NUM_LDO) 44#define TPS6507X_NUM_REGULATOR (TPS6507X_NUM_DCDC + TPS6507X_NUM_LDO)
45 45
46/* Supported voltage values for regulators (in milliVolts) */ 46/* Supported voltage values for regulators (in microVolts) */
47static const u16 VDCDCx_VSEL_table[] = { 47static const unsigned int VDCDCx_VSEL_table[] = {
48 725, 750, 775, 800, 48 725000, 750000, 775000, 800000,
49 825, 850, 875, 900, 49 825000, 850000, 875000, 900000,
50 925, 950, 975, 1000, 50 925000, 950000, 975000, 1000000,
51 1025, 1050, 1075, 1100, 51 1025000, 1050000, 1075000, 1100000,
52 1125, 1150, 1175, 1200, 52 1125000, 1150000, 1175000, 1200000,
53 1225, 1250, 1275, 1300, 53 1225000, 1250000, 1275000, 1300000,
54 1325, 1350, 1375, 1400, 54 1325000, 1350000, 1375000, 1400000,
55 1425, 1450, 1475, 1500, 55 1425000, 1450000, 1475000, 1500000,
56 1550, 1600, 1650, 1700, 56 1550000, 1600000, 1650000, 1700000,
57 1750, 1800, 1850, 1900, 57 1750000, 1800000, 1850000, 1900000,
58 1950, 2000, 2050, 2100, 58 1950000, 2000000, 2050000, 2100000,
59 2150, 2200, 2250, 2300, 59 2150000, 2200000, 2250000, 2300000,
60 2350, 2400, 2450, 2500, 60 2350000, 2400000, 2450000, 2500000,
61 2550, 2600, 2650, 2700, 61 2550000, 2600000, 2650000, 2700000,
62 2750, 2800, 2850, 2900, 62 2750000, 2800000, 2850000, 2900000,
63 3000, 3100, 3200, 3300, 63 3000000, 3100000, 3200000, 3300000,
64}; 64};
65 65
66static const u16 LDO1_VSEL_table[] = { 66static const unsigned int LDO1_VSEL_table[] = {
67 1000, 1100, 1200, 1250, 67 1000000, 1100000, 1200000, 1250000,
68 1300, 1350, 1400, 1500, 68 1300000, 1350000, 1400000, 1500000,
69 1600, 1800, 2500, 2750, 69 1600000, 1800000, 2500000, 2750000,
70 2800, 3000, 3100, 3300, 70 2800000, 3000000, 3100000, 3300000,
71}; 71};
72 72
73static const u16 LDO2_VSEL_table[] = { 73/* The voltage mapping table for LDO2 is the same as VDCDCx */
74 725, 750, 775, 800, 74#define LDO2_VSEL_table VDCDCx_VSEL_table
75 825, 850, 875, 900,
76 925, 950, 975, 1000,
77 1025, 1050, 1075, 1100,
78 1125, 1150, 1175, 1200,
79 1225, 1250, 1275, 1300,
80 1325, 1350, 1375, 1400,
81 1425, 1450, 1475, 1500,
82 1550, 1600, 1650, 1700,
83 1750, 1800, 1850, 1900,
84 1950, 2000, 2050, 2100,
85 2150, 2200, 2250, 2300,
86 2350, 2400, 2450, 2500,
87 2550, 2600, 2650, 2700,
88 2750, 2800, 2850, 2900,
89 3000, 3100, 3200, 3300,
90};
91 75
92struct tps_info { 76struct tps_info {
93 const char *name; 77 const char *name;
94 unsigned min_uV;
95 unsigned max_uV;
96 u8 table_len; 78 u8 table_len;
97 const u16 *table; 79 const unsigned int *table;
98 80
99 /* Does DCDC high or the low register defines output voltage? */ 81 /* Does DCDC high or the low register defines output voltage? */
100 bool defdcdc_default; 82 bool defdcdc_default;
@@ -103,36 +85,26 @@ struct tps_info {
103static struct tps_info tps6507x_pmic_regs[] = { 85static struct tps_info tps6507x_pmic_regs[] = {
104 { 86 {
105 .name = "VDCDC1", 87 .name = "VDCDC1",
106 .min_uV = 725000,
107 .max_uV = 3300000,
108 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 88 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table),
109 .table = VDCDCx_VSEL_table, 89 .table = VDCDCx_VSEL_table,
110 }, 90 },
111 { 91 {
112 .name = "VDCDC2", 92 .name = "VDCDC2",
113 .min_uV = 725000,
114 .max_uV = 3300000,
115 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 93 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table),
116 .table = VDCDCx_VSEL_table, 94 .table = VDCDCx_VSEL_table,
117 }, 95 },
118 { 96 {
119 .name = "VDCDC3", 97 .name = "VDCDC3",
120 .min_uV = 725000,
121 .max_uV = 3300000,
122 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 98 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table),
123 .table = VDCDCx_VSEL_table, 99 .table = VDCDCx_VSEL_table,
124 }, 100 },
125 { 101 {
126 .name = "LDO1", 102 .name = "LDO1",
127 .min_uV = 1000000,
128 .max_uV = 3300000,
129 .table_len = ARRAY_SIZE(LDO1_VSEL_table), 103 .table_len = ARRAY_SIZE(LDO1_VSEL_table),
130 .table = LDO1_VSEL_table, 104 .table = LDO1_VSEL_table,
131 }, 105 },
132 { 106 {
133 .name = "LDO2", 107 .name = "LDO2",
134 .min_uV = 725000,
135 .max_uV = 3300000,
136 .table_len = ARRAY_SIZE(LDO2_VSEL_table), 108 .table_len = ARRAY_SIZE(LDO2_VSEL_table),
137 .table = LDO2_VSEL_table, 109 .table = LDO2_VSEL_table,
138 }, 110 },
@@ -375,28 +347,13 @@ static int tps6507x_pmic_set_voltage_sel(struct regulator_dev *dev,
375 return tps6507x_pmic_reg_write(tps, reg, data); 347 return tps6507x_pmic_reg_write(tps, reg, data);
376} 348}
377 349
378static int tps6507x_pmic_list_voltage(struct regulator_dev *dev,
379 unsigned selector)
380{
381 struct tps6507x_pmic *tps = rdev_get_drvdata(dev);
382 int rid = rdev_get_id(dev);
383
384 if (rid < TPS6507X_DCDC_1 || rid > TPS6507X_LDO_2)
385 return -EINVAL;
386
387 if (selector >= tps->info[rid]->table_len)
388 return -EINVAL;
389 else
390 return tps->info[rid]->table[selector] * 1000;
391}
392
393static struct regulator_ops tps6507x_pmic_ops = { 350static struct regulator_ops tps6507x_pmic_ops = {
394 .is_enabled = tps6507x_pmic_is_enabled, 351 .is_enabled = tps6507x_pmic_is_enabled,
395 .enable = tps6507x_pmic_enable, 352 .enable = tps6507x_pmic_enable,
396 .disable = tps6507x_pmic_disable, 353 .disable = tps6507x_pmic_disable,
397 .get_voltage_sel = tps6507x_pmic_get_voltage_sel, 354 .get_voltage_sel = tps6507x_pmic_get_voltage_sel,
398 .set_voltage_sel = tps6507x_pmic_set_voltage_sel, 355 .set_voltage_sel = tps6507x_pmic_set_voltage_sel,
399 .list_voltage = tps6507x_pmic_list_voltage, 356 .list_voltage = regulator_list_voltage_table,
400}; 357};
401 358
402static __devinit int tps6507x_pmic_probe(struct platform_device *pdev) 359static __devinit int tps6507x_pmic_probe(struct platform_device *pdev)
@@ -449,6 +406,7 @@ static __devinit int tps6507x_pmic_probe(struct platform_device *pdev)
449 tps->desc[i].name = info->name; 406 tps->desc[i].name = info->name;
450 tps->desc[i].id = i; 407 tps->desc[i].id = i;
451 tps->desc[i].n_voltages = info->table_len; 408 tps->desc[i].n_voltages = info->table_len;
409 tps->desc[i].volt_table = info->table;
452 tps->desc[i].ops = &tps6507x_pmic_ops; 410 tps->desc[i].ops = &tps6507x_pmic_ops;
453 tps->desc[i].type = REGULATOR_VOLTAGE; 411 tps->desc[i].type = REGULATOR_VOLTAGE;
454 tps->desc[i].owner = THIS_MODULE; 412 tps->desc[i].owner = THIS_MODULE;
diff --git a/drivers/regulator/tps65217-regulator.c b/drivers/regulator/tps65217-regulator.c
index 9d371d2cbcae..6caa222af77a 100644
--- a/drivers/regulator/tps65217-regulator.c
+++ b/drivers/regulator/tps65217-regulator.c
@@ -26,7 +26,7 @@
26#include <linux/regulator/machine.h> 26#include <linux/regulator/machine.h>
27#include <linux/mfd/tps65217.h> 27#include <linux/mfd/tps65217.h>
28 28
29#define TPS65217_REGULATOR(_name, _id, _ops, _n) \ 29#define TPS65217_REGULATOR(_name, _id, _ops, _n, _vr, _vm, _em, _t) \
30 { \ 30 { \
31 .name = _name, \ 31 .name = _name, \
32 .id = _id, \ 32 .id = _id, \
@@ -34,23 +34,23 @@
34 .n_voltages = _n, \ 34 .n_voltages = _n, \
35 .type = REGULATOR_VOLTAGE, \ 35 .type = REGULATOR_VOLTAGE, \
36 .owner = THIS_MODULE, \ 36 .owner = THIS_MODULE, \
37 .vsel_reg = _vr, \
38 .vsel_mask = _vm, \
39 .enable_reg = TPS65217_REG_ENABLE, \
40 .enable_mask = _em, \
41 .volt_table = _t, \
37 } \ 42 } \
38 43
39#define TPS65217_INFO(_nm, _min, _max, _f1, _f2, _t, _n, _em, _vr, _vm) \ 44#define TPS65217_INFO(_nm, _min, _max, _f1, _f2) \
40 { \ 45 { \
41 .name = _nm, \ 46 .name = _nm, \
42 .min_uV = _min, \ 47 .min_uV = _min, \
43 .max_uV = _max, \ 48 .max_uV = _max, \
44 .vsel_to_uv = _f1, \ 49 .vsel_to_uv = _f1, \
45 .uv_to_vsel = _f2, \ 50 .uv_to_vsel = _f2, \
46 .table = _t, \
47 .table_len = _n, \
48 .enable_mask = _em, \
49 .set_vout_reg = _vr, \
50 .set_vout_mask = _vm, \
51 } 51 }
52 52
53static const int LDO1_VSEL_table[] = { 53static const unsigned int LDO1_VSEL_table[] = {
54 1000000, 1100000, 1200000, 1250000, 54 1000000, 1100000, 1200000, 1250000,
55 1300000, 1350000, 1400000, 1500000, 55 1300000, 1350000, 1400000, 1500000,
56 1600000, 1800000, 2500000, 2750000, 56 1600000, 1800000, 2500000, 2750000,
@@ -78,7 +78,7 @@ static int tps65217_vsel_to_uv1(unsigned int vsel)
78 78
79static int tps65217_uv_to_vsel1(int uV, unsigned int *vsel) 79static int tps65217_uv_to_vsel1(int uV, unsigned int *vsel)
80{ 80{
81 if ((uV < 0) && (uV > 3300000)) 81 if (uV < 0 || uV > 3300000)
82 return -EINVAL; 82 return -EINVAL;
83 83
84 if (uV <= 1500000) 84 if (uV <= 1500000)
@@ -112,7 +112,7 @@ static int tps65217_vsel_to_uv2(unsigned int vsel)
112 112
113static int tps65217_uv_to_vsel2(int uV, unsigned int *vsel) 113static int tps65217_uv_to_vsel2(int uV, unsigned int *vsel)
114{ 114{
115 if ((uV < 0) && (uV > 3300000)) 115 if (uV < 0 || uV > 3300000)
116 return -EINVAL; 116 return -EINVAL;
117 117
118 if (uV <= 1900000) 118 if (uV <= 1900000)
@@ -127,46 +127,20 @@ static int tps65217_uv_to_vsel2(int uV, unsigned int *vsel)
127 127
128static struct tps_info tps65217_pmic_regs[] = { 128static struct tps_info tps65217_pmic_regs[] = {
129 TPS65217_INFO("DCDC1", 900000, 1800000, tps65217_vsel_to_uv1, 129 TPS65217_INFO("DCDC1", 900000, 1800000, tps65217_vsel_to_uv1,
130 tps65217_uv_to_vsel1, NULL, 64, TPS65217_ENABLE_DC1_EN, 130 tps65217_uv_to_vsel1),
131 TPS65217_REG_DEFDCDC1, TPS65217_DEFDCDCX_DCDC_MASK),
132 TPS65217_INFO("DCDC2", 900000, 3300000, tps65217_vsel_to_uv1, 131 TPS65217_INFO("DCDC2", 900000, 3300000, tps65217_vsel_to_uv1,
133 tps65217_uv_to_vsel1, NULL, 64, TPS65217_ENABLE_DC2_EN, 132 tps65217_uv_to_vsel1),
134 TPS65217_REG_DEFDCDC2, TPS65217_DEFDCDCX_DCDC_MASK),
135 TPS65217_INFO("DCDC3", 900000, 1500000, tps65217_vsel_to_uv1, 133 TPS65217_INFO("DCDC3", 900000, 1500000, tps65217_vsel_to_uv1,
136 tps65217_uv_to_vsel1, NULL, 64, TPS65217_ENABLE_DC3_EN, 134 tps65217_uv_to_vsel1),
137 TPS65217_REG_DEFDCDC3, TPS65217_DEFDCDCX_DCDC_MASK), 135 TPS65217_INFO("LDO1", 1000000, 3300000, NULL, NULL),
138 TPS65217_INFO("LDO1", 1000000, 3300000, NULL, NULL, LDO1_VSEL_table,
139 16, TPS65217_ENABLE_LDO1_EN, TPS65217_REG_DEFLDO1,
140 TPS65217_DEFLDO1_LDO1_MASK),
141 TPS65217_INFO("LDO2", 900000, 3300000, tps65217_vsel_to_uv1, 136 TPS65217_INFO("LDO2", 900000, 3300000, tps65217_vsel_to_uv1,
142 tps65217_uv_to_vsel1, NULL, 64, TPS65217_ENABLE_LDO2_EN, 137 tps65217_uv_to_vsel1),
143 TPS65217_REG_DEFLDO2, TPS65217_DEFLDO2_LDO2_MASK),
144 TPS65217_INFO("LDO3", 1800000, 3300000, tps65217_vsel_to_uv2, 138 TPS65217_INFO("LDO3", 1800000, 3300000, tps65217_vsel_to_uv2,
145 tps65217_uv_to_vsel2, NULL, 32, 139 tps65217_uv_to_vsel2),
146 TPS65217_ENABLE_LS1_EN | TPS65217_DEFLDO3_LDO3_EN,
147 TPS65217_REG_DEFLS1, TPS65217_DEFLDO3_LDO3_MASK),
148 TPS65217_INFO("LDO4", 1800000, 3300000, tps65217_vsel_to_uv2, 140 TPS65217_INFO("LDO4", 1800000, 3300000, tps65217_vsel_to_uv2,
149 tps65217_uv_to_vsel2, NULL, 32, 141 tps65217_uv_to_vsel2),
150 TPS65217_ENABLE_LS2_EN | TPS65217_DEFLDO4_LDO4_EN,
151 TPS65217_REG_DEFLS2, TPS65217_DEFLDO4_LDO4_MASK),
152}; 142};
153 143
154static int tps65217_pmic_is_enabled(struct regulator_dev *dev)
155{
156 int ret;
157 struct tps65217 *tps = rdev_get_drvdata(dev);
158 unsigned int data, rid = rdev_get_id(dev);
159
160 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4)
161 return -EINVAL;
162
163 ret = tps65217_reg_read(tps, TPS65217_REG_ENABLE, &data);
164 if (ret)
165 return ret;
166
167 return (data & tps->info[rid]->enable_mask) ? 1 : 0;
168}
169
170static int tps65217_pmic_enable(struct regulator_dev *dev) 144static int tps65217_pmic_enable(struct regulator_dev *dev)
171{ 145{
172 struct tps65217 *tps = rdev_get_drvdata(dev); 146 struct tps65217 *tps = rdev_get_drvdata(dev);
@@ -177,9 +151,8 @@ static int tps65217_pmic_enable(struct regulator_dev *dev)
177 151
178 /* Enable the regulator and password protection is level 1 */ 152 /* Enable the regulator and password protection is level 1 */
179 return tps65217_set_bits(tps, TPS65217_REG_ENABLE, 153 return tps65217_set_bits(tps, TPS65217_REG_ENABLE,
180 tps->info[rid]->enable_mask, 154 dev->desc->enable_mask, dev->desc->enable_mask,
181 tps->info[rid]->enable_mask, 155 TPS65217_PROTECT_L1);
182 TPS65217_PROTECT_L1);
183} 156}
184 157
185static int tps65217_pmic_disable(struct regulator_dev *dev) 158static int tps65217_pmic_disable(struct regulator_dev *dev)
@@ -192,25 +165,7 @@ static int tps65217_pmic_disable(struct regulator_dev *dev)
192 165
193 /* Disable the regulator and password protection is level 1 */ 166 /* Disable the regulator and password protection is level 1 */
194 return tps65217_clear_bits(tps, TPS65217_REG_ENABLE, 167 return tps65217_clear_bits(tps, TPS65217_REG_ENABLE,
195 tps->info[rid]->enable_mask, TPS65217_PROTECT_L1); 168 dev->desc->enable_mask, TPS65217_PROTECT_L1);
196}
197
198static int tps65217_pmic_get_voltage_sel(struct regulator_dev *dev)
199{
200 int ret;
201 struct tps65217 *tps = rdev_get_drvdata(dev);
202 unsigned int selector, rid = rdev_get_id(dev);
203
204 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4)
205 return -EINVAL;
206
207 ret = tps65217_reg_read(tps, tps->info[rid]->set_vout_reg, &selector);
208 if (ret)
209 return ret;
210
211 selector &= tps->info[rid]->set_vout_mask;
212
213 return selector;
214} 169}
215 170
216static int tps65217_pmic_set_voltage_sel(struct regulator_dev *dev, 171static int tps65217_pmic_set_voltage_sel(struct regulator_dev *dev,
@@ -221,8 +176,7 @@ static int tps65217_pmic_set_voltage_sel(struct regulator_dev *dev,
221 unsigned int rid = rdev_get_id(dev); 176 unsigned int rid = rdev_get_id(dev);
222 177
223 /* Set the voltage based on vsel value and write protect level is 2 */ 178 /* Set the voltage based on vsel value and write protect level is 2 */
224 ret = tps65217_set_bits(tps, tps->info[rid]->set_vout_reg, 179 ret = tps65217_set_bits(tps, dev->desc->vsel_reg, dev->desc->vsel_mask,
225 tps->info[rid]->set_vout_mask,
226 selector, TPS65217_PROTECT_L2); 180 selector, TPS65217_PROTECT_L2);
227 181
228 /* Set GO bit for DCDCx to initiate voltage transistion */ 182 /* Set GO bit for DCDCx to initiate voltage transistion */
@@ -252,10 +206,10 @@ static int tps65217_pmic_map_voltage(struct regulator_dev *dev,
252 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4) 206 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4)
253 return -EINVAL; 207 return -EINVAL;
254 208
255 if (min_uV < tps->info[rid]->min_uV || min_uV > tps->info[rid]->max_uV) 209 if (min_uV < tps->info[rid]->min_uV)
256 return -EINVAL; 210 min_uV = tps->info[rid]->min_uV;
257 211
258 if (max_uV < tps->info[rid]->min_uV || max_uV > tps->info[rid]->max_uV) 212 if (max_uV < tps->info[rid]->min_uV || min_uV > tps->info[rid]->max_uV)
259 return -EINVAL; 213 return -EINVAL;
260 214
261 ret = tps->info[rid]->uv_to_vsel(min_uV, &sel); 215 ret = tps->info[rid]->uv_to_vsel(min_uV, &sel);
@@ -274,21 +228,18 @@ static int tps65217_pmic_list_voltage(struct regulator_dev *dev,
274 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4) 228 if (rid < TPS65217_DCDC_1 || rid > TPS65217_LDO_4)
275 return -EINVAL; 229 return -EINVAL;
276 230
277 if (selector >= tps->info[rid]->table_len) 231 if (selector >= dev->desc->n_voltages)
278 return -EINVAL; 232 return -EINVAL;
279 233
280 if (tps->info[rid]->table)
281 return tps->info[rid]->table[selector];
282
283 return tps->info[rid]->vsel_to_uv(selector); 234 return tps->info[rid]->vsel_to_uv(selector);
284} 235}
285 236
286/* Operations permitted on DCDCx, LDO2, LDO3 and LDO4 */ 237/* Operations permitted on DCDCx, LDO2, LDO3 and LDO4 */
287static struct regulator_ops tps65217_pmic_ops = { 238static struct regulator_ops tps65217_pmic_ops = {
288 .is_enabled = tps65217_pmic_is_enabled, 239 .is_enabled = regulator_is_enabled_regmap,
289 .enable = tps65217_pmic_enable, 240 .enable = tps65217_pmic_enable,
290 .disable = tps65217_pmic_disable, 241 .disable = tps65217_pmic_disable,
291 .get_voltage_sel = tps65217_pmic_get_voltage_sel, 242 .get_voltage_sel = regulator_get_voltage_sel_regmap,
292 .set_voltage_sel = tps65217_pmic_set_voltage_sel, 243 .set_voltage_sel = tps65217_pmic_set_voltage_sel,
293 .list_voltage = tps65217_pmic_list_voltage, 244 .list_voltage = tps65217_pmic_list_voltage,
294 .map_voltage = tps65217_pmic_map_voltage, 245 .map_voltage = tps65217_pmic_map_voltage,
@@ -296,22 +247,38 @@ static struct regulator_ops tps65217_pmic_ops = {
296 247
297/* Operations permitted on LDO1 */ 248/* Operations permitted on LDO1 */
298static struct regulator_ops tps65217_pmic_ldo1_ops = { 249static struct regulator_ops tps65217_pmic_ldo1_ops = {
299 .is_enabled = tps65217_pmic_is_enabled, 250 .is_enabled = regulator_is_enabled_regmap,
300 .enable = tps65217_pmic_enable, 251 .enable = tps65217_pmic_enable,
301 .disable = tps65217_pmic_disable, 252 .disable = tps65217_pmic_disable,
302 .get_voltage_sel = tps65217_pmic_get_voltage_sel, 253 .get_voltage_sel = regulator_get_voltage_sel_regmap,
303 .set_voltage_sel = tps65217_pmic_set_voltage_sel, 254 .set_voltage_sel = tps65217_pmic_set_voltage_sel,
304 .list_voltage = tps65217_pmic_list_voltage, 255 .list_voltage = regulator_list_voltage_table,
305}; 256};
306 257
307static const struct regulator_desc regulators[] = { 258static const struct regulator_desc regulators[] = {
308 TPS65217_REGULATOR("DCDC1", TPS65217_DCDC_1, tps65217_pmic_ops, 64), 259 TPS65217_REGULATOR("DCDC1", TPS65217_DCDC_1, tps65217_pmic_ops, 64,
309 TPS65217_REGULATOR("DCDC2", TPS65217_DCDC_2, tps65217_pmic_ops, 64), 260 TPS65217_REG_DEFDCDC1, TPS65217_DEFDCDCX_DCDC_MASK,
310 TPS65217_REGULATOR("DCDC3", TPS65217_DCDC_3, tps65217_pmic_ops, 64), 261 TPS65217_ENABLE_DC1_EN, NULL),
311 TPS65217_REGULATOR("LDO1", TPS65217_LDO_1, tps65217_pmic_ldo1_ops, 16), 262 TPS65217_REGULATOR("DCDC2", TPS65217_DCDC_2, tps65217_pmic_ops, 64,
312 TPS65217_REGULATOR("LDO2", TPS65217_LDO_2, tps65217_pmic_ops, 64), 263 TPS65217_REG_DEFDCDC2, TPS65217_DEFDCDCX_DCDC_MASK,
313 TPS65217_REGULATOR("LDO3", TPS65217_LDO_3, tps65217_pmic_ops, 32), 264 TPS65217_ENABLE_DC2_EN, NULL),
314 TPS65217_REGULATOR("LDO4", TPS65217_LDO_4, tps65217_pmic_ops, 32), 265 TPS65217_REGULATOR("DCDC3", TPS65217_DCDC_3, tps65217_pmic_ops, 64,
266 TPS65217_REG_DEFDCDC3, TPS65217_DEFDCDCX_DCDC_MASK,
267 TPS65217_ENABLE_DC3_EN, NULL),
268 TPS65217_REGULATOR("LDO1", TPS65217_LDO_1, tps65217_pmic_ldo1_ops, 16,
269 TPS65217_REG_DEFLDO1, TPS65217_DEFLDO1_LDO1_MASK,
270 TPS65217_ENABLE_LDO1_EN, LDO1_VSEL_table),
271 TPS65217_REGULATOR("LDO2", TPS65217_LDO_2, tps65217_pmic_ops, 64,
272 TPS65217_REG_DEFLDO2, TPS65217_DEFLDO2_LDO2_MASK,
273 TPS65217_ENABLE_LDO2_EN, NULL),
274 TPS65217_REGULATOR("LDO3", TPS65217_LDO_3, tps65217_pmic_ops, 32,
275 TPS65217_REG_DEFLS1, TPS65217_DEFLDO3_LDO3_MASK,
276 TPS65217_ENABLE_LS1_EN | TPS65217_DEFLDO3_LDO3_EN,
277 NULL),
278 TPS65217_REGULATOR("LDO4", TPS65217_LDO_4, tps65217_pmic_ops, 32,
279 TPS65217_REG_DEFLS2, TPS65217_DEFLDO4_LDO4_MASK,
280 TPS65217_ENABLE_LS2_EN | TPS65217_DEFLDO4_LDO4_EN,
281 NULL),
315}; 282};
316 283
317static int __devinit tps65217_regulator_probe(struct platform_device *pdev) 284static int __devinit tps65217_regulator_probe(struct platform_device *pdev)
@@ -326,6 +293,7 @@ static int __devinit tps65217_regulator_probe(struct platform_device *pdev)
326 tps->info[pdev->id] = info; 293 tps->info[pdev->id] = info;
327 294
328 config.dev = &pdev->dev; 295 config.dev = &pdev->dev;
296 config.of_node = pdev->dev.of_node;
329 config.init_data = pdev->dev.platform_data; 297 config.init_data = pdev->dev.platform_data;
330 config.driver_data = tps; 298 config.driver_data = tps;
331 299
diff --git a/drivers/regulator/tps6524x-regulator.c b/drivers/regulator/tps6524x-regulator.c
index 1b299aacf22f..947ece933d90 100644
--- a/drivers/regulator/tps6524x-regulator.c
+++ b/drivers/regulator/tps6524x-regulator.c
@@ -110,9 +110,6 @@
110#define N_SWITCH 2 110#define N_SWITCH 2
111#define N_REGULATORS (N_DCDC + N_LDO + N_SWITCH) 111#define N_REGULATORS (N_DCDC + N_LDO + N_SWITCH)
112 112
113#define FIXED_ILIMSEL BIT(0)
114#define FIXED_VOLTAGE BIT(1)
115
116#define CMD_READ(reg) ((reg) << 6) 113#define CMD_READ(reg) ((reg) << 6)
117#define CMD_WRITE(reg) (BIT(5) | (reg) << 6) 114#define CMD_WRITE(reg) (BIT(5) | (reg) << 6)
118#define STAT_CLK BIT(3) 115#define STAT_CLK BIT(3)
@@ -129,12 +126,9 @@ struct field {
129struct supply_info { 126struct supply_info {
130 const char *name; 127 const char *name;
131 int n_voltages; 128 int n_voltages;
132 const int *voltages; 129 const unsigned int *voltages;
133 int fixed_voltage;
134 int n_ilimsels; 130 int n_ilimsels;
135 const int *ilimsels; 131 const unsigned int *ilimsels;
136 int fixed_ilimsel;
137 int flags;
138 struct field enable, voltage, ilimsel; 132 struct field enable, voltage, ilimsel;
139}; 133};
140 134
@@ -307,7 +301,7 @@ static int write_field(struct tps6524x *hw, const struct field *field,
307 val << field->shift); 301 val << field->shift);
308} 302}
309 303
310static const int dcdc1_voltages[] = { 304static const unsigned int dcdc1_voltages[] = {
311 800000, 825000, 850000, 875000, 305 800000, 825000, 850000, 875000,
312 900000, 925000, 950000, 975000, 306 900000, 925000, 950000, 975000,
313 1000000, 1025000, 1050000, 1075000, 307 1000000, 1025000, 1050000, 1075000,
@@ -318,7 +312,7 @@ static const int dcdc1_voltages[] = {
318 1500000, 1525000, 1550000, 1575000, 312 1500000, 1525000, 1550000, 1575000,
319}; 313};
320 314
321static const int dcdc2_voltages[] = { 315static const unsigned int dcdc2_voltages[] = {
322 1400000, 1450000, 1500000, 1550000, 316 1400000, 1450000, 1500000, 1550000,
323 1600000, 1650000, 1700000, 1750000, 317 1600000, 1650000, 1700000, 1750000,
324 1800000, 1850000, 1900000, 1950000, 318 1800000, 1850000, 1900000, 1950000,
@@ -329,7 +323,7 @@ static const int dcdc2_voltages[] = {
329 2800000, 2850000, 2900000, 2950000, 323 2800000, 2850000, 2900000, 2950000,
330}; 324};
331 325
332static const int dcdc3_voltages[] = { 326static const unsigned int dcdc3_voltages[] = {
333 2400000, 2450000, 2500000, 2550000, 2600000, 327 2400000, 2450000, 2500000, 2550000, 2600000,
334 2650000, 2700000, 2750000, 2800000, 2850000, 328 2650000, 2700000, 2750000, 2800000, 2850000,
335 2900000, 2950000, 3000000, 3050000, 3100000, 329 2900000, 2950000, 3000000, 3050000, 3100000,
@@ -337,38 +331,54 @@ static const int dcdc3_voltages[] = {
337 3400000, 3450000, 3500000, 3550000, 3600000, 331 3400000, 3450000, 3500000, 3550000, 3600000,
338}; 332};
339 333
340static const int ldo1_voltages[] = { 334static const unsigned int ldo1_voltages[] = {
341 4300000, 4350000, 4400000, 4450000, 335 4300000, 4350000, 4400000, 4450000,
342 4500000, 4550000, 4600000, 4650000, 336 4500000, 4550000, 4600000, 4650000,
343 4700000, 4750000, 4800000, 4850000, 337 4700000, 4750000, 4800000, 4850000,
344 4900000, 4950000, 5000000, 5050000, 338 4900000, 4950000, 5000000, 5050000,
345}; 339};
346 340
347static const int ldo2_voltages[] = { 341static const unsigned int ldo2_voltages[] = {
348 1100000, 1150000, 1200000, 1250000, 342 1100000, 1150000, 1200000, 1250000,
349 1300000, 1700000, 1750000, 1800000, 343 1300000, 1700000, 1750000, 1800000,
350 1850000, 1900000, 3150000, 3200000, 344 1850000, 1900000, 3150000, 3200000,
351 3250000, 3300000, 3350000, 3400000, 345 3250000, 3300000, 3350000, 3400000,
352}; 346};
353 347
354static const int ldo_ilimsel[] = { 348static const unsigned int fixed_5000000_voltage[] = {
349 5000000
350};
351
352static const unsigned int ldo_ilimsel[] = {
355 400000, 1500000 353 400000, 1500000
356}; 354};
357 355
358static const int usb_ilimsel[] = { 356static const unsigned int usb_ilimsel[] = {
359 200000, 400000, 800000, 1000000 357 200000, 400000, 800000, 1000000
360}; 358};
361 359
360static const unsigned int fixed_2400000_ilimsel[] = {
361 2400000
362};
363
364static const unsigned int fixed_1200000_ilimsel[] = {
365 1200000
366};
367
368static const unsigned int fixed_400000_ilimsel[] = {
369 400000
370};
371
362#define __MK_FIELD(_reg, _mask, _shift) \ 372#define __MK_FIELD(_reg, _mask, _shift) \
363 { .reg = (_reg), .mask = (_mask), .shift = (_shift), } 373 { .reg = (_reg), .mask = (_mask), .shift = (_shift), }
364 374
365static const struct supply_info supply_info[N_REGULATORS] = { 375static const struct supply_info supply_info[N_REGULATORS] = {
366 { 376 {
367 .name = "DCDC1", 377 .name = "DCDC1",
368 .flags = FIXED_ILIMSEL,
369 .n_voltages = ARRAY_SIZE(dcdc1_voltages), 378 .n_voltages = ARRAY_SIZE(dcdc1_voltages),
370 .voltages = dcdc1_voltages, 379 .voltages = dcdc1_voltages,
371 .fixed_ilimsel = 2400000, 380 .n_ilimsels = ARRAY_SIZE(fixed_2400000_ilimsel),
381 .ilimsels = fixed_2400000_ilimsel,
372 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, 382 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
373 DCDCDCDC1_EN_SHIFT), 383 DCDCDCDC1_EN_SHIFT),
374 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, 384 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@@ -376,10 +386,10 @@ static const struct supply_info supply_info[N_REGULATORS] = {
376 }, 386 },
377 { 387 {
378 .name = "DCDC2", 388 .name = "DCDC2",
379 .flags = FIXED_ILIMSEL,
380 .n_voltages = ARRAY_SIZE(dcdc2_voltages), 389 .n_voltages = ARRAY_SIZE(dcdc2_voltages),
381 .voltages = dcdc2_voltages, 390 .voltages = dcdc2_voltages,
382 .fixed_ilimsel = 1200000, 391 .n_ilimsels = ARRAY_SIZE(fixed_1200000_ilimsel),
392 .ilimsels = fixed_1200000_ilimsel,
383 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, 393 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
384 DCDCDCDC2_EN_SHIFT), 394 DCDCDCDC2_EN_SHIFT),
385 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, 395 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@@ -387,10 +397,10 @@ static const struct supply_info supply_info[N_REGULATORS] = {
387 }, 397 },
388 { 398 {
389 .name = "DCDC3", 399 .name = "DCDC3",
390 .flags = FIXED_ILIMSEL,
391 .n_voltages = ARRAY_SIZE(dcdc3_voltages), 400 .n_voltages = ARRAY_SIZE(dcdc3_voltages),
392 .voltages = dcdc3_voltages, 401 .voltages = dcdc3_voltages,
393 .fixed_ilimsel = 1200000, 402 .n_ilimsels = ARRAY_SIZE(fixed_1200000_ilimsel),
403 .ilimsels = fixed_1200000_ilimsel,
394 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, 404 .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
395 DCDCDCDC3_EN_SHIFT), 405 DCDCDCDC3_EN_SHIFT),
396 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, 406 .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@@ -424,8 +434,8 @@ static const struct supply_info supply_info[N_REGULATORS] = {
424 }, 434 },
425 { 435 {
426 .name = "USB", 436 .name = "USB",
427 .flags = FIXED_VOLTAGE, 437 .n_voltages = ARRAY_SIZE(fixed_5000000_voltage),
428 .fixed_voltage = 5000000, 438 .voltages = fixed_5000000_voltage,
429 .n_ilimsels = ARRAY_SIZE(usb_ilimsel), 439 .n_ilimsels = ARRAY_SIZE(usb_ilimsel),
430 .ilimsels = usb_ilimsel, 440 .ilimsels = usb_ilimsel,
431 .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK, 441 .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK,
@@ -435,29 +445,15 @@ static const struct supply_info supply_info[N_REGULATORS] = {
435 }, 445 },
436 { 446 {
437 .name = "LCD", 447 .name = "LCD",
438 .flags = FIXED_VOLTAGE | FIXED_ILIMSEL, 448 .n_voltages = ARRAY_SIZE(fixed_5000000_voltage),
439 .fixed_voltage = 5000000, 449 .voltages = fixed_5000000_voltage,
440 .fixed_ilimsel = 400000, 450 .n_ilimsels = ARRAY_SIZE(fixed_400000_ilimsel),
451 .ilimsels = fixed_400000_ilimsel,
441 .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK, 452 .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK,
442 BLOCK_LCD_SHIFT), 453 BLOCK_LCD_SHIFT),
443 }, 454 },
444}; 455};
445 456
446static int list_voltage(struct regulator_dev *rdev, unsigned selector)
447{
448 const struct supply_info *info;
449 struct tps6524x *hw;
450
451 hw = rdev_get_drvdata(rdev);
452 info = &supply_info[rdev_get_id(rdev)];
453
454 if (info->flags & FIXED_VOLTAGE)
455 return selector ? -EINVAL : info->fixed_voltage;
456
457 return ((selector < info->n_voltages) ?
458 info->voltages[selector] : -EINVAL);
459}
460
461static int set_voltage_sel(struct regulator_dev *rdev, unsigned selector) 457static int set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
462{ 458{
463 const struct supply_info *info; 459 const struct supply_info *info;
@@ -466,7 +462,7 @@ static int set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
466 hw = rdev_get_drvdata(rdev); 462 hw = rdev_get_drvdata(rdev);
467 info = &supply_info[rdev_get_id(rdev)]; 463 info = &supply_info[rdev_get_id(rdev)];
468 464
469 if (info->flags & FIXED_VOLTAGE) 465 if (rdev->desc->n_voltages == 1)
470 return -EINVAL; 466 return -EINVAL;
471 467
472 return write_field(hw, &info->voltage, selector); 468 return write_field(hw, &info->voltage, selector);
@@ -481,7 +477,7 @@ static int get_voltage_sel(struct regulator_dev *rdev)
481 hw = rdev_get_drvdata(rdev); 477 hw = rdev_get_drvdata(rdev);
482 info = &supply_info[rdev_get_id(rdev)]; 478 info = &supply_info[rdev_get_id(rdev)];
483 479
484 if (info->flags & FIXED_VOLTAGE) 480 if (rdev->desc->n_voltages == 1)
485 return 0; 481 return 0;
486 482
487 ret = read_field(hw, &info->voltage); 483 ret = read_field(hw, &info->voltage);
@@ -503,7 +499,7 @@ static int set_current_limit(struct regulator_dev *rdev, int min_uA,
503 hw = rdev_get_drvdata(rdev); 499 hw = rdev_get_drvdata(rdev);
504 info = &supply_info[rdev_get_id(rdev)]; 500 info = &supply_info[rdev_get_id(rdev)];
505 501
506 if (info->flags & FIXED_ILIMSEL) 502 if (info->n_ilimsels == 1)
507 return -EINVAL; 503 return -EINVAL;
508 504
509 for (i = 0; i < info->n_ilimsels; i++) 505 for (i = 0; i < info->n_ilimsels; i++)
@@ -526,8 +522,8 @@ static int get_current_limit(struct regulator_dev *rdev)
526 hw = rdev_get_drvdata(rdev); 522 hw = rdev_get_drvdata(rdev);
527 info = &supply_info[rdev_get_id(rdev)]; 523 info = &supply_info[rdev_get_id(rdev)];
528 524
529 if (info->flags & FIXED_ILIMSEL) 525 if (info->n_ilimsels == 1)
530 return info->fixed_ilimsel; 526 return info->ilimsels[0];
531 527
532 ret = read_field(hw, &info->ilimsel); 528 ret = read_field(hw, &info->ilimsel);
533 if (ret < 0) 529 if (ret < 0)
@@ -577,7 +573,7 @@ static struct regulator_ops regulator_ops = {
577 .disable = disable_supply, 573 .disable = disable_supply,
578 .get_voltage_sel = get_voltage_sel, 574 .get_voltage_sel = get_voltage_sel,
579 .set_voltage_sel = set_voltage_sel, 575 .set_voltage_sel = set_voltage_sel,
580 .list_voltage = list_voltage, 576 .list_voltage = regulator_list_voltage_table,
581 .set_current_limit = set_current_limit, 577 .set_current_limit = set_current_limit,
582 .get_current_limit = get_current_limit, 578 .get_current_limit = get_current_limit,
583}; 579};
@@ -629,13 +625,11 @@ static int __devinit pmic_probe(struct spi_device *spi)
629 hw->desc[i].name = info->name; 625 hw->desc[i].name = info->name;
630 hw->desc[i].id = i; 626 hw->desc[i].id = i;
631 hw->desc[i].n_voltages = info->n_voltages; 627 hw->desc[i].n_voltages = info->n_voltages;
628 hw->desc[i].volt_table = info->voltages;
632 hw->desc[i].ops = &regulator_ops; 629 hw->desc[i].ops = &regulator_ops;
633 hw->desc[i].type = REGULATOR_VOLTAGE; 630 hw->desc[i].type = REGULATOR_VOLTAGE;
634 hw->desc[i].owner = THIS_MODULE; 631 hw->desc[i].owner = THIS_MODULE;
635 632
636 if (info->flags & FIXED_VOLTAGE)
637 hw->desc[i].n_voltages = 1;
638
639 config.dev = dev; 633 config.dev = dev;
640 config.init_data = init_data; 634 config.init_data = init_data;
641 config.driver_data = hw; 635 config.driver_data = hw;
diff --git a/drivers/regulator/tps6586x-regulator.c b/drivers/regulator/tps6586x-regulator.c
index c0a214575380..e6da90ab5153 100644
--- a/drivers/regulator/tps6586x-regulator.c
+++ b/drivers/regulator/tps6586x-regulator.c
@@ -63,8 +63,6 @@ struct tps6586x_regulator {
63 int enable_bit[2]; 63 int enable_bit[2];
64 int enable_reg[2]; 64 int enable_reg[2];
65 65
66 int *voltages;
67
68 /* for DVM regulators */ 66 /* for DVM regulators */
69 int go_reg; 67 int go_reg;
70 int go_bit; 68 int go_bit;
@@ -72,22 +70,9 @@ struct tps6586x_regulator {
72 70
73static inline struct device *to_tps6586x_dev(struct regulator_dev *rdev) 71static inline struct device *to_tps6586x_dev(struct regulator_dev *rdev)
74{ 72{
75 return rdev_get_dev(rdev)->parent->parent; 73 return rdev_get_dev(rdev)->parent;
76} 74}
77 75
78static int tps6586x_list_voltage(struct regulator_dev *rdev, unsigned selector)
79{
80 struct tps6586x_regulator *info = rdev_get_drvdata(rdev);
81 int rid = rdev_get_id(rdev);
82
83 /* LDO0 has minimal voltage 1.2V rather than 1.25V */
84 if ((rid == TPS6586X_ID_LDO_0) && (selector == 0))
85 return (info->voltages[0] - 50) * 1000;
86
87 return info->voltages[selector] * 1000;
88}
89
90
91static int tps6586x_set_voltage_sel(struct regulator_dev *rdev, 76static int tps6586x_set_voltage_sel(struct regulator_dev *rdev,
92 unsigned selector) 77 unsigned selector)
93{ 78{
@@ -168,7 +153,7 @@ static int tps6586x_regulator_is_enabled(struct regulator_dev *rdev)
168} 153}
169 154
170static struct regulator_ops tps6586x_regulator_ops = { 155static struct regulator_ops tps6586x_regulator_ops = {
171 .list_voltage = tps6586x_list_voltage, 156 .list_voltage = regulator_list_voltage_table,
172 .get_voltage_sel = tps6586x_get_voltage_sel, 157 .get_voltage_sel = tps6586x_get_voltage_sel,
173 .set_voltage_sel = tps6586x_set_voltage_sel, 158 .set_voltage_sel = tps6586x_set_voltage_sel,
174 159
@@ -177,39 +162,45 @@ static struct regulator_ops tps6586x_regulator_ops = {
177 .disable = tps6586x_regulator_disable, 162 .disable = tps6586x_regulator_disable,
178}; 163};
179 164
180static int tps6586x_ldo_voltages[] = { 165static const unsigned int tps6586x_ldo0_voltages[] = {
181 1250, 1500, 1800, 2500, 2700, 2850, 3100, 3300, 166 1200000, 1500000, 1800000, 2500000, 2700000, 2850000, 3100000, 3300000,
167};
168
169static const unsigned int tps6586x_ldo4_voltages[] = {
170 1700000, 1725000, 1750000, 1775000, 1800000, 1825000, 1850000, 1875000,
171 1900000, 1925000, 1950000, 1975000, 2000000, 2025000, 2050000, 2075000,
172 2100000, 2125000, 2150000, 2175000, 2200000, 2225000, 2250000, 2275000,
173 2300000, 2325000, 2350000, 2375000, 2400000, 2425000, 2450000, 2475000,
182}; 174};
183 175
184static int tps6586x_ldo4_voltages[] = { 176static const unsigned int tps6586x_ldo_voltages[] = {
185 1700, 1725, 1750, 1775, 1800, 1825, 1850, 1875, 177 1250000, 1500000, 1800000, 2500000, 2700000, 2850000, 3100000, 3300000,
186 1900, 1925, 1950, 1975, 2000, 2025, 2050, 2075,
187 2100, 2125, 2150, 2175, 2200, 2225, 2250, 2275,
188 2300, 2325, 2350, 2375, 2400, 2425, 2450, 2475,
189}; 178};
190 179
191static int tps6586x_sm2_voltages[] = { 180static const unsigned int tps6586x_sm2_voltages[] = {
192 3000, 3050, 3100, 3150, 3200, 3250, 3300, 3350, 181 3000000, 3050000, 3100000, 3150000, 3200000, 3250000, 3300000, 3350000,
193 3400, 3450, 3500, 3550, 3600, 3650, 3700, 3750, 182 3400000, 3450000, 3500000, 3550000, 3600000, 3650000, 3700000, 3750000,
194 3800, 3850, 3900, 3950, 4000, 4050, 4100, 4150, 183 3800000, 3850000, 3900000, 3950000, 4000000, 4050000, 4100000, 4150000,
195 4200, 4250, 4300, 4350, 4400, 4450, 4500, 4550, 184 4200000, 4250000, 4300000, 4350000, 4400000, 4450000, 4500000, 4550000,
196}; 185};
197 186
198static int tps6586x_dvm_voltages[] = { 187static const unsigned int tps6586x_dvm_voltages[] = {
199 725, 750, 775, 800, 825, 850, 875, 900, 188 725000, 750000, 775000, 800000, 825000, 850000, 875000, 900000,
200 925, 950, 975, 1000, 1025, 1050, 1075, 1100, 189 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000,
201 1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 190 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
202 1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 191 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
203}; 192};
204 193
205#define TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 194#define TPS6586X_REGULATOR(_id, _pin_name, vdata, vreg, shift, nbits, \
206 ereg0, ebit0, ereg1, ebit1) \ 195 ereg0, ebit0, ereg1, ebit1) \
207 .desc = { \ 196 .desc = { \
197 .supply_name = _pin_name, \
208 .name = "REG-" #_id, \ 198 .name = "REG-" #_id, \
209 .ops = &tps6586x_regulator_ops, \ 199 .ops = &tps6586x_regulator_ops, \
210 .type = REGULATOR_VOLTAGE, \ 200 .type = REGULATOR_VOLTAGE, \
211 .id = TPS6586X_ID_##_id, \ 201 .id = TPS6586X_ID_##_id, \
212 .n_voltages = ARRAY_SIZE(tps6586x_##vdata##_voltages), \ 202 .n_voltages = ARRAY_SIZE(tps6586x_##vdata##_voltages), \
203 .volt_table = tps6586x_##vdata##_voltages, \
213 .owner = THIS_MODULE, \ 204 .owner = THIS_MODULE, \
214 }, \ 205 }, \
215 .volt_reg = TPS6586X_##vreg, \ 206 .volt_reg = TPS6586X_##vreg, \
@@ -218,44 +209,45 @@ static int tps6586x_dvm_voltages[] = {
218 .enable_reg[0] = TPS6586X_SUPPLY##ereg0, \ 209 .enable_reg[0] = TPS6586X_SUPPLY##ereg0, \
219 .enable_bit[0] = (ebit0), \ 210 .enable_bit[0] = (ebit0), \
220 .enable_reg[1] = TPS6586X_SUPPLY##ereg1, \ 211 .enable_reg[1] = TPS6586X_SUPPLY##ereg1, \
221 .enable_bit[1] = (ebit1), \ 212 .enable_bit[1] = (ebit1),
222 .voltages = tps6586x_##vdata##_voltages,
223 213
224#define TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \ 214#define TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \
225 .go_reg = TPS6586X_##goreg, \ 215 .go_reg = TPS6586X_##goreg, \
226 .go_bit = (gobit), 216 .go_bit = (gobit),
227 217
228#define TPS6586X_LDO(_id, vdata, vreg, shift, nbits, \ 218#define TPS6586X_LDO(_id, _pname, vdata, vreg, shift, nbits, \
229 ereg0, ebit0, ereg1, ebit1) \ 219 ereg0, ebit0, ereg1, ebit1) \
230{ \ 220{ \
231 TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 221 TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \
232 ereg0, ebit0, ereg1, ebit1) \ 222 ereg0, ebit0, ereg1, ebit1) \
233} 223}
234 224
235#define TPS6586X_DVM(_id, vdata, vreg, shift, nbits, \ 225#define TPS6586X_DVM(_id, _pname, vdata, vreg, shift, nbits, \
236 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 226 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \
237{ \ 227{ \
238 TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 228 TPS6586X_REGULATOR(_id, _pname, vdata, vreg, shift, nbits, \
239 ereg0, ebit0, ereg1, ebit1) \ 229 ereg0, ebit0, ereg1, ebit1) \
240 TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \ 230 TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \
241} 231}
242 232
243static struct tps6586x_regulator tps6586x_regulator[] = { 233static struct tps6586x_regulator tps6586x_regulator[] = {
244 TPS6586X_LDO(LDO_0, ldo, SUPPLYV1, 5, 3, ENC, 0, END, 0), 234 TPS6586X_LDO(LDO_0, "vinldo01", ldo0, SUPPLYV1, 5, 3, ENC, 0, END, 0),
245 TPS6586X_LDO(LDO_3, ldo, SUPPLYV4, 0, 3, ENC, 2, END, 2), 235 TPS6586X_LDO(LDO_3, "vinldo23", ldo, SUPPLYV4, 0, 3, ENC, 2, END, 2),
246 TPS6586X_LDO(LDO_5, ldo, SUPPLYV6, 0, 3, ENE, 6, ENE, 6), 236 TPS6586X_LDO(LDO_5, NULL, ldo, SUPPLYV6, 0, 3, ENE, 6, ENE, 6),
247 TPS6586X_LDO(LDO_6, ldo, SUPPLYV3, 0, 3, ENC, 4, END, 4), 237 TPS6586X_LDO(LDO_6, "vinldo678", ldo, SUPPLYV3, 0, 3, ENC, 4, END, 4),
248 TPS6586X_LDO(LDO_7, ldo, SUPPLYV3, 3, 3, ENC, 5, END, 5), 238 TPS6586X_LDO(LDO_7, "vinldo678", ldo, SUPPLYV3, 3, 3, ENC, 5, END, 5),
249 TPS6586X_LDO(LDO_8, ldo, SUPPLYV2, 5, 3, ENC, 6, END, 6), 239 TPS6586X_LDO(LDO_8, "vinldo678", ldo, SUPPLYV2, 5, 3, ENC, 6, END, 6),
250 TPS6586X_LDO(LDO_9, ldo, SUPPLYV6, 3, 3, ENE, 7, ENE, 7), 240 TPS6586X_LDO(LDO_9, "vinldo9", ldo, SUPPLYV6, 3, 3, ENE, 7, ENE, 7),
251 TPS6586X_LDO(LDO_RTC, ldo, SUPPLYV4, 3, 3, V4, 7, V4, 7), 241 TPS6586X_LDO(LDO_RTC, NULL, ldo, SUPPLYV4, 3, 3, V4, 7, V4, 7),
252 TPS6586X_LDO(LDO_1, dvm, SUPPLYV1, 0, 5, ENC, 1, END, 1), 242 TPS6586X_LDO(LDO_1, "vinldo01", dvm, SUPPLYV1, 0, 5, ENC, 1, END, 1),
253 TPS6586X_LDO(SM_2, sm2, SUPPLYV2, 0, 5, ENC, 7, END, 7), 243 TPS6586X_LDO(SM_2, "sm2", sm2, SUPPLYV2, 0, 5, ENC, 7, END, 7),
254 244
255 TPS6586X_DVM(LDO_2, dvm, LDO2BV1, 0, 5, ENA, 3, ENB, 3, VCC2, 6), 245 TPS6586X_DVM(LDO_2, "vinldo23", dvm, LDO2BV1, 0, 5, ENA, 3,
256 TPS6586X_DVM(LDO_4, ldo4, LDO4V1, 0, 5, ENC, 3, END, 3, VCC1, 6), 246 ENB, 3, VCC2, 6),
257 TPS6586X_DVM(SM_0, dvm, SM0V1, 0, 5, ENA, 1, ENB, 1, VCC1, 2), 247 TPS6586X_DVM(LDO_4, "vinldo4", ldo4, LDO4V1, 0, 5, ENC, 3,
258 TPS6586X_DVM(SM_1, dvm, SM1V1, 0, 5, ENA, 0, ENB, 0, VCC1, 0), 248 END, 3, VCC1, 6),
249 TPS6586X_DVM(SM_0, "sm0", dvm, SM0V1, 0, 5, ENA, 1, ENB, 1, VCC1, 2),
250 TPS6586X_DVM(SM_1, "sm1", dvm, SM1V1, 0, 5, ENA, 0, ENB, 0, VCC1, 0),
259}; 251};
260 252
261/* 253/*
@@ -362,7 +354,7 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
362 if (err) 354 if (err)
363 return err; 355 return err;
364 356
365 config.dev = &pdev->dev; 357 config.dev = pdev->dev.parent;
366 config.of_node = pdev->dev.of_node; 358 config.of_node = pdev->dev.of_node;
367 config.init_data = pdev->dev.platform_data; 359 config.init_data = pdev->dev.platform_data;
368 config.driver_data = ri; 360 config.driver_data = ri;
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 6bf864b4bdf6..793adda560c3 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -31,160 +31,147 @@
31 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 | \ 31 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 | \
32 TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP) 32 TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
33 33
34/* supported VIO voltages in millivolts */ 34/* supported VIO voltages in microvolts */
35static const u16 VIO_VSEL_table[] = { 35static const unsigned int VIO_VSEL_table[] = {
36 1500, 1800, 2500, 3300, 36 1500000, 1800000, 2500000, 3300000,
37}; 37};
38 38
39/* VSEL tables for TPS65910 specific LDOs and dcdc's */ 39/* VSEL tables for TPS65910 specific LDOs and dcdc's */
40 40
41/* supported VDD3 voltages in millivolts */ 41/* supported VDD3 voltages in microvolts */
42static const u16 VDD3_VSEL_table[] = { 42static const unsigned int VDD3_VSEL_table[] = {
43 5000, 43 5000000,
44}; 44};
45 45
46/* supported VDIG1 voltages in millivolts */ 46/* supported VDIG1 voltages in microvolts */
47static const u16 VDIG1_VSEL_table[] = { 47static const unsigned int VDIG1_VSEL_table[] = {
48 1200, 1500, 1800, 2700, 48 1200000, 1500000, 1800000, 2700000,
49}; 49};
50 50
51/* supported VDIG2 voltages in millivolts */ 51/* supported VDIG2 voltages in microvolts */
52static const u16 VDIG2_VSEL_table[] = { 52static const unsigned int VDIG2_VSEL_table[] = {
53 1000, 1100, 1200, 1800, 53 1000000, 1100000, 1200000, 1800000,
54}; 54};
55 55
56/* supported VPLL voltages in millivolts */ 56/* supported VPLL voltages in microvolts */
57static const u16 VPLL_VSEL_table[] = { 57static const unsigned int VPLL_VSEL_table[] = {
58 1000, 1100, 1800, 2500, 58 1000000, 1100000, 1800000, 2500000,
59}; 59};
60 60
61/* supported VDAC voltages in millivolts */ 61/* supported VDAC voltages in microvolts */
62static const u16 VDAC_VSEL_table[] = { 62static const unsigned int VDAC_VSEL_table[] = {
63 1800, 2600, 2800, 2850, 63 1800000, 2600000, 2800000, 2850000,
64}; 64};
65 65
66/* supported VAUX1 voltages in millivolts */ 66/* supported VAUX1 voltages in microvolts */
67static const u16 VAUX1_VSEL_table[] = { 67static const unsigned int VAUX1_VSEL_table[] = {
68 1800, 2500, 2800, 2850, 68 1800000, 2500000, 2800000, 2850000,
69}; 69};
70 70
71/* supported VAUX2 voltages in millivolts */ 71/* supported VAUX2 voltages in microvolts */
72static const u16 VAUX2_VSEL_table[] = { 72static const unsigned int VAUX2_VSEL_table[] = {
73 1800, 2800, 2900, 3300, 73 1800000, 2800000, 2900000, 3300000,
74}; 74};
75 75
76/* supported VAUX33 voltages in millivolts */ 76/* supported VAUX33 voltages in microvolts */
77static const u16 VAUX33_VSEL_table[] = { 77static const unsigned int VAUX33_VSEL_table[] = {
78 1800, 2000, 2800, 3300, 78 1800000, 2000000, 2800000, 3300000,
79}; 79};
80 80
81/* supported VMMC voltages in millivolts */ 81/* supported VMMC voltages in microvolts */
82static const u16 VMMC_VSEL_table[] = { 82static const unsigned int VMMC_VSEL_table[] = {
83 1800, 2800, 3000, 3300, 83 1800000, 2800000, 3000000, 3300000,
84}; 84};
85 85
86struct tps_info { 86struct tps_info {
87 const char *name; 87 const char *name;
88 unsigned min_uV; 88 const char *vin_name;
89 unsigned max_uV;
90 u8 n_voltages; 89 u8 n_voltages;
91 const u16 *voltage_table; 90 const unsigned int *voltage_table;
92 int enable_time_us; 91 int enable_time_us;
93}; 92};
94 93
95static struct tps_info tps65910_regs[] = { 94static struct tps_info tps65910_regs[] = {
96 { 95 {
97 .name = "vrtc", 96 .name = "vrtc",
97 .vin_name = "vcc7",
98 .enable_time_us = 2200, 98 .enable_time_us = 2200,
99 }, 99 },
100 { 100 {
101 .name = "vio", 101 .name = "vio",
102 .min_uV = 1500000, 102 .vin_name = "vccio",
103 .max_uV = 3300000,
104 .n_voltages = ARRAY_SIZE(VIO_VSEL_table), 103 .n_voltages = ARRAY_SIZE(VIO_VSEL_table),
105 .voltage_table = VIO_VSEL_table, 104 .voltage_table = VIO_VSEL_table,
106 .enable_time_us = 350, 105 .enable_time_us = 350,
107 }, 106 },
108 { 107 {
109 .name = "vdd1", 108 .name = "vdd1",
110 .min_uV = 600000, 109 .vin_name = "vcc1",
111 .max_uV = 4500000,
112 .enable_time_us = 350, 110 .enable_time_us = 350,
113 }, 111 },
114 { 112 {
115 .name = "vdd2", 113 .name = "vdd2",
116 .min_uV = 600000, 114 .vin_name = "vcc2",
117 .max_uV = 4500000,
118 .enable_time_us = 350, 115 .enable_time_us = 350,
119 }, 116 },
120 { 117 {
121 .name = "vdd3", 118 .name = "vdd3",
122 .min_uV = 5000000,
123 .max_uV = 5000000,
124 .n_voltages = ARRAY_SIZE(VDD3_VSEL_table), 119 .n_voltages = ARRAY_SIZE(VDD3_VSEL_table),
125 .voltage_table = VDD3_VSEL_table, 120 .voltage_table = VDD3_VSEL_table,
126 .enable_time_us = 200, 121 .enable_time_us = 200,
127 }, 122 },
128 { 123 {
129 .name = "vdig1", 124 .name = "vdig1",
130 .min_uV = 1200000, 125 .vin_name = "vcc6",
131 .max_uV = 2700000,
132 .n_voltages = ARRAY_SIZE(VDIG1_VSEL_table), 126 .n_voltages = ARRAY_SIZE(VDIG1_VSEL_table),
133 .voltage_table = VDIG1_VSEL_table, 127 .voltage_table = VDIG1_VSEL_table,
134 .enable_time_us = 100, 128 .enable_time_us = 100,
135 }, 129 },
136 { 130 {
137 .name = "vdig2", 131 .name = "vdig2",
138 .min_uV = 1000000, 132 .vin_name = "vcc6",
139 .max_uV = 1800000,
140 .n_voltages = ARRAY_SIZE(VDIG2_VSEL_table), 133 .n_voltages = ARRAY_SIZE(VDIG2_VSEL_table),
141 .voltage_table = VDIG2_VSEL_table, 134 .voltage_table = VDIG2_VSEL_table,
142 .enable_time_us = 100, 135 .enable_time_us = 100,
143 }, 136 },
144 { 137 {
145 .name = "vpll", 138 .name = "vpll",
146 .min_uV = 1000000, 139 .vin_name = "vcc5",
147 .max_uV = 2500000,
148 .n_voltages = ARRAY_SIZE(VPLL_VSEL_table), 140 .n_voltages = ARRAY_SIZE(VPLL_VSEL_table),
149 .voltage_table = VPLL_VSEL_table, 141 .voltage_table = VPLL_VSEL_table,
150 .enable_time_us = 100, 142 .enable_time_us = 100,
151 }, 143 },
152 { 144 {
153 .name = "vdac", 145 .name = "vdac",
154 .min_uV = 1800000, 146 .vin_name = "vcc5",
155 .max_uV = 2850000,
156 .n_voltages = ARRAY_SIZE(VDAC_VSEL_table), 147 .n_voltages = ARRAY_SIZE(VDAC_VSEL_table),
157 .voltage_table = VDAC_VSEL_table, 148 .voltage_table = VDAC_VSEL_table,
158 .enable_time_us = 100, 149 .enable_time_us = 100,
159 }, 150 },
160 { 151 {
161 .name = "vaux1", 152 .name = "vaux1",
162 .min_uV = 1800000, 153 .vin_name = "vcc4",
163 .max_uV = 2850000,
164 .n_voltages = ARRAY_SIZE(VAUX1_VSEL_table), 154 .n_voltages = ARRAY_SIZE(VAUX1_VSEL_table),
165 .voltage_table = VAUX1_VSEL_table, 155 .voltage_table = VAUX1_VSEL_table,
166 .enable_time_us = 100, 156 .enable_time_us = 100,
167 }, 157 },
168 { 158 {
169 .name = "vaux2", 159 .name = "vaux2",
170 .min_uV = 1800000, 160 .vin_name = "vcc4",
171 .max_uV = 3300000,
172 .n_voltages = ARRAY_SIZE(VAUX2_VSEL_table), 161 .n_voltages = ARRAY_SIZE(VAUX2_VSEL_table),
173 .voltage_table = VAUX2_VSEL_table, 162 .voltage_table = VAUX2_VSEL_table,
174 .enable_time_us = 100, 163 .enable_time_us = 100,
175 }, 164 },
176 { 165 {
177 .name = "vaux33", 166 .name = "vaux33",
178 .min_uV = 1800000, 167 .vin_name = "vcc3",
179 .max_uV = 3300000,
180 .n_voltages = ARRAY_SIZE(VAUX33_VSEL_table), 168 .n_voltages = ARRAY_SIZE(VAUX33_VSEL_table),
181 .voltage_table = VAUX33_VSEL_table, 169 .voltage_table = VAUX33_VSEL_table,
182 .enable_time_us = 100, 170 .enable_time_us = 100,
183 }, 171 },
184 { 172 {
185 .name = "vmmc", 173 .name = "vmmc",
186 .min_uV = 1800000, 174 .vin_name = "vcc3",
187 .max_uV = 3300000,
188 .n_voltages = ARRAY_SIZE(VMMC_VSEL_table), 175 .n_voltages = ARRAY_SIZE(VMMC_VSEL_table),
189 .voltage_table = VMMC_VSEL_table, 176 .voltage_table = VMMC_VSEL_table,
190 .enable_time_us = 100, 177 .enable_time_us = 100,
@@ -194,91 +181,79 @@ static struct tps_info tps65910_regs[] = {
194static struct tps_info tps65911_regs[] = { 181static struct tps_info tps65911_regs[] = {
195 { 182 {
196 .name = "vrtc", 183 .name = "vrtc",
184 .vin_name = "vcc7",
197 .enable_time_us = 2200, 185 .enable_time_us = 2200,
198 }, 186 },
199 { 187 {
200 .name = "vio", 188 .name = "vio",
201 .min_uV = 1500000, 189 .vin_name = "vccio",
202 .max_uV = 3300000,
203 .n_voltages = ARRAY_SIZE(VIO_VSEL_table), 190 .n_voltages = ARRAY_SIZE(VIO_VSEL_table),
204 .voltage_table = VIO_VSEL_table, 191 .voltage_table = VIO_VSEL_table,
205 .enable_time_us = 350, 192 .enable_time_us = 350,
206 }, 193 },
207 { 194 {
208 .name = "vdd1", 195 .name = "vdd1",
209 .min_uV = 600000, 196 .vin_name = "vcc1",
210 .max_uV = 4500000, 197 .n_voltages = 0x4C,
211 .n_voltages = 73,
212 .enable_time_us = 350, 198 .enable_time_us = 350,
213 }, 199 },
214 { 200 {
215 .name = "vdd2", 201 .name = "vdd2",
216 .min_uV = 600000, 202 .vin_name = "vcc2",
217 .max_uV = 4500000, 203 .n_voltages = 0x4C,
218 .n_voltages = 73,
219 .enable_time_us = 350, 204 .enable_time_us = 350,
220 }, 205 },
221 { 206 {
222 .name = "vddctrl", 207 .name = "vddctrl",
223 .min_uV = 600000, 208 .n_voltages = 0x44,
224 .max_uV = 1400000,
225 .n_voltages = 65,
226 .enable_time_us = 900, 209 .enable_time_us = 900,
227 }, 210 },
228 { 211 {
229 .name = "ldo1", 212 .name = "ldo1",
230 .min_uV = 1000000, 213 .vin_name = "vcc6",
231 .max_uV = 3300000, 214 .n_voltages = 0x33,
232 .n_voltages = 47,
233 .enable_time_us = 420, 215 .enable_time_us = 420,
234 }, 216 },
235 { 217 {
236 .name = "ldo2", 218 .name = "ldo2",
237 .min_uV = 1000000, 219 .vin_name = "vcc6",
238 .max_uV = 3300000, 220 .n_voltages = 0x33,
239 .n_voltages = 47,
240 .enable_time_us = 420, 221 .enable_time_us = 420,
241 }, 222 },
242 { 223 {
243 .name = "ldo3", 224 .name = "ldo3",
244 .min_uV = 1000000, 225 .vin_name = "vcc5",
245 .max_uV = 3300000, 226 .n_voltages = 0x1A,
246 .n_voltages = 24,
247 .enable_time_us = 230, 227 .enable_time_us = 230,
248 }, 228 },
249 { 229 {
250 .name = "ldo4", 230 .name = "ldo4",
251 .min_uV = 1000000, 231 .vin_name = "vcc5",
252 .max_uV = 3300000, 232 .n_voltages = 0x33,
253 .n_voltages = 47,
254 .enable_time_us = 230, 233 .enable_time_us = 230,
255 }, 234 },
256 { 235 {
257 .name = "ldo5", 236 .name = "ldo5",
258 .min_uV = 1000000, 237 .vin_name = "vcc4",
259 .max_uV = 3300000, 238 .n_voltages = 0x1A,
260 .n_voltages = 24,
261 .enable_time_us = 230, 239 .enable_time_us = 230,
262 }, 240 },
263 { 241 {
264 .name = "ldo6", 242 .name = "ldo6",
265 .min_uV = 1000000, 243 .vin_name = "vcc3",
266 .max_uV = 3300000, 244 .n_voltages = 0x1A,
267 .n_voltages = 24,
268 .enable_time_us = 230, 245 .enable_time_us = 230,
269 }, 246 },
270 { 247 {
271 .name = "ldo7", 248 .name = "ldo7",
272 .min_uV = 1000000, 249 .vin_name = "vcc3",
273 .max_uV = 3300000, 250 .n_voltages = 0x1A,
274 .n_voltages = 24,
275 .enable_time_us = 230, 251 .enable_time_us = 230,
276 }, 252 },
277 { 253 {
278 .name = "ldo8", 254 .name = "ldo8",
279 .min_uV = 1000000, 255 .vin_name = "vcc3",
280 .max_uV = 3300000, 256 .n_voltages = 0x1A,
281 .n_voltages = 24,
282 .enable_time_us = 230, 257 .enable_time_us = 230,
283 }, 258 },
284}; 259};
@@ -321,7 +296,6 @@ struct tps65910_reg {
321 struct tps65910 *mfd; 296 struct tps65910 *mfd;
322 struct regulator_dev **rdev; 297 struct regulator_dev **rdev;
323 struct tps_info **info; 298 struct tps_info **info;
324 struct mutex mutex;
325 int num_regulators; 299 int num_regulators;
326 int mode; 300 int mode;
327 int (*get_ctrl_reg)(int); 301 int (*get_ctrl_reg)(int);
@@ -329,71 +303,6 @@ struct tps65910_reg {
329 unsigned int board_ext_control[TPS65910_NUM_REGS]; 303 unsigned int board_ext_control[TPS65910_NUM_REGS];
330}; 304};
331 305
332static inline int tps65910_read(struct tps65910_reg *pmic, u8 reg)
333{
334 unsigned int val;
335 int err;
336
337 err = tps65910_reg_read(pmic->mfd, reg, &val);
338 if (err)
339 return err;
340
341 return val;
342}
343
344static int tps65910_modify_bits(struct tps65910_reg *pmic, u8 reg,
345 u8 set_mask, u8 clear_mask)
346{
347 int err, data;
348
349 mutex_lock(&pmic->mutex);
350
351 data = tps65910_read(pmic, reg);
352 if (data < 0) {
353 dev_err(pmic->mfd->dev, "Read from reg 0x%x failed\n", reg);
354 err = data;
355 goto out;
356 }
357
358 data &= ~clear_mask;
359 data |= set_mask;
360 err = tps65910_reg_write(pmic->mfd, reg, data);
361 if (err)
362 dev_err(pmic->mfd->dev, "Write for reg 0x%x failed\n", reg);
363
364out:
365 mutex_unlock(&pmic->mutex);
366 return err;
367}
368
369static int tps65910_reg_read_locked(struct tps65910_reg *pmic, u8 reg)
370{
371 int data;
372
373 mutex_lock(&pmic->mutex);
374
375 data = tps65910_read(pmic, reg);
376 if (data < 0)
377 dev_err(pmic->mfd->dev, "Read from reg 0x%x failed\n", reg);
378
379 mutex_unlock(&pmic->mutex);
380 return data;
381}
382
383static int tps65910_reg_write_locked(struct tps65910_reg *pmic, u8 reg, u8 val)
384{
385 int err;
386
387 mutex_lock(&pmic->mutex);
388
389 err = tps65910_reg_write(pmic->mfd, reg, val);
390 if (err < 0)
391 dev_err(pmic->mfd->dev, "Write for reg 0x%x failed\n", reg);
392
393 mutex_unlock(&pmic->mutex);
394 return err;
395}
396
397static int tps65910_get_ctrl_register(int id) 306static int tps65910_get_ctrl_register(int id)
398{ 307{
399 switch (id) { 308 switch (id) {
@@ -462,13 +371,6 @@ static int tps65911_get_ctrl_register(int id)
462 } 371 }
463} 372}
464 373
465static int tps65910_enable_time(struct regulator_dev *dev)
466{
467 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
468 int id = rdev_get_id(dev);
469 return pmic->info[id]->enable_time_us;
470}
471
472static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode) 374static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
473{ 375{
474 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 376 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
@@ -481,8 +383,9 @@ static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
481 383
482 switch (mode) { 384 switch (mode) {
483 case REGULATOR_MODE_NORMAL: 385 case REGULATOR_MODE_NORMAL:
484 return tps65910_modify_bits(pmic, reg, LDO_ST_ON_BIT, 386 return tps65910_reg_update_bits(pmic->mfd, reg,
485 LDO_ST_MODE_BIT); 387 LDO_ST_MODE_BIT | LDO_ST_ON_BIT,
388 LDO_ST_ON_BIT);
486 case REGULATOR_MODE_IDLE: 389 case REGULATOR_MODE_IDLE:
487 value = LDO_ST_ON_BIT | LDO_ST_MODE_BIT; 390 value = LDO_ST_ON_BIT | LDO_ST_MODE_BIT;
488 return tps65910_reg_set_bits(mfd, reg, value); 391 return tps65910_reg_set_bits(mfd, reg, value);
@@ -496,15 +399,15 @@ static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
496static unsigned int tps65910_get_mode(struct regulator_dev *dev) 399static unsigned int tps65910_get_mode(struct regulator_dev *dev)
497{ 400{
498 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 401 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
499 int reg, value, id = rdev_get_id(dev); 402 int ret, reg, value, id = rdev_get_id(dev);
500 403
501 reg = pmic->get_ctrl_reg(id); 404 reg = pmic->get_ctrl_reg(id);
502 if (reg < 0) 405 if (reg < 0)
503 return reg; 406 return reg;
504 407
505 value = tps65910_reg_read_locked(pmic, reg); 408 ret = tps65910_reg_read(pmic->mfd, reg, &value);
506 if (value < 0) 409 if (ret < 0)
507 return value; 410 return ret;
508 411
509 if (!(value & LDO_ST_ON_BIT)) 412 if (!(value & LDO_ST_ON_BIT))
510 return REGULATOR_MODE_STANDBY; 413 return REGULATOR_MODE_STANDBY;
@@ -517,33 +420,51 @@ static unsigned int tps65910_get_mode(struct regulator_dev *dev)
517static int tps65910_get_voltage_dcdc_sel(struct regulator_dev *dev) 420static int tps65910_get_voltage_dcdc_sel(struct regulator_dev *dev)
518{ 421{
519 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 422 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
520 int id = rdev_get_id(dev); 423 int ret, id = rdev_get_id(dev);
521 int opvsel = 0, srvsel = 0, vselmax = 0, mult = 0, sr = 0; 424 int opvsel = 0, srvsel = 0, vselmax = 0, mult = 0, sr = 0;
522 425
523 switch (id) { 426 switch (id) {
524 case TPS65910_REG_VDD1: 427 case TPS65910_REG_VDD1:
525 opvsel = tps65910_reg_read_locked(pmic, TPS65910_VDD1_OP); 428 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1_OP, &opvsel);
526 mult = tps65910_reg_read_locked(pmic, TPS65910_VDD1); 429 if (ret < 0)
430 return ret;
431 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1, &mult);
432 if (ret < 0)
433 return ret;
527 mult = (mult & VDD1_VGAIN_SEL_MASK) >> VDD1_VGAIN_SEL_SHIFT; 434 mult = (mult & VDD1_VGAIN_SEL_MASK) >> VDD1_VGAIN_SEL_SHIFT;
528 srvsel = tps65910_reg_read_locked(pmic, TPS65910_VDD1_SR); 435 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD1_SR, &srvsel);
436 if (ret < 0)
437 return ret;
529 sr = opvsel & VDD1_OP_CMD_MASK; 438 sr = opvsel & VDD1_OP_CMD_MASK;
530 opvsel &= VDD1_OP_SEL_MASK; 439 opvsel &= VDD1_OP_SEL_MASK;
531 srvsel &= VDD1_SR_SEL_MASK; 440 srvsel &= VDD1_SR_SEL_MASK;
532 vselmax = 75; 441 vselmax = 75;
533 break; 442 break;
534 case TPS65910_REG_VDD2: 443 case TPS65910_REG_VDD2:
535 opvsel = tps65910_reg_read_locked(pmic, TPS65910_VDD2_OP); 444 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2_OP, &opvsel);
536 mult = tps65910_reg_read_locked(pmic, TPS65910_VDD2); 445 if (ret < 0)
446 return ret;
447 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2, &mult);
448 if (ret < 0)
449 return ret;
537 mult = (mult & VDD2_VGAIN_SEL_MASK) >> VDD2_VGAIN_SEL_SHIFT; 450 mult = (mult & VDD2_VGAIN_SEL_MASK) >> VDD2_VGAIN_SEL_SHIFT;
538 srvsel = tps65910_reg_read_locked(pmic, TPS65910_VDD2_SR); 451 ret = tps65910_reg_read(pmic->mfd, TPS65910_VDD2_SR, &srvsel);
452 if (ret < 0)
453 return ret;
539 sr = opvsel & VDD2_OP_CMD_MASK; 454 sr = opvsel & VDD2_OP_CMD_MASK;
540 opvsel &= VDD2_OP_SEL_MASK; 455 opvsel &= VDD2_OP_SEL_MASK;
541 srvsel &= VDD2_SR_SEL_MASK; 456 srvsel &= VDD2_SR_SEL_MASK;
542 vselmax = 75; 457 vselmax = 75;
543 break; 458 break;
544 case TPS65911_REG_VDDCTRL: 459 case TPS65911_REG_VDDCTRL:
545 opvsel = tps65910_reg_read_locked(pmic, TPS65911_VDDCTRL_OP); 460 ret = tps65910_reg_read(pmic->mfd, TPS65911_VDDCTRL_OP,
546 srvsel = tps65910_reg_read_locked(pmic, TPS65911_VDDCTRL_SR); 461 &opvsel);
462 if (ret < 0)
463 return ret;
464 ret = tps65910_reg_read(pmic->mfd, TPS65911_VDDCTRL_SR,
465 &srvsel);
466 if (ret < 0)
467 return ret;
547 sr = opvsel & VDDCTRL_OP_CMD_MASK; 468 sr = opvsel & VDDCTRL_OP_CMD_MASK;
548 opvsel &= VDDCTRL_OP_SEL_MASK; 469 opvsel &= VDDCTRL_OP_SEL_MASK;
549 srvsel &= VDDCTRL_SR_SEL_MASK; 470 srvsel &= VDDCTRL_SR_SEL_MASK;
@@ -577,15 +498,15 @@ static int tps65910_get_voltage_dcdc_sel(struct regulator_dev *dev)
577static int tps65910_get_voltage_sel(struct regulator_dev *dev) 498static int tps65910_get_voltage_sel(struct regulator_dev *dev)
578{ 499{
579 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 500 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
580 int reg, value, id = rdev_get_id(dev); 501 int ret, reg, value, id = rdev_get_id(dev);
581 502
582 reg = pmic->get_ctrl_reg(id); 503 reg = pmic->get_ctrl_reg(id);
583 if (reg < 0) 504 if (reg < 0)
584 return reg; 505 return reg;
585 506
586 value = tps65910_reg_read_locked(pmic, reg); 507 ret = tps65910_reg_read(pmic->mfd, reg, &value);
587 if (value < 0) 508 if (ret < 0)
588 return value; 509 return ret;
589 510
590 switch (id) { 511 switch (id) {
591 case TPS65910_REG_VIO: 512 case TPS65910_REG_VIO:
@@ -609,18 +530,20 @@ static int tps65910_get_voltage_sel(struct regulator_dev *dev)
609 530
610static int tps65910_get_voltage_vdd3(struct regulator_dev *dev) 531static int tps65910_get_voltage_vdd3(struct regulator_dev *dev)
611{ 532{
612 return 5 * 1000 * 1000; 533 return dev->desc->volt_table[0];
613} 534}
614 535
615static int tps65911_get_voltage_sel(struct regulator_dev *dev) 536static int tps65911_get_voltage_sel(struct regulator_dev *dev)
616{ 537{
617 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 538 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
618 int id = rdev_get_id(dev); 539 int ret, id = rdev_get_id(dev);
619 u8 value, reg; 540 unsigned int value, reg;
620 541
621 reg = pmic->get_ctrl_reg(id); 542 reg = pmic->get_ctrl_reg(id);
622 543
623 value = tps65910_reg_read_locked(pmic, reg); 544 ret = tps65910_reg_read(pmic->mfd, reg, &value);
545 if (ret < 0)
546 return ret;
624 547
625 switch (id) { 548 switch (id) {
626 case TPS65911_REG_LDO1: 549 case TPS65911_REG_LDO1:
@@ -662,10 +585,10 @@ static int tps65910_set_voltage_dcdc_sel(struct regulator_dev *dev,
662 dcdc_mult--; 585 dcdc_mult--;
663 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3; 586 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
664 587
665 tps65910_modify_bits(pmic, TPS65910_VDD1, 588 tps65910_reg_update_bits(pmic->mfd, TPS65910_VDD1,
666 (dcdc_mult << VDD1_VGAIN_SEL_SHIFT), 589 VDD1_VGAIN_SEL_MASK,
667 VDD1_VGAIN_SEL_MASK); 590 dcdc_mult << VDD1_VGAIN_SEL_SHIFT);
668 tps65910_reg_write_locked(pmic, TPS65910_VDD1_OP, vsel); 591 tps65910_reg_write(pmic->mfd, TPS65910_VDD1_OP, vsel);
669 break; 592 break;
670 case TPS65910_REG_VDD2: 593 case TPS65910_REG_VDD2:
671 dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1; 594 dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
@@ -673,14 +596,14 @@ static int tps65910_set_voltage_dcdc_sel(struct regulator_dev *dev,
673 dcdc_mult--; 596 dcdc_mult--;
674 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3; 597 vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
675 598
676 tps65910_modify_bits(pmic, TPS65910_VDD2, 599 tps65910_reg_update_bits(pmic->mfd, TPS65910_VDD2,
677 (dcdc_mult << VDD2_VGAIN_SEL_SHIFT), 600 VDD1_VGAIN_SEL_MASK,
678 VDD1_VGAIN_SEL_MASK); 601 dcdc_mult << VDD2_VGAIN_SEL_SHIFT);
679 tps65910_reg_write_locked(pmic, TPS65910_VDD2_OP, vsel); 602 tps65910_reg_write(pmic->mfd, TPS65910_VDD2_OP, vsel);
680 break; 603 break;
681 case TPS65911_REG_VDDCTRL: 604 case TPS65911_REG_VDDCTRL:
682 vsel = selector + 3; 605 vsel = selector + 3;
683 tps65910_reg_write_locked(pmic, TPS65911_VDDCTRL_OP, vsel); 606 tps65910_reg_write(pmic->mfd, TPS65911_VDDCTRL_OP, vsel);
684 } 607 }
685 608
686 return 0; 609 return 0;
@@ -706,8 +629,8 @@ static int tps65910_set_voltage_sel(struct regulator_dev *dev,
706 case TPS65910_REG_VAUX2: 629 case TPS65910_REG_VAUX2:
707 case TPS65910_REG_VAUX33: 630 case TPS65910_REG_VAUX33:
708 case TPS65910_REG_VMMC: 631 case TPS65910_REG_VMMC:
709 return tps65910_modify_bits(pmic, reg, 632 return tps65910_reg_update_bits(pmic->mfd, reg, LDO_SEL_MASK,
710 (selector << LDO_SEL_SHIFT), LDO_SEL_MASK); 633 selector << LDO_SEL_SHIFT);
711 } 634 }
712 635
713 return -EINVAL; 636 return -EINVAL;
@@ -727,18 +650,18 @@ static int tps65911_set_voltage_sel(struct regulator_dev *dev,
727 case TPS65911_REG_LDO1: 650 case TPS65911_REG_LDO1:
728 case TPS65911_REG_LDO2: 651 case TPS65911_REG_LDO2:
729 case TPS65911_REG_LDO4: 652 case TPS65911_REG_LDO4:
730 return tps65910_modify_bits(pmic, reg, 653 return tps65910_reg_update_bits(pmic->mfd, reg, LDO1_SEL_MASK,
731 (selector << LDO_SEL_SHIFT), LDO1_SEL_MASK); 654 selector << LDO_SEL_SHIFT);
732 case TPS65911_REG_LDO3: 655 case TPS65911_REG_LDO3:
733 case TPS65911_REG_LDO5: 656 case TPS65911_REG_LDO5:
734 case TPS65911_REG_LDO6: 657 case TPS65911_REG_LDO6:
735 case TPS65911_REG_LDO7: 658 case TPS65911_REG_LDO7:
736 case TPS65911_REG_LDO8: 659 case TPS65911_REG_LDO8:
737 return tps65910_modify_bits(pmic, reg, 660 return tps65910_reg_update_bits(pmic->mfd, reg, LDO3_SEL_MASK,
738 (selector << LDO_SEL_SHIFT), LDO3_SEL_MASK); 661 selector << LDO_SEL_SHIFT);
739 case TPS65910_REG_VIO: 662 case TPS65910_REG_VIO:
740 return tps65910_modify_bits(pmic, reg, 663 return tps65910_reg_update_bits(pmic->mfd, reg, LDO_SEL_MASK,
741 (selector << LDO_SEL_SHIFT), LDO_SEL_MASK); 664 selector << LDO_SEL_SHIFT);
742 } 665 }
743 666
744 return -EINVAL; 667 return -EINVAL;
@@ -768,23 +691,6 @@ static int tps65910_list_voltage_dcdc(struct regulator_dev *dev,
768 return volt * 100 * mult; 691 return volt * 100 * mult;
769} 692}
770 693
771static int tps65910_list_voltage(struct regulator_dev *dev,
772 unsigned selector)
773{
774 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
775 int id = rdev_get_id(dev), voltage;
776
777 if (id < TPS65910_REG_VIO || id > TPS65910_REG_VMMC)
778 return -EINVAL;
779
780 if (selector >= pmic->info[id]->n_voltages)
781 return -EINVAL;
782 else
783 voltage = pmic->info[id]->voltage_table[selector] * 1000;
784
785 return voltage;
786}
787
788static int tps65911_list_voltage(struct regulator_dev *dev, unsigned selector) 694static int tps65911_list_voltage(struct regulator_dev *dev, unsigned selector)
789{ 695{
790 struct tps65910_reg *pmic = rdev_get_drvdata(dev); 696 struct tps65910_reg *pmic = rdev_get_drvdata(dev);
@@ -816,7 +722,7 @@ static int tps65911_list_voltage(struct regulator_dev *dev, unsigned selector)
816 step_mv = 100; 722 step_mv = 100;
817 break; 723 break;
818 case TPS65910_REG_VIO: 724 case TPS65910_REG_VIO:
819 return pmic->info[id]->voltage_table[selector] * 1000; 725 return pmic->info[id]->voltage_table[selector];
820 default: 726 default:
821 return -EINVAL; 727 return -EINVAL;
822 } 728 }
@@ -824,42 +730,16 @@ static int tps65911_list_voltage(struct regulator_dev *dev, unsigned selector)
824 return (LDO_MIN_VOLT + selector * step_mv) * 1000; 730 return (LDO_MIN_VOLT + selector * step_mv) * 1000;
825} 731}
826 732
827static int tps65910_set_voltage_dcdc_time_sel(struct regulator_dev *dev,
828 unsigned int old_selector, unsigned int new_selector)
829{
830 int id = rdev_get_id(dev);
831 int old_volt, new_volt;
832
833 old_volt = tps65910_list_voltage_dcdc(dev, old_selector);
834 if (old_volt < 0)
835 return old_volt;
836
837 new_volt = tps65910_list_voltage_dcdc(dev, new_selector);
838 if (new_volt < 0)
839 return new_volt;
840
841 /* VDD1 and VDD2 are 12.5mV/us, VDDCTRL is 100mV/20us */
842 switch (id) {
843 case TPS65910_REG_VDD1:
844 case TPS65910_REG_VDD2:
845 return DIV_ROUND_UP(abs(old_volt - new_volt), 12500);
846 case TPS65911_REG_VDDCTRL:
847 return DIV_ROUND_UP(abs(old_volt - new_volt), 5000);
848 }
849 return -EINVAL;
850}
851
852/* Regulator ops (except VRTC) */ 733/* Regulator ops (except VRTC) */
853static struct regulator_ops tps65910_ops_dcdc = { 734static struct regulator_ops tps65910_ops_dcdc = {
854 .is_enabled = regulator_is_enabled_regmap, 735 .is_enabled = regulator_is_enabled_regmap,
855 .enable = regulator_enable_regmap, 736 .enable = regulator_enable_regmap,
856 .disable = regulator_disable_regmap, 737 .disable = regulator_disable_regmap,
857 .enable_time = tps65910_enable_time,
858 .set_mode = tps65910_set_mode, 738 .set_mode = tps65910_set_mode,
859 .get_mode = tps65910_get_mode, 739 .get_mode = tps65910_get_mode,
860 .get_voltage_sel = tps65910_get_voltage_dcdc_sel, 740 .get_voltage_sel = tps65910_get_voltage_dcdc_sel,
861 .set_voltage_sel = tps65910_set_voltage_dcdc_sel, 741 .set_voltage_sel = tps65910_set_voltage_dcdc_sel,
862 .set_voltage_time_sel = tps65910_set_voltage_dcdc_time_sel, 742 .set_voltage_time_sel = regulator_set_voltage_time_sel,
863 .list_voltage = tps65910_list_voltage_dcdc, 743 .list_voltage = tps65910_list_voltage_dcdc,
864}; 744};
865 745
@@ -867,30 +747,27 @@ static struct regulator_ops tps65910_ops_vdd3 = {
867 .is_enabled = regulator_is_enabled_regmap, 747 .is_enabled = regulator_is_enabled_regmap,
868 .enable = regulator_enable_regmap, 748 .enable = regulator_enable_regmap,
869 .disable = regulator_disable_regmap, 749 .disable = regulator_disable_regmap,
870 .enable_time = tps65910_enable_time,
871 .set_mode = tps65910_set_mode, 750 .set_mode = tps65910_set_mode,
872 .get_mode = tps65910_get_mode, 751 .get_mode = tps65910_get_mode,
873 .get_voltage = tps65910_get_voltage_vdd3, 752 .get_voltage = tps65910_get_voltage_vdd3,
874 .list_voltage = tps65910_list_voltage, 753 .list_voltage = regulator_list_voltage_table,
875}; 754};
876 755
877static struct regulator_ops tps65910_ops = { 756static struct regulator_ops tps65910_ops = {
878 .is_enabled = regulator_is_enabled_regmap, 757 .is_enabled = regulator_is_enabled_regmap,
879 .enable = regulator_enable_regmap, 758 .enable = regulator_enable_regmap,
880 .disable = regulator_disable_regmap, 759 .disable = regulator_disable_regmap,
881 .enable_time = tps65910_enable_time,
882 .set_mode = tps65910_set_mode, 760 .set_mode = tps65910_set_mode,
883 .get_mode = tps65910_get_mode, 761 .get_mode = tps65910_get_mode,
884 .get_voltage_sel = tps65910_get_voltage_sel, 762 .get_voltage_sel = tps65910_get_voltage_sel,
885 .set_voltage_sel = tps65910_set_voltage_sel, 763 .set_voltage_sel = tps65910_set_voltage_sel,
886 .list_voltage = tps65910_list_voltage, 764 .list_voltage = regulator_list_voltage_table,
887}; 765};
888 766
889static struct regulator_ops tps65911_ops = { 767static struct regulator_ops tps65911_ops = {
890 .is_enabled = regulator_is_enabled_regmap, 768 .is_enabled = regulator_is_enabled_regmap,
891 .enable = regulator_enable_regmap, 769 .enable = regulator_enable_regmap,
892 .disable = regulator_disable_regmap, 770 .disable = regulator_disable_regmap,
893 .enable_time = tps65910_enable_time,
894 .set_mode = tps65910_set_mode, 771 .set_mode = tps65910_set_mode,
895 .get_mode = tps65910_get_mode, 772 .get_mode = tps65910_get_mode,
896 .get_voltage_sel = tps65911_get_voltage_sel, 773 .get_voltage_sel = tps65911_get_voltage_sel,
@@ -996,19 +873,27 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
996 (tps65910_chip_id(mfd) == TPS65911))) { 873 (tps65910_chip_id(mfd) == TPS65911))) {
997 int op_reg_add = pmic->get_ctrl_reg(id) + 1; 874 int op_reg_add = pmic->get_ctrl_reg(id) + 1;
998 int sr_reg_add = pmic->get_ctrl_reg(id) + 2; 875 int sr_reg_add = pmic->get_ctrl_reg(id) + 2;
999 int opvsel = tps65910_reg_read_locked(pmic, op_reg_add); 876 int opvsel, srvsel;
1000 int srvsel = tps65910_reg_read_locked(pmic, sr_reg_add); 877
878 ret = tps65910_reg_read(pmic->mfd, op_reg_add, &opvsel);
879 if (ret < 0)
880 return ret;
881 ret = tps65910_reg_read(pmic->mfd, sr_reg_add, &srvsel);
882 if (ret < 0)
883 return ret;
884
1001 if (opvsel & VDD1_OP_CMD_MASK) { 885 if (opvsel & VDD1_OP_CMD_MASK) {
1002 u8 reg_val = srvsel & VDD1_OP_SEL_MASK; 886 u8 reg_val = srvsel & VDD1_OP_SEL_MASK;
1003 ret = tps65910_reg_write_locked(pmic, op_reg_add, 887
1004 reg_val); 888 ret = tps65910_reg_write(pmic->mfd, op_reg_add,
889 reg_val);
1005 if (ret < 0) { 890 if (ret < 0) {
1006 dev_err(mfd->dev, 891 dev_err(mfd->dev,
1007 "Error in configuring op register\n"); 892 "Error in configuring op register\n");
1008 return ret; 893 return ret;
1009 } 894 }
1010 } 895 }
1011 ret = tps65910_reg_write_locked(pmic, sr_reg_add, 0); 896 ret = tps65910_reg_write(pmic->mfd, sr_reg_add, 0);
1012 if (ret < 0) { 897 if (ret < 0) {
1013 dev_err(mfd->dev, "Error in settting sr register\n"); 898 dev_err(mfd->dev, "Error in settting sr register\n");
1014 return ret; 899 return ret;
@@ -1126,6 +1011,7 @@ static struct tps65910_board *tps65910_parse_dt_reg_data(
1126 "ti,regulator-ext-sleep-control", &prop); 1011 "ti,regulator-ext-sleep-control", &prop);
1127 if (!ret) 1012 if (!ret)
1128 pmic_plat_data->regulator_ext_sleep_control[idx] = prop; 1013 pmic_plat_data->regulator_ext_sleep_control[idx] = prop;
1014
1129 } 1015 }
1130 1016
1131 return pmic_plat_data; 1017 return pmic_plat_data;
@@ -1136,7 +1022,7 @@ static inline struct tps65910_board *tps65910_parse_dt_reg_data(
1136 struct of_regulator_match **tps65910_reg_matches) 1022 struct of_regulator_match **tps65910_reg_matches)
1137{ 1023{
1138 *tps65910_reg_matches = NULL; 1024 *tps65910_reg_matches = NULL;
1139 return 0; 1025 return NULL;
1140} 1026}
1141#endif 1027#endif
1142 1028
@@ -1168,7 +1054,6 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
1168 return -ENOMEM; 1054 return -ENOMEM;
1169 } 1055 }
1170 1056
1171 mutex_init(&pmic->mutex);
1172 pmic->mfd = tps65910; 1057 pmic->mfd = tps65910;
1173 platform_set_drvdata(pdev, pmic); 1058 platform_set_drvdata(pdev, pmic);
1174 1059
@@ -1229,23 +1114,31 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
1229 pmic->info[i] = info; 1114 pmic->info[i] = info;
1230 1115
1231 pmic->desc[i].name = info->name; 1116 pmic->desc[i].name = info->name;
1117 pmic->desc[i].supply_name = info->vin_name;
1232 pmic->desc[i].id = i; 1118 pmic->desc[i].id = i;
1233 pmic->desc[i].n_voltages = info->n_voltages; 1119 pmic->desc[i].n_voltages = info->n_voltages;
1120 pmic->desc[i].enable_time = info->enable_time_us;
1234 1121
1235 if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) { 1122 if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) {
1236 pmic->desc[i].ops = &tps65910_ops_dcdc; 1123 pmic->desc[i].ops = &tps65910_ops_dcdc;
1237 pmic->desc[i].n_voltages = VDD1_2_NUM_VOLT_FINE * 1124 pmic->desc[i].n_voltages = VDD1_2_NUM_VOLT_FINE *
1238 VDD1_2_NUM_VOLT_COARSE; 1125 VDD1_2_NUM_VOLT_COARSE;
1126 pmic->desc[i].ramp_delay = 12500;
1239 } else if (i == TPS65910_REG_VDD3) { 1127 } else if (i == TPS65910_REG_VDD3) {
1240 if (tps65910_chip_id(tps65910) == TPS65910) 1128 if (tps65910_chip_id(tps65910) == TPS65910) {
1241 pmic->desc[i].ops = &tps65910_ops_vdd3; 1129 pmic->desc[i].ops = &tps65910_ops_vdd3;
1242 else 1130 pmic->desc[i].volt_table = info->voltage_table;
1131 } else {
1243 pmic->desc[i].ops = &tps65910_ops_dcdc; 1132 pmic->desc[i].ops = &tps65910_ops_dcdc;
1133 pmic->desc[i].ramp_delay = 5000;
1134 }
1244 } else { 1135 } else {
1245 if (tps65910_chip_id(tps65910) == TPS65910) 1136 if (tps65910_chip_id(tps65910) == TPS65910) {
1246 pmic->desc[i].ops = &tps65910_ops; 1137 pmic->desc[i].ops = &tps65910_ops;
1247 else 1138 pmic->desc[i].volt_table = info->voltage_table;
1139 } else {
1248 pmic->desc[i].ops = &tps65911_ops; 1140 pmic->desc[i].ops = &tps65911_ops;
1141 }
1249 } 1142 }
1250 1143
1251 err = tps65910_set_ext_sleep_config(pmic, i, 1144 err = tps65910_set_ext_sleep_config(pmic, i,
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
index c7390711d954..242fe90dc565 100644
--- a/drivers/regulator/twl-regulator.c
+++ b/drivers/regulator/twl-regulator.c
@@ -43,9 +43,6 @@ struct twlreg_info {
43 u8 table_len; 43 u8 table_len;
44 const u16 *table; 44 const u16 *table;
45 45
46 /* regulator specific turn-on delay */
47 u16 delay;
48
49 /* State REMAP default configuration */ 46 /* State REMAP default configuration */
50 u8 remap; 47 u8 remap;
51 48
@@ -223,20 +220,6 @@ static int twl6030reg_enable(struct regulator_dev *rdev)
223 return ret; 220 return ret;
224} 221}
225 222
226static int twl4030reg_enable_time(struct regulator_dev *rdev)
227{
228 struct twlreg_info *info = rdev_get_drvdata(rdev);
229
230 return info->delay;
231}
232
233static int twl6030reg_enable_time(struct regulator_dev *rdev)
234{
235 struct twlreg_info *info = rdev_get_drvdata(rdev);
236
237 return info->delay;
238}
239
240static int twl4030reg_disable(struct regulator_dev *rdev) 223static int twl4030reg_disable(struct regulator_dev *rdev)
241{ 224{
242 struct twlreg_info *info = rdev_get_drvdata(rdev); 225 struct twlreg_info *info = rdev_get_drvdata(rdev);
@@ -508,7 +491,6 @@ static struct regulator_ops twl4030ldo_ops = {
508 .enable = twl4030reg_enable, 491 .enable = twl4030reg_enable,
509 .disable = twl4030reg_disable, 492 .disable = twl4030reg_disable,
510 .is_enabled = twl4030reg_is_enabled, 493 .is_enabled = twl4030reg_is_enabled,
511 .enable_time = twl4030reg_enable_time,
512 494
513 .set_mode = twl4030reg_set_mode, 495 .set_mode = twl4030reg_set_mode,
514 496
@@ -577,59 +559,53 @@ static struct regulator_ops twl6030coresmps_ops = {
577 .get_voltage = twl6030coresmps_get_voltage, 559 .get_voltage = twl6030coresmps_get_voltage,
578}; 560};
579 561
580static int twl6030ldo_list_voltage(struct regulator_dev *rdev, unsigned index) 562static int twl6030ldo_list_voltage(struct regulator_dev *rdev, unsigned sel)
581{ 563{
582 struct twlreg_info *info = rdev_get_drvdata(rdev); 564 struct twlreg_info *info = rdev_get_drvdata(rdev);
583 565
584 return ((info->min_mV + (index * 100)) * 1000); 566 switch (sel) {
567 case 0:
568 return 0;
569 case 1 ... 24:
570 /* Linear mapping from 00000001 to 00011000:
571 * Absolute voltage value = 1.0 V + 0.1 V × (sel – 00000001)
572 */
573 return (info->min_mV + 100 * (sel - 1)) * 1000;
574 case 25 ... 30:
575 return -EINVAL;
576 case 31:
577 return 2750000;
578 default:
579 return -EINVAL;
580 }
585} 581}
586 582
587static int 583static int
588twl6030ldo_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, 584twl6030ldo_set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
589 unsigned *selector)
590{ 585{
591 struct twlreg_info *info = rdev_get_drvdata(rdev); 586 struct twlreg_info *info = rdev_get_drvdata(rdev);
592 int vsel;
593
594 if ((min_uV/1000 < info->min_mV) || (max_uV/1000 > info->max_mV))
595 return -EDOM;
596
597 /*
598 * Use the below formula to calculate vsel
599 * mV = 1000mv + 100mv * (vsel - 1)
600 */
601 vsel = (min_uV/1000 - 1000)/100 + 1;
602 *selector = vsel;
603 return twlreg_write(info, TWL_MODULE_PM_RECEIVER, VREG_VOLTAGE, vsel);
604 587
588 return twlreg_write(info, TWL_MODULE_PM_RECEIVER, VREG_VOLTAGE,
589 selector);
605} 590}
606 591
607static int twl6030ldo_get_voltage(struct regulator_dev *rdev) 592static int twl6030ldo_get_voltage_sel(struct regulator_dev *rdev)
608{ 593{
609 struct twlreg_info *info = rdev_get_drvdata(rdev); 594 struct twlreg_info *info = rdev_get_drvdata(rdev);
610 int vsel = twlreg_read(info, TWL_MODULE_PM_RECEIVER, 595 int vsel = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_VOLTAGE);
611 VREG_VOLTAGE);
612
613 if (vsel < 0)
614 return vsel;
615 596
616 /* 597 return vsel;
617 * Use the below formula to calculate vsel
618 * mV = 1000mv + 100mv * (vsel - 1)
619 */
620 return (1000 + (100 * (vsel - 1))) * 1000;
621} 598}
622 599
623static struct regulator_ops twl6030ldo_ops = { 600static struct regulator_ops twl6030ldo_ops = {
624 .list_voltage = twl6030ldo_list_voltage, 601 .list_voltage = twl6030ldo_list_voltage,
625 602
626 .set_voltage = twl6030ldo_set_voltage, 603 .set_voltage_sel = twl6030ldo_set_voltage_sel,
627 .get_voltage = twl6030ldo_get_voltage, 604 .get_voltage_sel = twl6030ldo_get_voltage_sel,
628 605
629 .enable = twl6030reg_enable, 606 .enable = twl6030reg_enable,
630 .disable = twl6030reg_disable, 607 .disable = twl6030reg_disable,
631 .is_enabled = twl6030reg_is_enabled, 608 .is_enabled = twl6030reg_is_enabled,
632 .enable_time = twl6030reg_enable_time,
633 609
634 .set_mode = twl6030reg_set_mode, 610 .set_mode = twl6030reg_set_mode,
635 611
@@ -663,7 +639,6 @@ static struct regulator_ops twl4030fixed_ops = {
663 .enable = twl4030reg_enable, 639 .enable = twl4030reg_enable,
664 .disable = twl4030reg_disable, 640 .disable = twl4030reg_disable,
665 .is_enabled = twl4030reg_is_enabled, 641 .is_enabled = twl4030reg_is_enabled,
666 .enable_time = twl4030reg_enable_time,
667 642
668 .set_mode = twl4030reg_set_mode, 643 .set_mode = twl4030reg_set_mode,
669 644
@@ -678,7 +653,6 @@ static struct regulator_ops twl6030fixed_ops = {
678 .enable = twl6030reg_enable, 653 .enable = twl6030reg_enable,
679 .disable = twl6030reg_disable, 654 .disable = twl6030reg_disable,
680 .is_enabled = twl6030reg_is_enabled, 655 .is_enabled = twl6030reg_is_enabled,
681 .enable_time = twl6030reg_enable_time,
682 656
683 .set_mode = twl6030reg_set_mode, 657 .set_mode = twl6030reg_set_mode,
684 658
@@ -689,7 +663,6 @@ static struct regulator_ops twl6030_fixed_resource = {
689 .enable = twl6030reg_enable, 663 .enable = twl6030reg_enable,
690 .disable = twl6030reg_disable, 664 .disable = twl6030reg_disable,
691 .is_enabled = twl6030reg_is_enabled, 665 .is_enabled = twl6030reg_is_enabled,
692 .enable_time = twl6030reg_enable_time,
693 .get_status = twl6030reg_get_status, 666 .get_status = twl6030reg_get_status,
694}; 667};
695 668
@@ -886,7 +859,6 @@ static struct regulator_ops twlsmps_ops = {
886 .enable = twl6030reg_enable, 859 .enable = twl6030reg_enable,
887 .disable = twl6030reg_disable, 860 .disable = twl6030reg_disable,
888 .is_enabled = twl6030reg_is_enabled, 861 .is_enabled = twl6030reg_is_enabled,
889 .enable_time = twl6030reg_enable_time,
890 862
891 .set_mode = twl6030reg_set_mode, 863 .set_mode = twl6030reg_set_mode,
892 864
@@ -909,7 +881,6 @@ static struct twlreg_info TWL4030_INFO_##label = { \
909 .id = num, \ 881 .id = num, \
910 .table_len = ARRAY_SIZE(label##_VSEL_table), \ 882 .table_len = ARRAY_SIZE(label##_VSEL_table), \
911 .table = label##_VSEL_table, \ 883 .table = label##_VSEL_table, \
912 .delay = turnon_delay, \
913 .remap = remap_conf, \ 884 .remap = remap_conf, \
914 .desc = { \ 885 .desc = { \
915 .name = #label, \ 886 .name = #label, \
@@ -918,6 +889,7 @@ static struct twlreg_info TWL4030_INFO_##label = { \
918 .ops = &twl4030ldo_ops, \ 889 .ops = &twl4030ldo_ops, \
919 .type = REGULATOR_VOLTAGE, \ 890 .type = REGULATOR_VOLTAGE, \
920 .owner = THIS_MODULE, \ 891 .owner = THIS_MODULE, \
892 .enable_time = turnon_delay, \
921 }, \ 893 }, \
922 } 894 }
923 895
@@ -925,7 +897,6 @@ static struct twlreg_info TWL4030_INFO_##label = { \
925static struct twlreg_info TWL4030_INFO_##label = { \ 897static struct twlreg_info TWL4030_INFO_##label = { \
926 .base = offset, \ 898 .base = offset, \
927 .id = num, \ 899 .id = num, \
928 .delay = turnon_delay, \
929 .remap = remap_conf, \ 900 .remap = remap_conf, \
930 .desc = { \ 901 .desc = { \
931 .name = #label, \ 902 .name = #label, \
@@ -933,6 +904,7 @@ static struct twlreg_info TWL4030_INFO_##label = { \
933 .ops = &twl4030smps_ops, \ 904 .ops = &twl4030smps_ops, \
934 .type = REGULATOR_VOLTAGE, \ 905 .type = REGULATOR_VOLTAGE, \
935 .owner = THIS_MODULE, \ 906 .owner = THIS_MODULE, \
907 .enable_time = turnon_delay, \
936 }, \ 908 }, \
937 } 909 }
938 910
@@ -955,7 +927,7 @@ static struct twlreg_info TWL6030_INFO_##label = { \
955 .desc = { \ 927 .desc = { \
956 .name = #label, \ 928 .name = #label, \
957 .id = TWL6030_REG_##label, \ 929 .id = TWL6030_REG_##label, \
958 .n_voltages = (max_mVolts - min_mVolts)/100 + 1, \ 930 .n_voltages = 32, \
959 .ops = &twl6030ldo_ops, \ 931 .ops = &twl6030ldo_ops, \
960 .type = REGULATOR_VOLTAGE, \ 932 .type = REGULATOR_VOLTAGE, \
961 .owner = THIS_MODULE, \ 933 .owner = THIS_MODULE, \
@@ -970,7 +942,7 @@ static struct twlreg_info TWL6025_INFO_##label = { \
970 .desc = { \ 942 .desc = { \
971 .name = #label, \ 943 .name = #label, \
972 .id = TWL6025_REG_##label, \ 944 .id = TWL6025_REG_##label, \
973 .n_voltages = ((max_mVolts - min_mVolts)/100) + 1, \ 945 .n_voltages = 32, \
974 .ops = &twl6030ldo_ops, \ 946 .ops = &twl6030ldo_ops, \
975 .type = REGULATOR_VOLTAGE, \ 947 .type = REGULATOR_VOLTAGE, \
976 .owner = THIS_MODULE, \ 948 .owner = THIS_MODULE, \
@@ -983,7 +955,6 @@ static struct twlreg_info TWLFIXED_INFO_##label = { \
983 .base = offset, \ 955 .base = offset, \
984 .id = num, \ 956 .id = num, \
985 .min_mV = mVolts, \ 957 .min_mV = mVolts, \
986 .delay = turnon_delay, \
987 .remap = remap_conf, \ 958 .remap = remap_conf, \
988 .desc = { \ 959 .desc = { \
989 .name = #label, \ 960 .name = #label, \
@@ -992,19 +963,20 @@ static struct twlreg_info TWLFIXED_INFO_##label = { \
992 .ops = &operations, \ 963 .ops = &operations, \
993 .type = REGULATOR_VOLTAGE, \ 964 .type = REGULATOR_VOLTAGE, \
994 .owner = THIS_MODULE, \ 965 .owner = THIS_MODULE, \
966 .enable_time = turnon_delay, \
995 }, \ 967 }, \
996 } 968 }
997 969
998#define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) \ 970#define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) \
999static struct twlreg_info TWLRES_INFO_##label = { \ 971static struct twlreg_info TWLRES_INFO_##label = { \
1000 .base = offset, \ 972 .base = offset, \
1001 .delay = turnon_delay, \
1002 .desc = { \ 973 .desc = { \
1003 .name = #label, \ 974 .name = #label, \
1004 .id = TWL6030_REG_##label, \ 975 .id = TWL6030_REG_##label, \
1005 .ops = &twl6030_fixed_resource, \ 976 .ops = &twl6030_fixed_resource, \
1006 .type = REGULATOR_VOLTAGE, \ 977 .type = REGULATOR_VOLTAGE, \
1007 .owner = THIS_MODULE, \ 978 .owner = THIS_MODULE, \
979 .enable_time = turnon_delay, \
1008 }, \ 980 }, \
1009 } 981 }
1010 982
@@ -1109,7 +1081,6 @@ static u8 twl_get_smps_mult(void)
1109#define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label) 1081#define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label)
1110#define TWL6025_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6025, label) 1082#define TWL6025_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6025, label)
1111#define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label) 1083#define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label)
1112#define TWLRES_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLRES, label)
1113#define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label) 1084#define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label)
1114 1085
1115static const struct of_device_id twl_of_match[] __devinitconst = { 1086static const struct of_device_id twl_of_match[] __devinitconst = {
@@ -1157,7 +1128,6 @@ static const struct of_device_id twl_of_match[] __devinitconst = {
1157 TWLFIXED_OF_MATCH("ti,twl6030-vusb", VUSB), 1128 TWLFIXED_OF_MATCH("ti,twl6030-vusb", VUSB),
1158 TWLFIXED_OF_MATCH("ti,twl6030-v1v8", V1V8), 1129 TWLFIXED_OF_MATCH("ti,twl6030-v1v8", V1V8),
1159 TWLFIXED_OF_MATCH("ti,twl6030-v2v1", V2V1), 1130 TWLFIXED_OF_MATCH("ti,twl6030-v2v1", V2V1),
1160 TWLRES_OF_MATCH("ti,twl6030-clk32kg", CLK32KG),
1161 TWLSMPS_OF_MATCH("ti,twl6025-smps3", SMPS3), 1131 TWLSMPS_OF_MATCH("ti,twl6025-smps3", SMPS3),
1162 TWLSMPS_OF_MATCH("ti,twl6025-smps4", SMPS4), 1132 TWLSMPS_OF_MATCH("ti,twl6025-smps4", SMPS4),
1163 TWLSMPS_OF_MATCH("ti,twl6025-vio", VIO), 1133 TWLSMPS_OF_MATCH("ti,twl6025-vio", VIO),
diff --git a/drivers/regulator/wm831x-dcdc.c b/drivers/regulator/wm831x-dcdc.c
index 099da11e989f..7413885be01b 100644
--- a/drivers/regulator/wm831x-dcdc.c
+++ b/drivers/regulator/wm831x-dcdc.c
@@ -215,8 +215,8 @@ static int wm831x_buckv_list_voltage(struct regulator_dev *rdev,
215 return -EINVAL; 215 return -EINVAL;
216} 216}
217 217
218static int wm831x_buckv_select_min_voltage(struct regulator_dev *rdev, 218static int wm831x_buckv_map_voltage(struct regulator_dev *rdev,
219 int min_uV, int max_uV) 219 int min_uV, int max_uV)
220{ 220{
221 u16 vsel; 221 u16 vsel;
222 222
@@ -251,20 +251,14 @@ static int wm831x_buckv_set_dvs(struct regulator_dev *rdev, int state)
251 return 0; 251 return 0;
252} 252}
253 253
254static int wm831x_buckv_set_voltage(struct regulator_dev *rdev, 254static int wm831x_buckv_set_voltage_sel(struct regulator_dev *rdev,
255 int min_uV, int max_uV, unsigned *selector) 255 unsigned vsel)
256{ 256{
257 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 257 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
258 struct wm831x *wm831x = dcdc->wm831x; 258 struct wm831x *wm831x = dcdc->wm831x;
259 int on_reg = dcdc->base + WM831X_DCDC_ON_CONFIG; 259 int on_reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
260 int dvs_reg = dcdc->base + WM831X_DCDC_DVS_CONTROL; 260 int dvs_reg = dcdc->base + WM831X_DCDC_DVS_CONTROL;
261 int vsel, ret; 261 int ret;
262
263 vsel = wm831x_buckv_select_min_voltage(rdev, min_uV, max_uV);
264 if (vsel < 0)
265 return vsel;
266
267 *selector = vsel;
268 262
269 /* If this value is already set then do a GPIO update if we can */ 263 /* If this value is already set then do a GPIO update if we can */
270 if (dcdc->dvs_gpio && dcdc->on_vsel == vsel) 264 if (dcdc->dvs_gpio && dcdc->on_vsel == vsel)
@@ -315,7 +309,7 @@ static int wm831x_buckv_set_suspend_voltage(struct regulator_dev *rdev,
315 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL; 309 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL;
316 int vsel; 310 int vsel;
317 311
318 vsel = wm831x_buckv_select_min_voltage(rdev, uV, uV); 312 vsel = wm831x_buckv_map_voltage(rdev, uV, uV);
319 if (vsel < 0) 313 if (vsel < 0)
320 return vsel; 314 return vsel;
321 315
@@ -373,9 +367,10 @@ static int wm831x_buckv_get_current_limit(struct regulator_dev *rdev)
373} 367}
374 368
375static struct regulator_ops wm831x_buckv_ops = { 369static struct regulator_ops wm831x_buckv_ops = {
376 .set_voltage = wm831x_buckv_set_voltage, 370 .set_voltage_sel = wm831x_buckv_set_voltage_sel,
377 .get_voltage_sel = wm831x_buckv_get_voltage_sel, 371 .get_voltage_sel = wm831x_buckv_get_voltage_sel,
378 .list_voltage = wm831x_buckv_list_voltage, 372 .list_voltage = wm831x_buckv_list_voltage,
373 .map_voltage = wm831x_buckv_map_voltage,
379 .set_suspend_voltage = wm831x_buckv_set_suspend_voltage, 374 .set_suspend_voltage = wm831x_buckv_set_suspend_voltage,
380 .set_current_limit = wm831x_buckv_set_current_limit, 375 .set_current_limit = wm831x_buckv_set_current_limit,
381 .get_current_limit = wm831x_buckv_get_current_limit, 376 .get_current_limit = wm831x_buckv_get_current_limit,
@@ -599,60 +594,25 @@ static struct platform_driver wm831x_buckv_driver = {
599 * BUCKP specifics 594 * BUCKP specifics
600 */ 595 */
601 596
602static int wm831x_buckp_list_voltage(struct regulator_dev *rdev, 597static int wm831x_buckp_set_suspend_voltage(struct regulator_dev *rdev, int uV)
603 unsigned selector)
604{
605 if (selector <= WM831X_BUCKP_MAX_SELECTOR)
606 return 850000 + (selector * 25000);
607 else
608 return -EINVAL;
609}
610
611static int wm831x_buckp_set_voltage_int(struct regulator_dev *rdev, int reg,
612 int min_uV, int max_uV, int *selector)
613{ 598{
614 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 599 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
615 struct wm831x *wm831x = dcdc->wm831x; 600 struct wm831x *wm831x = dcdc->wm831x;
616 u16 vsel;
617
618 if (min_uV <= 34000000)
619 vsel = (min_uV - 850000) / 25000;
620 else
621 return -EINVAL;
622
623 if (wm831x_buckp_list_voltage(rdev, vsel) > max_uV)
624 return -EINVAL;
625
626 *selector = vsel;
627
628 return wm831x_set_bits(wm831x, reg, WM831X_DC3_ON_VSEL_MASK, vsel);
629}
630
631static int wm831x_buckp_set_voltage(struct regulator_dev *rdev,
632 int min_uV, int max_uV,
633 unsigned *selector)
634{
635 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
636 u16 reg = dcdc->base + WM831X_DCDC_ON_CONFIG;
637
638 return wm831x_buckp_set_voltage_int(rdev, reg, min_uV, max_uV,
639 selector);
640}
641
642static int wm831x_buckp_set_suspend_voltage(struct regulator_dev *rdev,
643 int uV)
644{
645 struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);
646 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL; 601 u16 reg = dcdc->base + WM831X_DCDC_SLEEP_CONTROL;
647 unsigned selector; 602 int sel;
603
604 sel = regulator_map_voltage_linear(rdev, uV, uV);
605 if (sel < 0)
606 return sel;
648 607
649 return wm831x_buckp_set_voltage_int(rdev, reg, uV, uV, &selector); 608 return wm831x_set_bits(wm831x, reg, WM831X_DC3_ON_VSEL_MASK, sel);
650} 609}
651 610
652static struct regulator_ops wm831x_buckp_ops = { 611static struct regulator_ops wm831x_buckp_ops = {
653 .set_voltage = wm831x_buckp_set_voltage, 612 .set_voltage_sel = regulator_set_voltage_sel_regmap,
654 .get_voltage_sel = regulator_get_voltage_sel_regmap, 613 .get_voltage_sel = regulator_get_voltage_sel_regmap,
655 .list_voltage = wm831x_buckp_list_voltage, 614 .list_voltage = regulator_list_voltage_linear,
615 .map_voltage = regulator_map_voltage_linear,
656 .set_suspend_voltage = wm831x_buckp_set_suspend_voltage, 616 .set_suspend_voltage = wm831x_buckp_set_suspend_voltage,
657 617
658 .is_enabled = regulator_is_enabled_regmap, 618 .is_enabled = regulator_is_enabled_regmap,
@@ -715,6 +675,8 @@ static __devinit int wm831x_buckp_probe(struct platform_device *pdev)
715 dcdc->desc.vsel_mask = WM831X_DC3_ON_VSEL_MASK; 675 dcdc->desc.vsel_mask = WM831X_DC3_ON_VSEL_MASK;
716 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE; 676 dcdc->desc.enable_reg = WM831X_DCDC_ENABLE;
717 dcdc->desc.enable_mask = 1 << id; 677 dcdc->desc.enable_mask = 1 << id;
678 dcdc->desc.min_uV = 850000;
679 dcdc->desc.uV_step = 25000;
718 680
719 config.dev = pdev->dev.parent; 681 config.dev = pdev->dev.parent;
720 if (pdata) 682 if (pdata)
diff --git a/drivers/regulator/wm831x-ldo.c b/drivers/regulator/wm831x-ldo.c
index a9a28d8ac185..5cb70ca1e98d 100644
--- a/drivers/regulator/wm831x-ldo.c
+++ b/drivers/regulator/wm831x-ldo.c
@@ -78,13 +78,10 @@ static int wm831x_gp_ldo_list_voltage(struct regulator_dev *rdev,
78 return -EINVAL; 78 return -EINVAL;
79} 79}
80 80
81static int wm831x_gp_ldo_set_voltage_int(struct regulator_dev *rdev, int reg, 81static int wm831x_gp_ldo_map_voltage(struct regulator_dev *rdev,
82 int min_uV, int max_uV, 82 int min_uV, int max_uV)
83 unsigned *selector)
84{ 83{
85 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 84 int volt, vsel;
86 struct wm831x *wm831x = ldo->wm831x;
87 int vsel, ret;
88 85
89 if (min_uV < 900000) 86 if (min_uV < 900000)
90 vsel = 0; 87 vsel = 0;
@@ -94,36 +91,25 @@ static int wm831x_gp_ldo_set_voltage_int(struct regulator_dev *rdev, int reg,
94 vsel = ((min_uV - 1700000) / 100000) 91 vsel = ((min_uV - 1700000) / 100000)
95 + WM831X_GP_LDO_SELECTOR_LOW + 1; 92 + WM831X_GP_LDO_SELECTOR_LOW + 1;
96 93
97 ret = wm831x_gp_ldo_list_voltage(rdev, vsel); 94 volt = wm831x_gp_ldo_list_voltage(rdev, vsel);
98 if (ret < 0) 95 if (volt < min_uV || volt > max_uV)
99 return ret;
100 if (ret < min_uV || ret > max_uV)
101 return -EINVAL; 96 return -EINVAL;
102 97
103 *selector = vsel; 98 return vsel;
104
105 return wm831x_set_bits(wm831x, reg, WM831X_LDO1_ON_VSEL_MASK, vsel);
106}
107
108static int wm831x_gp_ldo_set_voltage(struct regulator_dev *rdev,
109 int min_uV, int max_uV,
110 unsigned *selector)
111{
112 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
113 int reg = ldo->base + WM831X_LDO_ON_CONTROL;
114
115 return wm831x_gp_ldo_set_voltage_int(rdev, reg, min_uV, max_uV,
116 selector);
117} 99}
118 100
119static int wm831x_gp_ldo_set_suspend_voltage(struct regulator_dev *rdev, 101static int wm831x_gp_ldo_set_suspend_voltage(struct regulator_dev *rdev,
120 int uV) 102 int uV)
121{ 103{
122 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 104 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
123 int reg = ldo->base + WM831X_LDO_SLEEP_CONTROL; 105 struct wm831x *wm831x = ldo->wm831x;
124 unsigned int selector; 106 int sel, reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
125 107
126 return wm831x_gp_ldo_set_voltage_int(rdev, reg, uV, uV, &selector); 108 sel = wm831x_gp_ldo_map_voltage(rdev, uV, uV);
109 if (sel < 0)
110 return sel;
111
112 return wm831x_set_bits(wm831x, reg, WM831X_LDO1_ON_VSEL_MASK, sel);
127} 113}
128 114
129static unsigned int wm831x_gp_ldo_get_mode(struct regulator_dev *rdev) 115static unsigned int wm831x_gp_ldo_get_mode(struct regulator_dev *rdev)
@@ -243,8 +229,9 @@ static unsigned int wm831x_gp_ldo_get_optimum_mode(struct regulator_dev *rdev,
243 229
244static struct regulator_ops wm831x_gp_ldo_ops = { 230static struct regulator_ops wm831x_gp_ldo_ops = {
245 .list_voltage = wm831x_gp_ldo_list_voltage, 231 .list_voltage = wm831x_gp_ldo_list_voltage,
232 .map_voltage = wm831x_gp_ldo_map_voltage,
246 .get_voltage_sel = regulator_get_voltage_sel_regmap, 233 .get_voltage_sel = regulator_get_voltage_sel_regmap,
247 .set_voltage = wm831x_gp_ldo_set_voltage, 234 .set_voltage_sel = regulator_set_voltage_sel_regmap,
248 .set_suspend_voltage = wm831x_gp_ldo_set_suspend_voltage, 235 .set_suspend_voltage = wm831x_gp_ldo_set_suspend_voltage,
249 .get_mode = wm831x_gp_ldo_get_mode, 236 .get_mode = wm831x_gp_ldo_get_mode,
250 .set_mode = wm831x_gp_ldo_set_mode, 237 .set_mode = wm831x_gp_ldo_set_mode,
@@ -384,13 +371,10 @@ static int wm831x_aldo_list_voltage(struct regulator_dev *rdev,
384 return -EINVAL; 371 return -EINVAL;
385} 372}
386 373
387static int wm831x_aldo_set_voltage_int(struct regulator_dev *rdev, int reg, 374static int wm831x_aldo_map_voltage(struct regulator_dev *rdev,
388 int min_uV, int max_uV, 375 int min_uV, int max_uV)
389 unsigned *selector)
390{ 376{
391 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 377 int volt, vsel;
392 struct wm831x *wm831x = ldo->wm831x;
393 int vsel, ret;
394 378
395 if (min_uV < 1000000) 379 if (min_uV < 1000000)
396 vsel = 0; 380 vsel = 0;
@@ -400,35 +384,26 @@ static int wm831x_aldo_set_voltage_int(struct regulator_dev *rdev, int reg,
400 vsel = ((min_uV - 1700000) / 100000) 384 vsel = ((min_uV - 1700000) / 100000)
401 + WM831X_ALDO_SELECTOR_LOW + 1; 385 + WM831X_ALDO_SELECTOR_LOW + 1;
402 386
403 ret = wm831x_aldo_list_voltage(rdev, vsel); 387 volt = wm831x_aldo_list_voltage(rdev, vsel);
404 if (ret < 0) 388 if (volt < min_uV || volt > max_uV)
405 return ret;
406 if (ret < min_uV || ret > max_uV)
407 return -EINVAL; 389 return -EINVAL;
408 390
409 *selector = vsel; 391 return vsel;
410
411 return wm831x_set_bits(wm831x, reg, WM831X_LDO7_ON_VSEL_MASK, vsel);
412}
413
414static int wm831x_aldo_set_voltage(struct regulator_dev *rdev,
415 int min_uV, int max_uV, unsigned *selector)
416{
417 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
418 int reg = ldo->base + WM831X_LDO_ON_CONTROL;
419 392
420 return wm831x_aldo_set_voltage_int(rdev, reg, min_uV, max_uV,
421 selector);
422} 393}
423 394
424static int wm831x_aldo_set_suspend_voltage(struct regulator_dev *rdev, 395static int wm831x_aldo_set_suspend_voltage(struct regulator_dev *rdev,
425 int uV) 396 int uV)
426{ 397{
427 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 398 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
428 int reg = ldo->base + WM831X_LDO_SLEEP_CONTROL; 399 struct wm831x *wm831x = ldo->wm831x;
429 unsigned int selector; 400 int sel, reg = ldo->base + WM831X_LDO_SLEEP_CONTROL;
401
402 sel = wm831x_aldo_map_voltage(rdev, uV, uV);
403 if (sel < 0)
404 return sel;
430 405
431 return wm831x_aldo_set_voltage_int(rdev, reg, uV, uV, &selector); 406 return wm831x_set_bits(wm831x, reg, WM831X_LDO7_ON_VSEL_MASK, sel);
432} 407}
433 408
434static unsigned int wm831x_aldo_get_mode(struct regulator_dev *rdev) 409static unsigned int wm831x_aldo_get_mode(struct regulator_dev *rdev)
@@ -506,8 +481,9 @@ static int wm831x_aldo_get_status(struct regulator_dev *rdev)
506 481
507static struct regulator_ops wm831x_aldo_ops = { 482static struct regulator_ops wm831x_aldo_ops = {
508 .list_voltage = wm831x_aldo_list_voltage, 483 .list_voltage = wm831x_aldo_list_voltage,
484 .map_voltage = wm831x_aldo_map_voltage,
509 .get_voltage_sel = regulator_get_voltage_sel_regmap, 485 .get_voltage_sel = regulator_get_voltage_sel_regmap,
510 .set_voltage = wm831x_aldo_set_voltage, 486 .set_voltage_sel = regulator_set_voltage_sel_regmap,
511 .set_suspend_voltage = wm831x_aldo_set_suspend_voltage, 487 .set_suspend_voltage = wm831x_aldo_set_suspend_voltage,
512 .get_mode = wm831x_aldo_get_mode, 488 .get_mode = wm831x_aldo_get_mode,
513 .set_mode = wm831x_aldo_set_mode, 489 .set_mode = wm831x_aldo_set_mode,
@@ -628,47 +604,18 @@ static struct platform_driver wm831x_aldo_driver = {
628 604
629#define WM831X_ALIVE_LDO_MAX_SELECTOR 0xf 605#define WM831X_ALIVE_LDO_MAX_SELECTOR 0xf
630 606
631static int wm831x_alive_ldo_set_voltage_int(struct regulator_dev *rdev,
632 int reg,
633 int min_uV, int max_uV,
634 unsigned *selector)
635{
636 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
637 struct wm831x *wm831x = ldo->wm831x;
638 int vsel, ret;
639
640 vsel = (min_uV - 800000) / 50000;
641
642 ret = regulator_list_voltage_linear(rdev, vsel);
643 if (ret < 0)
644 return ret;
645 if (ret < min_uV || ret > max_uV)
646 return -EINVAL;
647
648 *selector = vsel;
649
650 return wm831x_set_bits(wm831x, reg, WM831X_LDO11_ON_VSEL_MASK, vsel);
651}
652
653static int wm831x_alive_ldo_set_voltage(struct regulator_dev *rdev,
654 int min_uV, int max_uV,
655 unsigned *selector)
656{
657 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
658 int reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL;
659
660 return wm831x_alive_ldo_set_voltage_int(rdev, reg, min_uV, max_uV,
661 selector);
662}
663
664static int wm831x_alive_ldo_set_suspend_voltage(struct regulator_dev *rdev, 607static int wm831x_alive_ldo_set_suspend_voltage(struct regulator_dev *rdev,
665 int uV) 608 int uV)
666{ 609{
667 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 610 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev);
668 int reg = ldo->base + WM831X_ALIVE_LDO_SLEEP_CONTROL; 611 struct wm831x *wm831x = ldo->wm831x;
669 unsigned selector; 612 int sel, reg = ldo->base + WM831X_ALIVE_LDO_SLEEP_CONTROL;
613
614 sel = regulator_map_voltage_linear(rdev, uV, uV);
615 if (sel < 0)
616 return sel;
670 617
671 return wm831x_alive_ldo_set_voltage_int(rdev, reg, uV, uV, &selector); 618 return wm831x_set_bits(wm831x, reg, WM831X_LDO11_ON_VSEL_MASK, sel);
672} 619}
673 620
674static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev) 621static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev)
@@ -690,8 +637,9 @@ static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev)
690 637
691static struct regulator_ops wm831x_alive_ldo_ops = { 638static struct regulator_ops wm831x_alive_ldo_ops = {
692 .list_voltage = regulator_list_voltage_linear, 639 .list_voltage = regulator_list_voltage_linear,
640 .map_voltage = regulator_map_voltage_linear,
693 .get_voltage_sel = regulator_get_voltage_sel_regmap, 641 .get_voltage_sel = regulator_get_voltage_sel_regmap,
694 .set_voltage = wm831x_alive_ldo_set_voltage, 642 .set_voltage_sel = regulator_set_voltage_sel_regmap,
695 .set_suspend_voltage = wm831x_alive_ldo_set_suspend_voltage, 643 .set_suspend_voltage = wm831x_alive_ldo_set_suspend_voltage,
696 .get_status = wm831x_alive_ldo_get_status, 644 .get_status = wm831x_alive_ldo_get_status,
697 645
@@ -753,6 +701,7 @@ static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev)
753 ldo->desc.enable_mask = 1 << id; 701 ldo->desc.enable_mask = 1 << id;
754 ldo->desc.min_uV = 800000; 702 ldo->desc.min_uV = 800000;
755 ldo->desc.uV_step = 50000; 703 ldo->desc.uV_step = 50000;
704 ldo->desc.enable_time = 1000;
756 705
757 config.dev = pdev->dev.parent; 706 config.dev = pdev->dev.parent;
758 if (pdata) 707 if (pdata)
diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c
index 94e550dc70b6..7f0fa22ef2aa 100644
--- a/drivers/regulator/wm8350-regulator.c
+++ b/drivers/regulator/wm8350-regulator.c
@@ -108,33 +108,6 @@ static int get_isink_val(int min_uA, int max_uA, u16 *setting)
108 return -EINVAL; 108 return -EINVAL;
109} 109}
110 110
111static inline int wm8350_ldo_val_to_mvolts(unsigned int val)
112{
113 if (val < 16)
114 return (val * 50) + 900;
115 else
116 return ((val - 16) * 100) + 1800;
117
118}
119
120static inline unsigned int wm8350_ldo_mvolts_to_val(int mV)
121{
122 if (mV < 1800)
123 return (mV - 900) / 50;
124 else
125 return ((mV - 1800) / 100) + 16;
126}
127
128static inline int wm8350_dcdc_val_to_mvolts(unsigned int val)
129{
130 return (val * 25) + 850;
131}
132
133static inline unsigned int wm8350_dcdc_mvolts_to_val(int mV)
134{
135 return (mV - 850) / 25;
136}
137
138static int wm8350_isink_set_current(struct regulator_dev *rdev, int min_uA, 111static int wm8350_isink_set_current(struct regulator_dev *rdev, int min_uA,
139 int max_uA) 112 int max_uA)
140{ 113{
@@ -359,104 +332,13 @@ int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode,
359} 332}
360EXPORT_SYMBOL_GPL(wm8350_isink_set_flash); 333EXPORT_SYMBOL_GPL(wm8350_isink_set_flash);
361 334
362static int wm8350_dcdc_set_voltage(struct regulator_dev *rdev, int min_uV,
363 int max_uV, unsigned *selector)
364{
365 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
366 int volt_reg, dcdc = rdev_get_id(rdev), mV,
367 min_mV = min_uV / 1000, max_mV = max_uV / 1000;
368 u16 val;
369
370 if (min_mV < 850 || min_mV > 4025)
371 return -EINVAL;
372 if (max_mV < 850 || max_mV > 4025)
373 return -EINVAL;
374
375 /* step size is 25mV */
376 mV = (min_mV - 826) / 25;
377 if (wm8350_dcdc_val_to_mvolts(mV) > max_mV)
378 return -EINVAL;
379 BUG_ON(wm8350_dcdc_val_to_mvolts(mV) < min_mV);
380
381 switch (dcdc) {
382 case WM8350_DCDC_1:
383 volt_reg = WM8350_DCDC1_CONTROL;
384 break;
385 case WM8350_DCDC_3:
386 volt_reg = WM8350_DCDC3_CONTROL;
387 break;
388 case WM8350_DCDC_4:
389 volt_reg = WM8350_DCDC4_CONTROL;
390 break;
391 case WM8350_DCDC_6:
392 volt_reg = WM8350_DCDC6_CONTROL;
393 break;
394 case WM8350_DCDC_2:
395 case WM8350_DCDC_5:
396 default:
397 return -EINVAL;
398 }
399
400 *selector = mV;
401
402 /* all DCDCs have same mV bits */
403 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_DC1_VSEL_MASK;
404 wm8350_reg_write(wm8350, volt_reg, val | mV);
405 return 0;
406}
407
408static int wm8350_dcdc_get_voltage_sel(struct regulator_dev *rdev)
409{
410 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
411 int volt_reg, dcdc = rdev_get_id(rdev);
412
413 switch (dcdc) {
414 case WM8350_DCDC_1:
415 volt_reg = WM8350_DCDC1_CONTROL;
416 break;
417 case WM8350_DCDC_3:
418 volt_reg = WM8350_DCDC3_CONTROL;
419 break;
420 case WM8350_DCDC_4:
421 volt_reg = WM8350_DCDC4_CONTROL;
422 break;
423 case WM8350_DCDC_6:
424 volt_reg = WM8350_DCDC6_CONTROL;
425 break;
426 case WM8350_DCDC_2:
427 case WM8350_DCDC_5:
428 default:
429 return -EINVAL;
430 }
431
432 /* all DCDCs have same mV bits */
433 return wm8350_reg_read(wm8350, volt_reg) & WM8350_DC1_VSEL_MASK;
434}
435
436static int wm8350_dcdc_list_voltage(struct regulator_dev *rdev,
437 unsigned selector)
438{
439 if (selector > WM8350_DCDC_MAX_VSEL)
440 return -EINVAL;
441 return wm8350_dcdc_val_to_mvolts(selector) * 1000;
442}
443
444static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV) 335static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV)
445{ 336{
446 struct wm8350 *wm8350 = rdev_get_drvdata(rdev); 337 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
447 int volt_reg, mV = uV / 1000, dcdc = rdev_get_id(rdev); 338 int sel, volt_reg, dcdc = rdev_get_id(rdev);
448 u16 val; 339 u16 val;
449 340
450 dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, dcdc, mV); 341 dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, dcdc, uV / 1000);
451
452 if (mV && (mV < 850 || mV > 4025)) {
453 dev_err(wm8350->dev,
454 "DCDC%d suspend voltage %d mV out of range\n",
455 dcdc, mV);
456 return -EINVAL;
457 }
458 if (mV == 0)
459 mV = 850;
460 342
461 switch (dcdc) { 343 switch (dcdc) {
462 case WM8350_DCDC_1: 344 case WM8350_DCDC_1:
@@ -477,10 +359,13 @@ static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV)
477 return -EINVAL; 359 return -EINVAL;
478 } 360 }
479 361
362 sel = regulator_map_voltage_linear(rdev, uV, uV);
363 if (sel < 0)
364 return -EINVAL;
365
480 /* all DCDCs have same mV bits */ 366 /* all DCDCs have same mV bits */
481 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_DC1_VSEL_MASK; 367 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_DC1_VSEL_MASK;
482 wm8350_reg_write(wm8350, volt_reg, 368 wm8350_reg_write(wm8350, volt_reg, val | sel);
483 val | wm8350_dcdc_mvolts_to_val(mV));
484 return 0; 369 return 0;
485} 370}
486 371
@@ -657,19 +542,49 @@ static int wm8350_dcdc_set_suspend_mode(struct regulator_dev *rdev,
657 return 0; 542 return 0;
658} 543}
659 544
545static int wm8350_ldo_list_voltage(struct regulator_dev *rdev,
546 unsigned selector)
547{
548 if (selector > WM8350_LDO1_VSEL_MASK)
549 return -EINVAL;
550
551 if (selector < 16)
552 return (selector * 50000) + 900000;
553 else
554 return ((selector - 16) * 100000) + 1800000;
555}
556
557static int wm8350_ldo_map_voltage(struct regulator_dev *rdev, int min_uV,
558 int max_uV)
559{
560 int volt, sel;
561 int min_mV = min_uV / 1000;
562 int max_mV = max_uV / 1000;
563
564 if (min_mV < 900 || min_mV > 3300)
565 return -EINVAL;
566 if (max_mV < 900 || max_mV > 3300)
567 return -EINVAL;
568
569 if (min_mV < 1800) /* step size is 50mV < 1800mV */
570 sel = DIV_ROUND_UP(min_uV - 900, 50);
571 else /* step size is 100mV > 1800mV */
572 sel = DIV_ROUND_UP(min_uV - 1800, 100) + 16;
573
574 volt = wm8350_ldo_list_voltage(rdev, sel);
575 if (volt < min_uV || volt > max_uV)
576 return -EINVAL;
577
578 return sel;
579}
580
660static int wm8350_ldo_set_suspend_voltage(struct regulator_dev *rdev, int uV) 581static int wm8350_ldo_set_suspend_voltage(struct regulator_dev *rdev, int uV)
661{ 582{
662 struct wm8350 *wm8350 = rdev_get_drvdata(rdev); 583 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
663 int volt_reg, mV = uV / 1000, ldo = rdev_get_id(rdev); 584 int sel, volt_reg, ldo = rdev_get_id(rdev);
664 u16 val; 585 u16 val;
665 586
666 dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, ldo, mV); 587 dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, ldo, uV / 1000);
667
668 if (mV < 900 || mV > 3300) {
669 dev_err(wm8350->dev, "LDO%d voltage %d mV out of range\n",
670 ldo, mV);
671 return -EINVAL;
672 }
673 588
674 switch (ldo) { 589 switch (ldo) {
675 case WM8350_LDO_1: 590 case WM8350_LDO_1:
@@ -688,10 +603,13 @@ static int wm8350_ldo_set_suspend_voltage(struct regulator_dev *rdev, int uV)
688 return -EINVAL; 603 return -EINVAL;
689 } 604 }
690 605
606 sel = wm8350_ldo_map_voltage(rdev, uV, uV);
607 if (sel < 0)
608 return -EINVAL;
609
691 /* all LDOs have same mV bits */ 610 /* all LDOs have same mV bits */
692 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_VSEL_MASK; 611 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_VSEL_MASK;
693 wm8350_reg_write(wm8350, volt_reg, 612 wm8350_reg_write(wm8350, volt_reg, val | sel);
694 val | wm8350_ldo_mvolts_to_val(mV));
695 return 0; 613 return 0;
696} 614}
697 615
@@ -753,92 +671,6 @@ static int wm8350_ldo_set_suspend_disable(struct regulator_dev *rdev)
753 return 0; 671 return 0;
754} 672}
755 673
756static int wm8350_ldo_set_voltage(struct regulator_dev *rdev, int min_uV,
757 int max_uV, unsigned *selector)
758{
759 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
760 int volt_reg, ldo = rdev_get_id(rdev), mV, min_mV = min_uV / 1000,
761 max_mV = max_uV / 1000;
762 u16 val;
763
764 if (min_mV < 900 || min_mV > 3300)
765 return -EINVAL;
766 if (max_mV < 900 || max_mV > 3300)
767 return -EINVAL;
768
769 if (min_mV < 1800) {
770 /* step size is 50mV < 1800mV */
771 mV = (min_mV - 851) / 50;
772 if (wm8350_ldo_val_to_mvolts(mV) > max_mV)
773 return -EINVAL;
774 BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV);
775 } else {
776 /* step size is 100mV > 1800mV */
777 mV = ((min_mV - 1701) / 100) + 16;
778 if (wm8350_ldo_val_to_mvolts(mV) > max_mV)
779 return -EINVAL;
780 BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV);
781 }
782
783 switch (ldo) {
784 case WM8350_LDO_1:
785 volt_reg = WM8350_LDO1_CONTROL;
786 break;
787 case WM8350_LDO_2:
788 volt_reg = WM8350_LDO2_CONTROL;
789 break;
790 case WM8350_LDO_3:
791 volt_reg = WM8350_LDO3_CONTROL;
792 break;
793 case WM8350_LDO_4:
794 volt_reg = WM8350_LDO4_CONTROL;
795 break;
796 default:
797 return -EINVAL;
798 }
799
800 *selector = mV;
801
802 /* all LDOs have same mV bits */
803 val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_VSEL_MASK;
804 wm8350_reg_write(wm8350, volt_reg, val | mV);
805 return 0;
806}
807
808static int wm8350_ldo_get_voltage_sel(struct regulator_dev *rdev)
809{
810 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
811 int volt_reg, ldo = rdev_get_id(rdev);
812
813 switch (ldo) {
814 case WM8350_LDO_1:
815 volt_reg = WM8350_LDO1_CONTROL;
816 break;
817 case WM8350_LDO_2:
818 volt_reg = WM8350_LDO2_CONTROL;
819 break;
820 case WM8350_LDO_3:
821 volt_reg = WM8350_LDO3_CONTROL;
822 break;
823 case WM8350_LDO_4:
824 volt_reg = WM8350_LDO4_CONTROL;
825 break;
826 default:
827 return -EINVAL;
828 }
829
830 /* all LDOs have same mV bits */
831 return wm8350_reg_read(wm8350, volt_reg) & WM8350_LDO1_VSEL_MASK;
832}
833
834static int wm8350_ldo_list_voltage(struct regulator_dev *rdev,
835 unsigned selector)
836{
837 if (selector > WM8350_LDO1_VSEL_MASK)
838 return -EINVAL;
839 return wm8350_ldo_val_to_mvolts(selector) * 1000;
840}
841
842int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start, 674int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,
843 u16 stop, u16 fault) 675 u16 stop, u16 fault)
844{ 676{
@@ -959,63 +791,6 @@ int wm8350_dcdc25_set_mode(struct wm8350 *wm8350, int dcdc, u16 mode,
959} 791}
960EXPORT_SYMBOL_GPL(wm8350_dcdc25_set_mode); 792EXPORT_SYMBOL_GPL(wm8350_dcdc25_set_mode);
961 793
962static int wm8350_dcdc_enable(struct regulator_dev *rdev)
963{
964 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
965 int dcdc = rdev_get_id(rdev);
966 u16 shift;
967
968 if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6)
969 return -EINVAL;
970
971 shift = dcdc - WM8350_DCDC_1;
972 wm8350_set_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift);
973 return 0;
974}
975
976static int wm8350_dcdc_disable(struct regulator_dev *rdev)
977{
978 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
979 int dcdc = rdev_get_id(rdev);
980 u16 shift;
981
982 if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6)
983 return -EINVAL;
984
985 shift = dcdc - WM8350_DCDC_1;
986 wm8350_clear_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift);
987
988 return 0;
989}
990
991static int wm8350_ldo_enable(struct regulator_dev *rdev)
992{
993 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
994 int ldo = rdev_get_id(rdev);
995 u16 shift;
996
997 if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4)
998 return -EINVAL;
999
1000 shift = (ldo - WM8350_LDO_1) + 8;
1001 wm8350_set_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift);
1002 return 0;
1003}
1004
1005static int wm8350_ldo_disable(struct regulator_dev *rdev)
1006{
1007 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
1008 int ldo = rdev_get_id(rdev);
1009 u16 shift;
1010
1011 if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4)
1012 return -EINVAL;
1013
1014 shift = (ldo - WM8350_LDO_1) + 8;
1015 wm8350_clear_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift);
1016 return 0;
1017}
1018
1019static int force_continuous_enable(struct wm8350 *wm8350, int dcdc, int enable) 794static int force_continuous_enable(struct wm8350 *wm8350, int dcdc, int enable)
1020{ 795{
1021 int reg = 0, ret; 796 int reg = 0, ret;
@@ -1197,42 +972,17 @@ static unsigned int wm8350_dcdc_get_optimum_mode(struct regulator_dev *rdev,
1197 return mode; 972 return mode;
1198} 973}
1199 974
1200static int wm8350_dcdc_is_enabled(struct regulator_dev *rdev)
1201{
1202 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
1203 int dcdc = rdev_get_id(rdev), shift;
1204
1205 if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6)
1206 return -EINVAL;
1207
1208 shift = dcdc - WM8350_DCDC_1;
1209 return wm8350_reg_read(wm8350, WM8350_DCDC_LDO_REQUESTED)
1210 & (1 << shift);
1211}
1212
1213static int wm8350_ldo_is_enabled(struct regulator_dev *rdev)
1214{
1215 struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
1216 int ldo = rdev_get_id(rdev), shift;
1217
1218 if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4)
1219 return -EINVAL;
1220
1221 shift = (ldo - WM8350_LDO_1) + 8;
1222 return wm8350_reg_read(wm8350, WM8350_DCDC_LDO_REQUESTED)
1223 & (1 << shift);
1224}
1225
1226static struct regulator_ops wm8350_dcdc_ops = { 975static struct regulator_ops wm8350_dcdc_ops = {
1227 .set_voltage = wm8350_dcdc_set_voltage, 976 .set_voltage_sel = regulator_set_voltage_sel_regmap,
1228 .get_voltage_sel = wm8350_dcdc_get_voltage_sel, 977 .get_voltage_sel = regulator_get_voltage_sel_regmap,
1229 .list_voltage = wm8350_dcdc_list_voltage, 978 .list_voltage = regulator_list_voltage_linear,
1230 .enable = wm8350_dcdc_enable, 979 .map_voltage = regulator_map_voltage_linear,
1231 .disable = wm8350_dcdc_disable, 980 .enable = regulator_enable_regmap,
981 .disable = regulator_disable_regmap,
982 .is_enabled = regulator_is_enabled_regmap,
1232 .get_mode = wm8350_dcdc_get_mode, 983 .get_mode = wm8350_dcdc_get_mode,
1233 .set_mode = wm8350_dcdc_set_mode, 984 .set_mode = wm8350_dcdc_set_mode,
1234 .get_optimum_mode = wm8350_dcdc_get_optimum_mode, 985 .get_optimum_mode = wm8350_dcdc_get_optimum_mode,
1235 .is_enabled = wm8350_dcdc_is_enabled,
1236 .set_suspend_voltage = wm8350_dcdc_set_suspend_voltage, 986 .set_suspend_voltage = wm8350_dcdc_set_suspend_voltage,
1237 .set_suspend_enable = wm8350_dcdc_set_suspend_enable, 987 .set_suspend_enable = wm8350_dcdc_set_suspend_enable,
1238 .set_suspend_disable = wm8350_dcdc_set_suspend_disable, 988 .set_suspend_disable = wm8350_dcdc_set_suspend_disable,
@@ -1240,20 +990,21 @@ static struct regulator_ops wm8350_dcdc_ops = {
1240}; 990};
1241 991
1242static struct regulator_ops wm8350_dcdc2_5_ops = { 992static struct regulator_ops wm8350_dcdc2_5_ops = {
1243 .enable = wm8350_dcdc_enable, 993 .enable = regulator_enable_regmap,
1244 .disable = wm8350_dcdc_disable, 994 .disable = regulator_disable_regmap,
1245 .is_enabled = wm8350_dcdc_is_enabled, 995 .is_enabled = regulator_is_enabled_regmap,
1246 .set_suspend_enable = wm8350_dcdc25_set_suspend_enable, 996 .set_suspend_enable = wm8350_dcdc25_set_suspend_enable,
1247 .set_suspend_disable = wm8350_dcdc25_set_suspend_disable, 997 .set_suspend_disable = wm8350_dcdc25_set_suspend_disable,
1248}; 998};
1249 999
1250static struct regulator_ops wm8350_ldo_ops = { 1000static struct regulator_ops wm8350_ldo_ops = {
1251 .set_voltage = wm8350_ldo_set_voltage, 1001 .map_voltage = wm8350_ldo_map_voltage,
1252 .get_voltage_sel = wm8350_ldo_get_voltage_sel, 1002 .set_voltage_sel = regulator_set_voltage_sel_regmap,
1003 .get_voltage_sel = regulator_get_voltage_sel_regmap,
1253 .list_voltage = wm8350_ldo_list_voltage, 1004 .list_voltage = wm8350_ldo_list_voltage,
1254 .enable = wm8350_ldo_enable, 1005 .enable = regulator_enable_regmap,
1255 .disable = wm8350_ldo_disable, 1006 .disable = regulator_disable_regmap,
1256 .is_enabled = wm8350_ldo_is_enabled, 1007 .is_enabled = regulator_is_enabled_regmap,
1257 .get_mode = wm8350_ldo_get_mode, 1008 .get_mode = wm8350_ldo_get_mode,
1258 .set_suspend_voltage = wm8350_ldo_set_suspend_voltage, 1009 .set_suspend_voltage = wm8350_ldo_set_suspend_voltage,
1259 .set_suspend_enable = wm8350_ldo_set_suspend_enable, 1010 .set_suspend_enable = wm8350_ldo_set_suspend_enable,
@@ -1277,6 +1028,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1277 .irq = WM8350_IRQ_UV_DC1, 1028 .irq = WM8350_IRQ_UV_DC1,
1278 .type = REGULATOR_VOLTAGE, 1029 .type = REGULATOR_VOLTAGE,
1279 .n_voltages = WM8350_DCDC_MAX_VSEL + 1, 1030 .n_voltages = WM8350_DCDC_MAX_VSEL + 1,
1031 .min_uV = 850000,
1032 .uV_step = 25000,
1033 .vsel_reg = WM8350_DCDC1_CONTROL,
1034 .vsel_mask = WM8350_DC1_VSEL_MASK,
1035 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1036 .enable_mask = WM8350_DC1_ENA,
1280 .owner = THIS_MODULE, 1037 .owner = THIS_MODULE,
1281 }, 1038 },
1282 { 1039 {
@@ -1285,6 +1042,8 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1285 .ops = &wm8350_dcdc2_5_ops, 1042 .ops = &wm8350_dcdc2_5_ops,
1286 .irq = WM8350_IRQ_UV_DC2, 1043 .irq = WM8350_IRQ_UV_DC2,
1287 .type = REGULATOR_VOLTAGE, 1044 .type = REGULATOR_VOLTAGE,
1045 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1046 .enable_mask = WM8350_DC2_ENA,
1288 .owner = THIS_MODULE, 1047 .owner = THIS_MODULE,
1289 }, 1048 },
1290 { 1049 {
@@ -1294,6 +1053,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1294 .irq = WM8350_IRQ_UV_DC3, 1053 .irq = WM8350_IRQ_UV_DC3,
1295 .type = REGULATOR_VOLTAGE, 1054 .type = REGULATOR_VOLTAGE,
1296 .n_voltages = WM8350_DCDC_MAX_VSEL + 1, 1055 .n_voltages = WM8350_DCDC_MAX_VSEL + 1,
1056 .min_uV = 850000,
1057 .uV_step = 25000,
1058 .vsel_reg = WM8350_DCDC3_CONTROL,
1059 .vsel_mask = WM8350_DC3_VSEL_MASK,
1060 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1061 .enable_mask = WM8350_DC3_ENA,
1297 .owner = THIS_MODULE, 1062 .owner = THIS_MODULE,
1298 }, 1063 },
1299 { 1064 {
@@ -1303,6 +1068,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1303 .irq = WM8350_IRQ_UV_DC4, 1068 .irq = WM8350_IRQ_UV_DC4,
1304 .type = REGULATOR_VOLTAGE, 1069 .type = REGULATOR_VOLTAGE,
1305 .n_voltages = WM8350_DCDC_MAX_VSEL + 1, 1070 .n_voltages = WM8350_DCDC_MAX_VSEL + 1,
1071 .min_uV = 850000,
1072 .uV_step = 25000,
1073 .vsel_reg = WM8350_DCDC4_CONTROL,
1074 .vsel_mask = WM8350_DC4_VSEL_MASK,
1075 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1076 .enable_mask = WM8350_DC4_ENA,
1306 .owner = THIS_MODULE, 1077 .owner = THIS_MODULE,
1307 }, 1078 },
1308 { 1079 {
@@ -1311,6 +1082,8 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1311 .ops = &wm8350_dcdc2_5_ops, 1082 .ops = &wm8350_dcdc2_5_ops,
1312 .irq = WM8350_IRQ_UV_DC5, 1083 .irq = WM8350_IRQ_UV_DC5,
1313 .type = REGULATOR_VOLTAGE, 1084 .type = REGULATOR_VOLTAGE,
1085 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1086 .enable_mask = WM8350_DC5_ENA,
1314 .owner = THIS_MODULE, 1087 .owner = THIS_MODULE,
1315 }, 1088 },
1316 { 1089 {
@@ -1320,6 +1093,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1320 .irq = WM8350_IRQ_UV_DC6, 1093 .irq = WM8350_IRQ_UV_DC6,
1321 .type = REGULATOR_VOLTAGE, 1094 .type = REGULATOR_VOLTAGE,
1322 .n_voltages = WM8350_DCDC_MAX_VSEL + 1, 1095 .n_voltages = WM8350_DCDC_MAX_VSEL + 1,
1096 .min_uV = 850000,
1097 .uV_step = 25000,
1098 .vsel_reg = WM8350_DCDC6_CONTROL,
1099 .vsel_mask = WM8350_DC6_VSEL_MASK,
1100 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1101 .enable_mask = WM8350_DC6_ENA,
1323 .owner = THIS_MODULE, 1102 .owner = THIS_MODULE,
1324 }, 1103 },
1325 { 1104 {
@@ -1329,6 +1108,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1329 .irq = WM8350_IRQ_UV_LDO1, 1108 .irq = WM8350_IRQ_UV_LDO1,
1330 .type = REGULATOR_VOLTAGE, 1109 .type = REGULATOR_VOLTAGE,
1331 .n_voltages = WM8350_LDO1_VSEL_MASK + 1, 1110 .n_voltages = WM8350_LDO1_VSEL_MASK + 1,
1111 .vsel_reg = WM8350_LDO1_CONTROL,
1112 .vsel_mask = WM8350_LDO1_VSEL_MASK,
1113 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1114 .enable_mask = WM8350_LDO1_ENA,
1332 .owner = THIS_MODULE, 1115 .owner = THIS_MODULE,
1333 }, 1116 },
1334 { 1117 {
@@ -1338,6 +1121,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1338 .irq = WM8350_IRQ_UV_LDO2, 1121 .irq = WM8350_IRQ_UV_LDO2,
1339 .type = REGULATOR_VOLTAGE, 1122 .type = REGULATOR_VOLTAGE,
1340 .n_voltages = WM8350_LDO2_VSEL_MASK + 1, 1123 .n_voltages = WM8350_LDO2_VSEL_MASK + 1,
1124 .vsel_reg = WM8350_LDO2_CONTROL,
1125 .vsel_mask = WM8350_LDO2_VSEL_MASK,
1126 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1127 .enable_mask = WM8350_LDO2_ENA,
1341 .owner = THIS_MODULE, 1128 .owner = THIS_MODULE,
1342 }, 1129 },
1343 { 1130 {
@@ -1347,6 +1134,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1347 .irq = WM8350_IRQ_UV_LDO3, 1134 .irq = WM8350_IRQ_UV_LDO3,
1348 .type = REGULATOR_VOLTAGE, 1135 .type = REGULATOR_VOLTAGE,
1349 .n_voltages = WM8350_LDO3_VSEL_MASK + 1, 1136 .n_voltages = WM8350_LDO3_VSEL_MASK + 1,
1137 .vsel_reg = WM8350_LDO3_CONTROL,
1138 .vsel_mask = WM8350_LDO3_VSEL_MASK,
1139 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1140 .enable_mask = WM8350_LDO3_ENA,
1350 .owner = THIS_MODULE, 1141 .owner = THIS_MODULE,
1351 }, 1142 },
1352 { 1143 {
@@ -1356,6 +1147,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {
1356 .irq = WM8350_IRQ_UV_LDO4, 1147 .irq = WM8350_IRQ_UV_LDO4,
1357 .type = REGULATOR_VOLTAGE, 1148 .type = REGULATOR_VOLTAGE,
1358 .n_voltages = WM8350_LDO4_VSEL_MASK + 1, 1149 .n_voltages = WM8350_LDO4_VSEL_MASK + 1,
1150 .vsel_reg = WM8350_LDO4_CONTROL,
1151 .vsel_mask = WM8350_LDO4_VSEL_MASK,
1152 .enable_reg = WM8350_DCDC_LDO_REQUESTED,
1153 .enable_mask = WM8350_LDO4_ENA,
1359 .owner = THIS_MODULE, 1154 .owner = THIS_MODULE,
1360 }, 1155 },
1361 { 1156 {
@@ -1429,6 +1224,7 @@ static int wm8350_regulator_probe(struct platform_device *pdev)
1429 config.dev = &pdev->dev; 1224 config.dev = &pdev->dev;
1430 config.init_data = pdev->dev.platform_data; 1225 config.init_data = pdev->dev.platform_data;
1431 config.driver_data = dev_get_drvdata(&pdev->dev); 1226 config.driver_data = dev_get_drvdata(&pdev->dev);
1227 config.regmap = wm8350->regmap;
1432 1228
1433 /* register regulator */ 1229 /* register regulator */
1434 rdev = regulator_register(&wm8350_reg[pdev->id], &config); 1230 rdev = regulator_register(&wm8350_reg[pdev->id], &config);
diff --git a/drivers/regulator/wm8400-regulator.c b/drivers/regulator/wm8400-regulator.c
index 69a2b7ce5e4a..9035dd053611 100644
--- a/drivers/regulator/wm8400-regulator.c
+++ b/drivers/regulator/wm8400-regulator.c
@@ -28,34 +28,26 @@ static int wm8400_ldo_list_voltage(struct regulator_dev *dev,
28 if (selector < 15) 28 if (selector < 15)
29 return 900000 + (selector * 50000); 29 return 900000 + (selector * 50000);
30 else 30 else
31 return 1600000 + ((selector - 14) * 100000); 31 return 1700000 + ((selector - 15) * 100000);
32} 32}
33 33
34static int wm8400_ldo_map_voltage(struct regulator_dev *dev, 34static int wm8400_ldo_map_voltage(struct regulator_dev *dev,
35 int min_uV, int max_uV) 35 int min_uV, int max_uV)
36{ 36{
37 u16 val; 37 u16 val;
38 int volt;
38 39
39 if (min_uV < 900000 || min_uV > 3300000) 40 if (min_uV < 900000 || min_uV > 3300000)
40 return -EINVAL; 41 return -EINVAL;
41 42
42 if (min_uV < 1700000) { 43 if (min_uV < 1700000) /* Steps of 50mV from 900mV; */
43 /* Steps of 50mV from 900mV; */
44 val = DIV_ROUND_UP(min_uV - 900000, 50000); 44 val = DIV_ROUND_UP(min_uV - 900000, 50000);
45 else /* Steps of 100mV from 1700mV */
46 val = DIV_ROUND_UP(min_uV - 1700000, 100000) + 15;
45 47
46 if ((val * 50000) + 900000 > max_uV) 48 volt = wm8400_ldo_list_voltage(dev, val);
47 return -EINVAL; 49 if (volt < min_uV || volt > max_uV)
48 BUG_ON((val * 50000) + 900000 < min_uV); 50 return -EINVAL;
49 } else {
50 /* Steps of 100mV from 1700mV */
51 val = DIV_ROUND_UP(min_uV - 1700000, 100000);
52
53 if ((val * 100000) + 1700000 > max_uV)
54 return -EINVAL;
55 BUG_ON((val * 100000) + 1700000 < min_uV);
56
57 val += 0xf;
58 }
59 51
60 return val; 52 return val;
61} 53}
@@ -152,6 +144,7 @@ static struct regulator_ops wm8400_dcdc_ops = {
152 .enable = regulator_enable_regmap, 144 .enable = regulator_enable_regmap,
153 .disable = regulator_disable_regmap, 145 .disable = regulator_disable_regmap,
154 .list_voltage = regulator_list_voltage_linear, 146 .list_voltage = regulator_list_voltage_linear,
147 .map_voltage = regulator_map_voltage_linear,
155 .get_voltage_sel = regulator_get_voltage_sel_regmap, 148 .get_voltage_sel = regulator_get_voltage_sel_regmap,
156 .set_voltage_sel = regulator_set_voltage_sel_regmap, 149 .set_voltage_sel = regulator_set_voltage_sel_regmap,
157 .get_mode = wm8400_dcdc_get_mode, 150 .get_mode = wm8400_dcdc_get_mode,
diff --git a/drivers/regulator/wm8994-regulator.c b/drivers/regulator/wm8994-regulator.c
index 9a994316e63c..86bb48db149e 100644
--- a/drivers/regulator/wm8994-regulator.c
+++ b/drivers/regulator/wm8994-regulator.c
@@ -26,8 +26,6 @@
26#include <linux/mfd/wm8994/pdata.h> 26#include <linux/mfd/wm8994/pdata.h>
27 27
28struct wm8994_ldo { 28struct wm8994_ldo {
29 int enable;
30 bool is_enabled;
31 struct regulator_dev *regulator; 29 struct regulator_dev *regulator;
32 struct wm8994 *wm8994; 30 struct wm8994 *wm8994;
33}; 31};
@@ -35,64 +33,9 @@ struct wm8994_ldo {
35#define WM8994_LDO1_MAX_SELECTOR 0x7 33#define WM8994_LDO1_MAX_SELECTOR 0x7
36#define WM8994_LDO2_MAX_SELECTOR 0x3 34#define WM8994_LDO2_MAX_SELECTOR 0x3
37 35
38static int wm8994_ldo_enable(struct regulator_dev *rdev)
39{
40 struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
41
42 /* If we have no soft control assume that the LDO is always enabled. */
43 if (!ldo->enable)
44 return 0;
45
46 gpio_set_value_cansleep(ldo->enable, 1);
47 ldo->is_enabled = true;
48
49 return 0;
50}
51
52static int wm8994_ldo_disable(struct regulator_dev *rdev)
53{
54 struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
55
56 /* If we have no soft control assume that the LDO is always enabled. */
57 if (!ldo->enable)
58 return -EINVAL;
59
60 gpio_set_value_cansleep(ldo->enable, 0);
61 ldo->is_enabled = false;
62
63 return 0;
64}
65
66static int wm8994_ldo_is_enabled(struct regulator_dev *rdev)
67{
68 struct wm8994_ldo *ldo = rdev_get_drvdata(rdev);
69
70 return ldo->is_enabled;
71}
72
73static int wm8994_ldo_enable_time(struct regulator_dev *rdev)
74{
75 /* 3ms is fairly conservative but this shouldn't be too performance
76 * critical; can be tweaked per-system if required. */
77 return 3000;
78}
79
80static int wm8994_ldo1_list_voltage(struct regulator_dev *rdev,
81 unsigned int selector)
82{
83 if (selector > WM8994_LDO1_MAX_SELECTOR)
84 return -EINVAL;
85
86 return (selector * 100000) + 2400000;
87}
88
89static struct regulator_ops wm8994_ldo1_ops = { 36static struct regulator_ops wm8994_ldo1_ops = {
90 .enable = wm8994_ldo_enable, 37 .list_voltage = regulator_list_voltage_linear,
91 .disable = wm8994_ldo_disable, 38 .map_voltage = regulator_map_voltage_linear,
92 .is_enabled = wm8994_ldo_is_enabled,
93 .enable_time = wm8994_ldo_enable_time,
94
95 .list_voltage = wm8994_ldo1_list_voltage,
96 .get_voltage_sel = regulator_get_voltage_sel_regmap, 39 .get_voltage_sel = regulator_get_voltage_sel_regmap,
97 .set_voltage_sel = regulator_set_voltage_sel_regmap, 40 .set_voltage_sel = regulator_set_voltage_sel_regmap,
98}; 41};
@@ -124,11 +67,6 @@ static int wm8994_ldo2_list_voltage(struct regulator_dev *rdev,
124} 67}
125 68
126static struct regulator_ops wm8994_ldo2_ops = { 69static struct regulator_ops wm8994_ldo2_ops = {
127 .enable = wm8994_ldo_enable,
128 .disable = wm8994_ldo_disable,
129 .is_enabled = wm8994_ldo_is_enabled,
130 .enable_time = wm8994_ldo_enable_time,
131
132 .list_voltage = wm8994_ldo2_list_voltage, 70 .list_voltage = wm8994_ldo2_list_voltage,
133 .get_voltage_sel = regulator_get_voltage_sel_regmap, 71 .get_voltage_sel = regulator_get_voltage_sel_regmap,
134 .set_voltage_sel = regulator_set_voltage_sel_regmap, 72 .set_voltage_sel = regulator_set_voltage_sel_regmap,
@@ -143,6 +81,9 @@ static const struct regulator_desc wm8994_ldo_desc[] = {
143 .vsel_reg = WM8994_LDO_1, 81 .vsel_reg = WM8994_LDO_1,
144 .vsel_mask = WM8994_LDO1_VSEL_MASK, 82 .vsel_mask = WM8994_LDO1_VSEL_MASK,
145 .ops = &wm8994_ldo1_ops, 83 .ops = &wm8994_ldo1_ops,
84 .min_uV = 2400000,
85 .uV_step = 100000,
86 .enable_time = 3000,
146 .owner = THIS_MODULE, 87 .owner = THIS_MODULE,
147 }, 88 },
148 { 89 {
@@ -153,6 +94,7 @@ static const struct regulator_desc wm8994_ldo_desc[] = {
153 .vsel_reg = WM8994_LDO_2, 94 .vsel_reg = WM8994_LDO_2,
154 .vsel_mask = WM8994_LDO2_VSEL_MASK, 95 .vsel_mask = WM8994_LDO2_VSEL_MASK,
155 .ops = &wm8994_ldo2_ops, 96 .ops = &wm8994_ldo2_ops,
97 .enable_time = 3000,
156 .owner = THIS_MODULE, 98 .owner = THIS_MODULE,
157 }, 99 },
158}; 100};
@@ -176,39 +118,26 @@ static __devinit int wm8994_ldo_probe(struct platform_device *pdev)
176 118
177 ldo->wm8994 = wm8994; 119 ldo->wm8994 = wm8994;
178 120
179 if (pdata->ldo[id].enable && gpio_is_valid(pdata->ldo[id].enable)) {
180 ldo->enable = pdata->ldo[id].enable;
181
182 ret = gpio_request_one(ldo->enable, 0, "WM8994 LDO enable");
183 if (ret < 0) {
184 dev_err(&pdev->dev, "Failed to get enable GPIO: %d\n",
185 ret);
186 goto err;
187 }
188 } else
189 ldo->is_enabled = true;
190
191 config.dev = wm8994->dev; 121 config.dev = wm8994->dev;
192 config.driver_data = ldo; 122 config.driver_data = ldo;
193 config.regmap = wm8994->regmap; 123 config.regmap = wm8994->regmap;
194 if (pdata) 124 if (pdata) {
195 config.init_data = pdata->ldo[id].init_data; 125 config.init_data = pdata->ldo[id].init_data;
126 config.ena_gpio = pdata->ldo[id].enable;
127 }
196 128
197 ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &config); 129 ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &config);
198 if (IS_ERR(ldo->regulator)) { 130 if (IS_ERR(ldo->regulator)) {
199 ret = PTR_ERR(ldo->regulator); 131 ret = PTR_ERR(ldo->regulator);
200 dev_err(wm8994->dev, "Failed to register LDO%d: %d\n", 132 dev_err(wm8994->dev, "Failed to register LDO%d: %d\n",
201 id + 1, ret); 133 id + 1, ret);
202 goto err_gpio; 134 goto err;
203 } 135 }
204 136
205 platform_set_drvdata(pdev, ldo); 137 platform_set_drvdata(pdev, ldo);
206 138
207 return 0; 139 return 0;
208 140
209err_gpio:
210 if (gpio_is_valid(ldo->enable))
211 gpio_free(ldo->enable);
212err: 141err:
213 return ret; 142 return ret;
214} 143}
@@ -220,8 +149,6 @@ static __devexit int wm8994_ldo_remove(struct platform_device *pdev)
220 platform_set_drvdata(pdev, NULL); 149 platform_set_drvdata(pdev, NULL);
221 150
222 regulator_unregister(ldo->regulator); 151 regulator_unregister(ldo->regulator);
223 if (gpio_is_valid(ldo->enable))
224 gpio_free(ldo->enable);
225 152
226 return 0; 153 return 0;
227} 154}
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index 24d880e78ec6..f8d818abf98c 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -4,9 +4,11 @@ menu "Remoteproc drivers (EXPERIMENTAL)"
4config REMOTEPROC 4config REMOTEPROC
5 tristate 5 tristate
6 depends on EXPERIMENTAL 6 depends on EXPERIMENTAL
7 select FW_CONFIG
7 8
8config OMAP_REMOTEPROC 9config OMAP_REMOTEPROC
9 tristate "OMAP remoteproc support" 10 tristate "OMAP remoteproc support"
11 depends on EXPERIMENTAL
10 depends on ARCH_OMAP4 12 depends on ARCH_OMAP4
11 depends on OMAP_IOMMU 13 depends on OMAP_IOMMU
12 select REMOTEPROC 14 select REMOTEPROC
diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
index 75506ec2840e..f56c8ba3a861 100644
--- a/drivers/rpmsg/virtio_rpmsg_bus.c
+++ b/drivers/rpmsg/virtio_rpmsg_bus.c
@@ -188,6 +188,26 @@ static int rpmsg_uevent(struct device *dev, struct kobj_uevent_env *env)
188 rpdev->id.name); 188 rpdev->id.name);
189} 189}
190 190
191/**
192 * __ept_release() - deallocate an rpmsg endpoint
193 * @kref: the ept's reference count
194 *
195 * This function deallocates an ept, and is invoked when its @kref refcount
196 * drops to zero.
197 *
198 * Never invoke this function directly!
199 */
200static void __ept_release(struct kref *kref)
201{
202 struct rpmsg_endpoint *ept = container_of(kref, struct rpmsg_endpoint,
203 refcount);
204 /*
205 * At this point no one holds a reference to ept anymore,
206 * so we can directly free it
207 */
208 kfree(ept);
209}
210
191/* for more info, see below documentation of rpmsg_create_ept() */ 211/* for more info, see below documentation of rpmsg_create_ept() */
192static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp, 212static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp,
193 struct rpmsg_channel *rpdev, rpmsg_rx_cb_t cb, 213 struct rpmsg_channel *rpdev, rpmsg_rx_cb_t cb,
@@ -206,6 +226,9 @@ static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp,
206 return NULL; 226 return NULL;
207 } 227 }
208 228
229 kref_init(&ept->refcount);
230 mutex_init(&ept->cb_lock);
231
209 ept->rpdev = rpdev; 232 ept->rpdev = rpdev;
210 ept->cb = cb; 233 ept->cb = cb;
211 ept->priv = priv; 234 ept->priv = priv;
@@ -238,7 +261,7 @@ rem_idr:
238 idr_remove(&vrp->endpoints, request); 261 idr_remove(&vrp->endpoints, request);
239free_ept: 262free_ept:
240 mutex_unlock(&vrp->endpoints_lock); 263 mutex_unlock(&vrp->endpoints_lock);
241 kfree(ept); 264 kref_put(&ept->refcount, __ept_release);
242 return NULL; 265 return NULL;
243} 266}
244 267
@@ -302,11 +325,17 @@ EXPORT_SYMBOL(rpmsg_create_ept);
302static void 325static void
303__rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept) 326__rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept)
304{ 327{
328 /* make sure new inbound messages can't find this ept anymore */
305 mutex_lock(&vrp->endpoints_lock); 329 mutex_lock(&vrp->endpoints_lock);
306 idr_remove(&vrp->endpoints, ept->addr); 330 idr_remove(&vrp->endpoints, ept->addr);
307 mutex_unlock(&vrp->endpoints_lock); 331 mutex_unlock(&vrp->endpoints_lock);
308 332
309 kfree(ept); 333 /* make sure in-flight inbound messages won't invoke cb anymore */
334 mutex_lock(&ept->cb_lock);
335 ept->cb = NULL;
336 mutex_unlock(&ept->cb_lock);
337
338 kref_put(&ept->refcount, __ept_release);
310} 339}
311 340
312/** 341/**
@@ -790,12 +819,28 @@ static void rpmsg_recv_done(struct virtqueue *rvq)
790 819
791 /* use the dst addr to fetch the callback of the appropriate user */ 820 /* use the dst addr to fetch the callback of the appropriate user */
792 mutex_lock(&vrp->endpoints_lock); 821 mutex_lock(&vrp->endpoints_lock);
822
793 ept = idr_find(&vrp->endpoints, msg->dst); 823 ept = idr_find(&vrp->endpoints, msg->dst);
824
825 /* let's make sure no one deallocates ept while we use it */
826 if (ept)
827 kref_get(&ept->refcount);
828
794 mutex_unlock(&vrp->endpoints_lock); 829 mutex_unlock(&vrp->endpoints_lock);
795 830
796 if (ept && ept->cb) 831 if (ept) {
797 ept->cb(ept->rpdev, msg->data, msg->len, ept->priv, msg->src); 832 /* make sure ept->cb doesn't go away while we use it */
798 else 833 mutex_lock(&ept->cb_lock);
834
835 if (ept->cb)
836 ept->cb(ept->rpdev, msg->data, msg->len, ept->priv,
837 msg->src);
838
839 mutex_unlock(&ept->cb_lock);
840
841 /* farewell, ept, we don't need you anymore */
842 kref_put(&ept->refcount, __ept_release);
843 } else
799 dev_warn(dev, "msg received with no recepient\n"); 844 dev_warn(dev, "msg received with no recepient\n");
800 845
801 /* publish the real size of the buffer */ 846 /* publish the real size of the buffer */
@@ -1040,7 +1085,7 @@ static int __init rpmsg_init(void)
1040 1085
1041 return ret; 1086 return ret;
1042} 1087}
1043module_init(rpmsg_init); 1088subsys_initcall(rpmsg_init);
1044 1089
1045static void __exit rpmsg_fini(void) 1090static void __exit rpmsg_fini(void)
1046{ 1091{
diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c
index 4bcf9ca2818a..370889d0489b 100644
--- a/drivers/rtc/rtc-ab8500.c
+++ b/drivers/rtc/rtc-ab8500.c
@@ -17,6 +17,7 @@
17#include <linux/mfd/abx500.h> 17#include <linux/mfd/abx500.h>
18#include <linux/mfd/abx500/ab8500.h> 18#include <linux/mfd/abx500/ab8500.h>
19#include <linux/delay.h> 19#include <linux/delay.h>
20#include <linux/of.h>
20 21
21#define AB8500_RTC_SOFF_STAT_REG 0x00 22#define AB8500_RTC_SOFF_STAT_REG 0x00
22#define AB8500_RTC_CC_CONF_REG 0x01 23#define AB8500_RTC_CC_CONF_REG 0x01
@@ -422,7 +423,7 @@ static int __devinit ab8500_rtc_probe(struct platform_device *pdev)
422 } 423 }
423 424
424 err = request_threaded_irq(irq, NULL, rtc_alarm_handler, 425 err = request_threaded_irq(irq, NULL, rtc_alarm_handler,
425 IRQF_NO_SUSPEND, "ab8500-rtc", rtc); 426 IRQF_NO_SUSPEND | IRQF_ONESHOT, "ab8500-rtc", rtc);
426 if (err < 0) { 427 if (err < 0) {
427 rtc_device_unregister(rtc); 428 rtc_device_unregister(rtc);
428 return err; 429 return err;
@@ -430,7 +431,6 @@ static int __devinit ab8500_rtc_probe(struct platform_device *pdev)
430 431
431 platform_set_drvdata(pdev, rtc); 432 platform_set_drvdata(pdev, rtc);
432 433
433
434 err = ab8500_sysfs_rtc_register(&pdev->dev); 434 err = ab8500_sysfs_rtc_register(&pdev->dev);
435 if (err) { 435 if (err) {
436 dev_err(&pdev->dev, "sysfs RTC failed to register\n"); 436 dev_err(&pdev->dev, "sysfs RTC failed to register\n");
@@ -454,10 +454,16 @@ static int __devexit ab8500_rtc_remove(struct platform_device *pdev)
454 return 0; 454 return 0;
455} 455}
456 456
457static const struct of_device_id ab8500_rtc_match[] = {
458 { .compatible = "stericsson,ab8500-rtc", },
459 {}
460};
461
457static struct platform_driver ab8500_rtc_driver = { 462static struct platform_driver ab8500_rtc_driver = {
458 .driver = { 463 .driver = {
459 .name = "ab8500-rtc", 464 .name = "ab8500-rtc",
460 .owner = THIS_MODULE, 465 .owner = THIS_MODULE,
466 .of_match_table = ab8500_rtc_match,
461 }, 467 },
462 .probe = ab8500_rtc_probe, 468 .probe = ab8500_rtc_probe,
463 .remove = __devexit_p(ab8500_rtc_remove), 469 .remove = __devexit_p(ab8500_rtc_remove),
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index 4267789ca995..132333d75408 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -568,6 +568,7 @@ static irqreturn_t cmos_interrupt(int irq, void *p)
568 hpet_mask_rtc_irq_bit(RTC_AIE); 568 hpet_mask_rtc_irq_bit(RTC_AIE);
569 569
570 CMOS_READ(RTC_INTR_FLAGS); 570 CMOS_READ(RTC_INTR_FLAGS);
571 pm_wakeup_event(cmos_rtc.dev, 0);
571 } 572 }
572 spin_unlock(&rtc_lock); 573 spin_unlock(&rtc_lock);
573 574
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
index 5e1d64ee5228..e3e50d69baf8 100644
--- a/drivers/rtc/rtc-mxc.c
+++ b/drivers/rtc/rtc-mxc.c
@@ -202,10 +202,11 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)
202 struct platform_device *pdev = dev_id; 202 struct platform_device *pdev = dev_id;
203 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 203 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
204 void __iomem *ioaddr = pdata->ioaddr; 204 void __iomem *ioaddr = pdata->ioaddr;
205 unsigned long flags;
205 u32 status; 206 u32 status;
206 u32 events = 0; 207 u32 events = 0;
207 208
208 spin_lock_irq(&pdata->rtc->irq_lock); 209 spin_lock_irqsave(&pdata->rtc->irq_lock, flags);
209 status = readw(ioaddr + RTC_RTCISR) & readw(ioaddr + RTC_RTCIENR); 210 status = readw(ioaddr + RTC_RTCISR) & readw(ioaddr + RTC_RTCIENR);
210 /* clear interrupt sources */ 211 /* clear interrupt sources */
211 writew(status, ioaddr + RTC_RTCISR); 212 writew(status, ioaddr + RTC_RTCISR);
@@ -224,7 +225,7 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)
224 events |= (RTC_PF | RTC_IRQF); 225 events |= (RTC_PF | RTC_IRQF);
225 226
226 rtc_update_irq(pdata->rtc, 1, events); 227 rtc_update_irq(pdata->rtc, 1, events);
227 spin_unlock_irq(&pdata->rtc->irq_lock); 228 spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags);
228 229
229 return IRQ_HANDLED; 230 return IRQ_HANDLED;
230} 231}
diff --git a/drivers/rtc/rtc-spear.c b/drivers/rtc/rtc-spear.c
index 1f76320e545b..e2785479113c 100644
--- a/drivers/rtc/rtc-spear.c
+++ b/drivers/rtc/rtc-spear.c
@@ -458,12 +458,12 @@ static int __devexit spear_rtc_remove(struct platform_device *pdev)
458 clk_disable(config->clk); 458 clk_disable(config->clk);
459 clk_put(config->clk); 459 clk_put(config->clk);
460 iounmap(config->ioaddr); 460 iounmap(config->ioaddr);
461 kfree(config);
462 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 461 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
463 if (res) 462 if (res)
464 release_mem_region(res->start, resource_size(res)); 463 release_mem_region(res->start, resource_size(res));
465 platform_set_drvdata(pdev, NULL); 464 platform_set_drvdata(pdev, NULL);
466 rtc_device_unregister(config->rtc); 465 rtc_device_unregister(config->rtc);
466 kfree(config);
467 467
468 return 0; 468 return 0;
469} 469}
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
index 258abeabf624..c5d06fe83bba 100644
--- a/drivers/rtc/rtc-twl.c
+++ b/drivers/rtc/rtc-twl.c
@@ -510,7 +510,7 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
510 } 510 }
511 511
512 ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt, 512 ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt,
513 IRQF_TRIGGER_RISING, 513 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
514 dev_name(&rtc->dev), rtc); 514 dev_name(&rtc->dev), rtc);
515 if (ret < 0) { 515 if (ret < 0) {
516 dev_err(&pdev->dev, "IRQ is not free.\n"); 516 dev_err(&pdev->dev, "IRQ is not free.\n");
diff --git a/drivers/scsi/aic94xx/aic94xx_task.c b/drivers/scsi/aic94xx/aic94xx_task.c
index 532d212b6b2c..393e7ce8e95a 100644
--- a/drivers/scsi/aic94xx/aic94xx_task.c
+++ b/drivers/scsi/aic94xx/aic94xx_task.c
@@ -201,7 +201,7 @@ static void asd_get_response_tasklet(struct asd_ascb *ascb,
201 201
202 if (SAS_STATUS_BUF_SIZE >= sizeof(*resp)) { 202 if (SAS_STATUS_BUF_SIZE >= sizeof(*resp)) {
203 resp->frame_len = le16_to_cpu(*(__le16 *)(r+6)); 203 resp->frame_len = le16_to_cpu(*(__le16 *)(r+6));
204 memcpy(&resp->ending_fis[0], r+16, 24); 204 memcpy(&resp->ending_fis[0], r+16, ATA_RESP_FIS_SIZE);
205 ts->buf_valid_size = sizeof(*resp); 205 ts->buf_valid_size = sizeof(*resp);
206 } 206 }
207 } 207 }
diff --git a/drivers/scsi/bnx2i/bnx2i.h b/drivers/scsi/bnx2i/bnx2i.h
index 0c53c28dc3d3..7e77cf620291 100644
--- a/drivers/scsi/bnx2i/bnx2i.h
+++ b/drivers/scsi/bnx2i/bnx2i.h
@@ -350,6 +350,7 @@ struct bnx2i_hba {
350 struct pci_dev *pcidev; 350 struct pci_dev *pcidev;
351 struct net_device *netdev; 351 struct net_device *netdev;
352 void __iomem *regview; 352 void __iomem *regview;
353 resource_size_t reg_base;
353 354
354 u32 age; 355 u32 age;
355 unsigned long cnic_dev_type; 356 unsigned long cnic_dev_type;
diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
index ece47e502282..86a12b48e477 100644
--- a/drivers/scsi/bnx2i/bnx2i_hwi.c
+++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
@@ -2724,7 +2724,6 @@ int bnx2i_map_ep_dbell_regs(struct bnx2i_endpoint *ep)
2724 goto arm_cq; 2724 goto arm_cq;
2725 } 2725 }
2726 2726
2727 reg_base = ep->hba->netdev->base_addr;
2728 if ((test_bit(BNX2I_NX2_DEV_5709, &ep->hba->cnic_dev_type)) && 2727 if ((test_bit(BNX2I_NX2_DEV_5709, &ep->hba->cnic_dev_type)) &&
2729 (ep->hba->mail_queue_access == BNX2I_MQ_BIN_MODE)) { 2728 (ep->hba->mail_queue_access == BNX2I_MQ_BIN_MODE)) {
2730 config2 = REG_RD(ep->hba, BNX2_MQ_CONFIG2); 2729 config2 = REG_RD(ep->hba, BNX2_MQ_CONFIG2);
@@ -2740,7 +2739,7 @@ int bnx2i_map_ep_dbell_regs(struct bnx2i_endpoint *ep)
2740 /* 5709 device in normal node and 5706/5708 devices */ 2739 /* 5709 device in normal node and 5706/5708 devices */
2741 reg_off = CTX_OFFSET + (MB_KERNEL_CTX_SIZE * cid_num); 2740 reg_off = CTX_OFFSET + (MB_KERNEL_CTX_SIZE * cid_num);
2742 2741
2743 ep->qp.ctx_base = ioremap_nocache(reg_base + reg_off, 2742 ep->qp.ctx_base = ioremap_nocache(ep->hba->reg_base + reg_off,
2744 MB_KERNEL_CTX_SIZE); 2743 MB_KERNEL_CTX_SIZE);
2745 if (!ep->qp.ctx_base) 2744 if (!ep->qp.ctx_base)
2746 return -ENOMEM; 2745 return -ENOMEM;
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c
index f8d516b53161..621538b8b544 100644
--- a/drivers/scsi/bnx2i/bnx2i_iscsi.c
+++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c
@@ -811,13 +811,13 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic)
811 bnx2i_identify_device(hba); 811 bnx2i_identify_device(hba);
812 bnx2i_setup_host_queue_size(hba, shost); 812 bnx2i_setup_host_queue_size(hba, shost);
813 813
814 hba->reg_base = pci_resource_start(hba->pcidev, 0);
814 if (test_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type)) { 815 if (test_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type)) {
815 hba->regview = ioremap_nocache(hba->netdev->base_addr, 816 hba->regview = pci_iomap(hba->pcidev, 0, BNX2_MQ_CONFIG2);
816 BNX2_MQ_CONFIG2);
817 if (!hba->regview) 817 if (!hba->regview)
818 goto ioreg_map_err; 818 goto ioreg_map_err;
819 } else if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { 819 } else if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) {
820 hba->regview = ioremap_nocache(hba->netdev->base_addr, 4096); 820 hba->regview = pci_iomap(hba->pcidev, 0, 4096);
821 if (!hba->regview) 821 if (!hba->regview)
822 goto ioreg_map_err; 822 goto ioreg_map_err;
823 } 823 }
@@ -884,7 +884,7 @@ cid_que_err:
884 bnx2i_free_mp_bdt(hba); 884 bnx2i_free_mp_bdt(hba);
885mp_bdt_mem_err: 885mp_bdt_mem_err:
886 if (hba->regview) { 886 if (hba->regview) {
887 iounmap(hba->regview); 887 pci_iounmap(hba->pcidev, hba->regview);
888 hba->regview = NULL; 888 hba->regview = NULL;
889 } 889 }
890ioreg_map_err: 890ioreg_map_err:
@@ -910,7 +910,7 @@ void bnx2i_free_hba(struct bnx2i_hba *hba)
910 pci_dev_put(hba->pcidev); 910 pci_dev_put(hba->pcidev);
911 911
912 if (hba->regview) { 912 if (hba->regview) {
913 iounmap(hba->regview); 913 pci_iounmap(hba->pcidev, hba->regview);
914 hba->regview = NULL; 914 hba->regview = NULL;
915 } 915 }
916 bnx2i_free_mp_bdt(hba); 916 bnx2i_free_mp_bdt(hba);
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 441d88ad99a7..d109cc3a17b6 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -139,12 +139,12 @@ static void sas_ata_task_done(struct sas_task *task)
139 if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD || 139 if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD ||
140 ((stat->stat == SAM_STAT_CHECK_CONDITION && 140 ((stat->stat == SAM_STAT_CHECK_CONDITION &&
141 dev->sata_dev.command_set == ATAPI_COMMAND_SET))) { 141 dev->sata_dev.command_set == ATAPI_COMMAND_SET))) {
142 ata_tf_from_fis(resp->ending_fis, &dev->sata_dev.tf); 142 memcpy(dev->sata_dev.fis, resp->ending_fis, ATA_RESP_FIS_SIZE);
143 143
144 if (!link->sactive) { 144 if (!link->sactive) {
145 qc->err_mask |= ac_err_mask(dev->sata_dev.tf.command); 145 qc->err_mask |= ac_err_mask(dev->sata_dev.fis[2]);
146 } else { 146 } else {
147 link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.tf.command); 147 link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.fis[2]);
148 if (unlikely(link->eh_info.err_mask)) 148 if (unlikely(link->eh_info.err_mask))
149 qc->flags |= ATA_QCFLAG_FAILED; 149 qc->flags |= ATA_QCFLAG_FAILED;
150 } 150 }
@@ -161,8 +161,8 @@ static void sas_ata_task_done(struct sas_task *task)
161 qc->flags |= ATA_QCFLAG_FAILED; 161 qc->flags |= ATA_QCFLAG_FAILED;
162 } 162 }
163 163
164 dev->sata_dev.tf.feature = 0x04; /* status err */ 164 dev->sata_dev.fis[3] = 0x04; /* status err */
165 dev->sata_dev.tf.command = ATA_ERR; 165 dev->sata_dev.fis[2] = ATA_ERR;
166 } 166 }
167 } 167 }
168 168
@@ -269,7 +269,7 @@ static bool sas_ata_qc_fill_rtf(struct ata_queued_cmd *qc)
269{ 269{
270 struct domain_device *dev = qc->ap->private_data; 270 struct domain_device *dev = qc->ap->private_data;
271 271
272 memcpy(&qc->result_tf, &dev->sata_dev.tf, sizeof(qc->result_tf)); 272 ata_tf_from_fis(dev->sata_dev.fis, &qc->result_tf);
273 return true; 273 return true;
274} 274}
275 275
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 6986552b47e6..5b30132960c7 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -2643,19 +2643,9 @@ static void qlt_do_work(struct work_struct *work)
2643 spin_lock_irqsave(&ha->hardware_lock, flags); 2643 spin_lock_irqsave(&ha->hardware_lock, flags);
2644 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, 2644 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha,
2645 atio->u.isp24.fcp_hdr.s_id); 2645 atio->u.isp24.fcp_hdr.s_id);
2646 if (sess) { 2646 /* Do kref_get() before dropping qla_hw_data->hardware_lock. */
2647 if (unlikely(sess->tearing_down)) { 2647 if (sess)
2648 sess = NULL; 2648 kref_get(&sess->se_sess->sess_kref);
2649 spin_unlock_irqrestore(&ha->hardware_lock, flags);
2650 goto out_term;
2651 } else {
2652 /*
2653 * Do the extra kref_get() before dropping
2654 * qla_hw_data->hardware_lock.
2655 */
2656 kref_get(&sess->se_sess->sess_kref);
2657 }
2658 }
2659 spin_unlock_irqrestore(&ha->hardware_lock, flags); 2649 spin_unlock_irqrestore(&ha->hardware_lock, flags);
2660 2650
2661 if (unlikely(!sess)) { 2651 if (unlikely(!sess)) {
@@ -3960,7 +3950,7 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha,
3960{ 3950{
3961 struct qla_hw_data *ha = vha->hw; 3951 struct qla_hw_data *ha = vha->hw;
3962 struct qla_tgt *tgt = ha->tgt.qla_tgt; 3952 struct qla_tgt *tgt = ha->tgt.qla_tgt;
3963 int reason_code; 3953 int login_code;
3964 3954
3965 ql_dbg(ql_dbg_tgt, vha, 0xe039, 3955 ql_dbg(ql_dbg_tgt, vha, 0xe039,
3966 "scsi(%ld): ha state %d init_done %d oper_mode %d topo %d\n", 3956 "scsi(%ld): ha state %d init_done %d oper_mode %d topo %d\n",
@@ -4003,9 +3993,9 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha,
4003 { 3993 {
4004 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03b, 3994 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03b,
4005 "qla_target(%d): Async LOOP_UP occured " 3995 "qla_target(%d): Async LOOP_UP occured "
4006 "(m[1]=%x, m[2]=%x, m[3]=%x, m[4]=%x)", vha->vp_idx, 3996 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx,
4007 le16_to_cpu(mailbox[1]), le16_to_cpu(mailbox[2]), 3997 le16_to_cpu(mailbox[0]), le16_to_cpu(mailbox[1]),
4008 le16_to_cpu(mailbox[3]), le16_to_cpu(mailbox[4])); 3998 le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3]));
4009 if (tgt->link_reinit_iocb_pending) { 3999 if (tgt->link_reinit_iocb_pending) {
4010 qlt_send_notify_ack(vha, (void *)&tgt->link_reinit_iocb, 4000 qlt_send_notify_ack(vha, (void *)&tgt->link_reinit_iocb,
4011 0, 0, 0, 0, 0, 0); 4001 0, 0, 0, 0, 0, 0);
@@ -4020,23 +4010,24 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha,
4020 case MBA_RSCN_UPDATE: 4010 case MBA_RSCN_UPDATE:
4021 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03c, 4011 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03c,
4022 "qla_target(%d): Async event %#x occured " 4012 "qla_target(%d): Async event %#x occured "
4023 "(m[1]=%x, m[2]=%x, m[3]=%x, m[4]=%x)", vha->vp_idx, code, 4013 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, code,
4024 le16_to_cpu(mailbox[1]), le16_to_cpu(mailbox[2]), 4014 le16_to_cpu(mailbox[0]), le16_to_cpu(mailbox[1]),
4025 le16_to_cpu(mailbox[3]), le16_to_cpu(mailbox[4])); 4015 le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3]));
4026 break; 4016 break;
4027 4017
4028 case MBA_PORT_UPDATE: 4018 case MBA_PORT_UPDATE:
4029 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03d, 4019 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03d,
4030 "qla_target(%d): Port update async event %#x " 4020 "qla_target(%d): Port update async event %#x "
4031 "occured: updating the ports database (m[1]=%x, m[2]=%x, " 4021 "occured: updating the ports database (m[0]=%x, m[1]=%x, "
4032 "m[3]=%x, m[4]=%x)", vha->vp_idx, code, 4022 "m[2]=%x, m[3]=%x)", vha->vp_idx, code,
4033 le16_to_cpu(mailbox[1]), le16_to_cpu(mailbox[2]), 4023 le16_to_cpu(mailbox[0]), le16_to_cpu(mailbox[1]),
4034 le16_to_cpu(mailbox[3]), le16_to_cpu(mailbox[4])); 4024 le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3]));
4035 reason_code = le16_to_cpu(mailbox[2]); 4025
4036 if (reason_code == 0x4) 4026 login_code = le16_to_cpu(mailbox[2]);
4027 if (login_code == 0x4)
4037 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03e, 4028 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03e,
4038 "Async MB 2: Got PLOGI Complete\n"); 4029 "Async MB 2: Got PLOGI Complete\n");
4039 else if (reason_code == 0x7) 4030 else if (login_code == 0x7)
4040 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03f, 4031 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03f,
4041 "Async MB 2: Port Logged Out\n"); 4032 "Async MB 2: Port Logged Out\n");
4042 break; 4033 break;
@@ -4044,9 +4035,9 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha,
4044 default: 4035 default:
4045 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf040, 4036 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf040,
4046 "qla_target(%d): Async event %#x occured: " 4037 "qla_target(%d): Async event %#x occured: "
4047 "ignore (m[1]=%x, m[2]=%x, m[3]=%x, m[4]=%x)", vha->vp_idx, 4038 "ignore (m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx,
4048 code, le16_to_cpu(mailbox[1]), le16_to_cpu(mailbox[2]), 4039 code, le16_to_cpu(mailbox[0]), le16_to_cpu(mailbox[1]),
4049 le16_to_cpu(mailbox[3]), le16_to_cpu(mailbox[4])); 4040 le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3]));
4050 break; 4041 break;
4051 } 4042 }
4052 4043
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index 9f9ef1644fd9..170af1571214 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -639,7 +639,7 @@ struct qla_tgt_func_tmpl {
639 639
640 int (*handle_cmd)(struct scsi_qla_host *, struct qla_tgt_cmd *, 640 int (*handle_cmd)(struct scsi_qla_host *, struct qla_tgt_cmd *,
641 unsigned char *, uint32_t, int, int, int); 641 unsigned char *, uint32_t, int, int, int);
642 int (*handle_data)(struct qla_tgt_cmd *); 642 void (*handle_data)(struct qla_tgt_cmd *);
643 int (*handle_tmr)(struct qla_tgt_mgmt_cmd *, uint32_t, uint8_t, 643 int (*handle_tmr)(struct qla_tgt_mgmt_cmd *, uint32_t, uint8_t,
644 uint32_t); 644 uint32_t);
645 void (*free_cmd)(struct qla_tgt_cmd *); 645 void (*free_cmd)(struct qla_tgt_cmd *);
@@ -813,7 +813,6 @@ struct qla_tgt_sess {
813 unsigned int conf_compl_supported:1; 813 unsigned int conf_compl_supported:1;
814 unsigned int deleted:1; 814 unsigned int deleted:1;
815 unsigned int local:1; 815 unsigned int local:1;
816 unsigned int tearing_down:1;
817 816
818 struct se_session *se_sess; 817 struct se_session *se_sess;
819 struct scsi_qla_host *vha; 818 struct scsi_qla_host *vha;
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index 6e64314dbbb3..4752f65a9272 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -38,8 +38,6 @@
38#include <linux/string.h> 38#include <linux/string.h>
39#include <linux/configfs.h> 39#include <linux/configfs.h>
40#include <linux/ctype.h> 40#include <linux/ctype.h>
41#include <linux/string.h>
42#include <linux/ctype.h>
43#include <asm/unaligned.h> 41#include <asm/unaligned.h>
44#include <scsi/scsi.h> 42#include <scsi/scsi.h>
45#include <scsi/scsi_host.h> 43#include <scsi/scsi_host.h>
@@ -466,8 +464,7 @@ static int tcm_qla2xxx_shutdown_session(struct se_session *se_sess)
466 vha = sess->vha; 464 vha = sess->vha;
467 465
468 spin_lock_irqsave(&vha->hw->hardware_lock, flags); 466 spin_lock_irqsave(&vha->hw->hardware_lock, flags);
469 sess->tearing_down = 1; 467 target_sess_cmd_list_set_waiting(se_sess);
470 target_splice_sess_cmd_list(se_sess);
471 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); 468 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags);
472 469
473 return 1; 470 return 1;
@@ -600,28 +597,15 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
600 return -EINVAL; 597 return -EINVAL;
601 } 598 }
602 599
603 target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0], 600 return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0],
604 cmd->unpacked_lun, data_length, fcp_task_attr, 601 cmd->unpacked_lun, data_length, fcp_task_attr,
605 data_dir, flags); 602 data_dir, flags);
606 return 0;
607} 603}
608 604
609static void tcm_qla2xxx_do_rsp(struct work_struct *work) 605static void tcm_qla2xxx_handle_data_work(struct work_struct *work)
610{ 606{
611 struct qla_tgt_cmd *cmd = container_of(work, struct qla_tgt_cmd, work); 607 struct qla_tgt_cmd *cmd = container_of(work, struct qla_tgt_cmd, work);
612 /*
613 * Dispatch ->queue_status from workqueue process context
614 */
615 transport_generic_request_failure(&cmd->se_cmd);
616}
617 608
618/*
619 * Called from qla_target.c:qlt_do_ctio_completion()
620 */
621static int tcm_qla2xxx_handle_data(struct qla_tgt_cmd *cmd)
622{
623 struct se_cmd *se_cmd = &cmd->se_cmd;
624 unsigned long flags;
625 /* 609 /*
626 * Ensure that the complete FCP WRITE payload has been received. 610 * Ensure that the complete FCP WRITE payload has been received.
627 * Otherwise return an exception via CHECK_CONDITION status. 611 * Otherwise return an exception via CHECK_CONDITION status.
@@ -631,24 +615,26 @@ static int tcm_qla2xxx_handle_data(struct qla_tgt_cmd *cmd)
631 * Check if se_cmd has already been aborted via LUN_RESET, and 615 * Check if se_cmd has already been aborted via LUN_RESET, and
632 * waiting upon completion in tcm_qla2xxx_write_pending_status() 616 * waiting upon completion in tcm_qla2xxx_write_pending_status()
633 */ 617 */
634 spin_lock_irqsave(&se_cmd->t_state_lock, flags); 618 if (cmd->se_cmd.transport_state & CMD_T_ABORTED) {
635 if (se_cmd->transport_state & CMD_T_ABORTED) { 619 complete(&cmd->se_cmd.t_transport_stop_comp);
636 spin_unlock_irqrestore(&se_cmd->t_state_lock, flags); 620 return;
637 complete(&se_cmd->t_transport_stop_comp);
638 return 0;
639 } 621 }
640 spin_unlock_irqrestore(&se_cmd->t_state_lock, flags);
641 622
642 se_cmd->scsi_sense_reason = TCM_CHECK_CONDITION_ABORT_CMD; 623 cmd->se_cmd.scsi_sense_reason = TCM_CHECK_CONDITION_ABORT_CMD;
643 INIT_WORK(&cmd->work, tcm_qla2xxx_do_rsp); 624 transport_generic_request_failure(&cmd->se_cmd);
644 queue_work(tcm_qla2xxx_free_wq, &cmd->work); 625 return;
645 return 0;
646 } 626 }
647 /* 627
648 * We now tell TCM to queue this WRITE CDB with TRANSPORT_PROCESS_WRITE 628 return target_execute_cmd(&cmd->se_cmd);
649 * status to the backstore processing thread. 629}
650 */ 630
651 return transport_generic_handle_data(&cmd->se_cmd); 631/*
632 * Called from qla_target.c:qlt_do_ctio_completion()
633 */
634static void tcm_qla2xxx_handle_data(struct qla_tgt_cmd *cmd)
635{
636 INIT_WORK(&cmd->work, tcm_qla2xxx_handle_data_work);
637 queue_work(tcm_qla2xxx_free_wq, &cmd->work);
652} 638}
653 639
654/* 640/*
@@ -1690,7 +1676,6 @@ static struct target_core_fabric_ops tcm_qla2xxx_ops = {
1690 .tpg_alloc_fabric_acl = tcm_qla2xxx_alloc_fabric_acl, 1676 .tpg_alloc_fabric_acl = tcm_qla2xxx_alloc_fabric_acl,
1691 .tpg_release_fabric_acl = tcm_qla2xxx_release_fabric_acl, 1677 .tpg_release_fabric_acl = tcm_qla2xxx_release_fabric_acl,
1692 .tpg_get_inst_index = tcm_qla2xxx_tpg_get_inst_index, 1678 .tpg_get_inst_index = tcm_qla2xxx_tpg_get_inst_index,
1693 .new_cmd_map = NULL,
1694 .check_stop_free = tcm_qla2xxx_check_stop_free, 1679 .check_stop_free = tcm_qla2xxx_check_stop_free,
1695 .release_cmd = tcm_qla2xxx_release_cmd, 1680 .release_cmd = tcm_qla2xxx_release_cmd,
1696 .put_session = tcm_qla2xxx_put_session, 1681 .put_session = tcm_qla2xxx_put_session,
diff --git a/drivers/scsi/scsi_wait_scan.c b/drivers/scsi/scsi_wait_scan.c
index ae7814874618..072734538876 100644
--- a/drivers/scsi/scsi_wait_scan.c
+++ b/drivers/scsi/scsi_wait_scan.c
@@ -22,11 +22,6 @@ static int __init wait_scan_init(void)
22 * and might not yet have reached the scsi async scanning 22 * and might not yet have reached the scsi async scanning
23 */ 23 */
24 wait_for_device_probe(); 24 wait_for_device_probe();
25 /*
26 * and then we wait for the actual asynchronous scsi scan
27 * to finish.
28 */
29 scsi_complete_async_scans();
30 return 0; 25 return 0;
31} 26}
32 27
diff --git a/drivers/target/Makefile b/drivers/target/Makefile
index 61648d84fbb6..9fdcb561422f 100644
--- a/drivers/target/Makefile
+++ b/drivers/target/Makefile
@@ -9,7 +9,8 @@ target_core_mod-y := target_core_configfs.o \
9 target_core_tmr.o \ 9 target_core_tmr.o \
10 target_core_tpg.o \ 10 target_core_tpg.o \
11 target_core_transport.o \ 11 target_core_transport.o \
12 target_core_cdb.o \ 12 target_core_sbc.o \
13 target_core_spc.o \
13 target_core_ua.o \ 14 target_core_ua.o \
14 target_core_rd.o \ 15 target_core_rd.o \
15 target_core_stat.o 16 target_core_stat.o
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index d57d10cb2e47..97c0f78c3c9c 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -429,19 +429,8 @@ int iscsit_reset_np_thread(
429 429
430int iscsit_del_np_comm(struct iscsi_np *np) 430int iscsit_del_np_comm(struct iscsi_np *np)
431{ 431{
432 if (!np->np_socket) 432 if (np->np_socket)
433 return 0; 433 sock_release(np->np_socket);
434
435 /*
436 * Some network transports allocate their own struct sock->file,
437 * see if we need to free any additional allocated resources.
438 */
439 if (np->np_flags & NPF_SCTP_STRUCT_FILE) {
440 kfree(np->np_socket->file);
441 np->np_socket->file = NULL;
442 }
443
444 sock_release(np->np_socket);
445 return 0; 434 return 0;
446} 435}
447 436
@@ -1413,8 +1402,10 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf)
1413 spin_unlock_bh(&cmd->istate_lock); 1402 spin_unlock_bh(&cmd->istate_lock);
1414 1403
1415 iscsit_stop_dataout_timer(cmd); 1404 iscsit_stop_dataout_timer(cmd);
1416 return (!ooo_cmdsn) ? transport_generic_handle_data( 1405 if (ooo_cmdsn)
1417 &cmd->se_cmd) : 0; 1406 return 0;
1407 target_execute_cmd(&cmd->se_cmd);
1408 return 0;
1418 } else /* DATAOUT_CANNOT_RECOVER */ 1409 } else /* DATAOUT_CANNOT_RECOVER */
1419 return -1; 1410 return -1;
1420 1411
@@ -2683,7 +2674,7 @@ static int iscsit_send_logout_response(
2683 */ 2674 */
2684 logout_conn = iscsit_get_conn_from_cid_rcfr(sess, 2675 logout_conn = iscsit_get_conn_from_cid_rcfr(sess,
2685 cmd->logout_cid); 2676 cmd->logout_cid);
2686 if ((logout_conn)) { 2677 if (logout_conn) {
2687 iscsit_connection_reinstatement_rcfr(logout_conn); 2678 iscsit_connection_reinstatement_rcfr(logout_conn);
2688 iscsit_dec_conn_usage_count(logout_conn); 2679 iscsit_dec_conn_usage_count(logout_conn);
2689 } 2680 }
@@ -4077,13 +4068,8 @@ int iscsit_close_connection(
4077 kfree(conn->conn_ops); 4068 kfree(conn->conn_ops);
4078 conn->conn_ops = NULL; 4069 conn->conn_ops = NULL;
4079 4070
4080 if (conn->sock) { 4071 if (conn->sock)
4081 if (conn->conn_flags & CONNFLAG_SCTP_STRUCT_FILE) {
4082 kfree(conn->sock->file);
4083 conn->sock->file = NULL;
4084 }
4085 sock_release(conn->sock); 4072 sock_release(conn->sock);
4086 }
4087 conn->thread_set = NULL; 4073 conn->thread_set = NULL;
4088 4074
4089 pr_debug("Moving to TARG_CONN_STATE_FREE.\n"); 4075 pr_debug("Moving to TARG_CONN_STATE_FREE.\n");
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
index 69dc8e35c03a..a7b25e783b58 100644
--- a/drivers/target/iscsi/iscsi_target_configfs.c
+++ b/drivers/target/iscsi/iscsi_target_configfs.c
@@ -47,28 +47,6 @@ struct lio_target_configfs_attribute {
47 ssize_t (*store)(void *, const char *, size_t); 47 ssize_t (*store)(void *, const char *, size_t);
48}; 48};
49 49
50struct iscsi_portal_group *lio_get_tpg_from_tpg_item(
51 struct config_item *item,
52 struct iscsi_tiqn **tiqn_out)
53{
54 struct se_portal_group *se_tpg = container_of(to_config_group(item),
55 struct se_portal_group, tpg_group);
56 struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr;
57 int ret;
58
59 if (!tpg) {
60 pr_err("Unable to locate struct iscsi_portal_group "
61 "pointer\n");
62 return NULL;
63 }
64 ret = iscsit_get_tpg(tpg);
65 if (ret < 0)
66 return NULL;
67
68 *tiqn_out = tpg->tpg_tiqn;
69 return tpg;
70}
71
72/* Start items for lio_target_portal_cit */ 50/* Start items for lio_target_portal_cit */
73 51
74static ssize_t lio_target_np_show_sctp( 52static ssize_t lio_target_np_show_sctp(
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h
index 1c70144cdaf1..8a908b28d8b2 100644
--- a/drivers/target/iscsi/iscsi_target_core.h
+++ b/drivers/target/iscsi/iscsi_target_core.h
@@ -224,7 +224,6 @@ enum iscsi_timer_flags_table {
224/* Used for struct iscsi_np->np_flags */ 224/* Used for struct iscsi_np->np_flags */
225enum np_flags_table { 225enum np_flags_table {
226 NPF_IP_NETWORK = 0x00, 226 NPF_IP_NETWORK = 0x00,
227 NPF_SCTP_STRUCT_FILE = 0x01 /* Bugfix */
228}; 227};
229 228
230/* Used for struct iscsi_np->np_thread_state */ 229/* Used for struct iscsi_np->np_thread_state */
@@ -481,6 +480,7 @@ struct iscsi_tmr_req {
481 bool task_reassign:1; 480 bool task_reassign:1;
482 u32 ref_cmd_sn; 481 u32 ref_cmd_sn;
483 u32 exp_data_sn; 482 u32 exp_data_sn;
483 struct iscsi_cmd *ref_cmd;
484 struct iscsi_conn_recovery *conn_recovery; 484 struct iscsi_conn_recovery *conn_recovery;
485 struct se_tmr_req *se_tmr_req; 485 struct se_tmr_req *se_tmr_req;
486}; 486};
@@ -503,7 +503,6 @@ struct iscsi_conn {
503 u16 local_port; 503 u16 local_port;
504 int net_size; 504 int net_size;
505 u32 auth_id; 505 u32 auth_id;
506#define CONNFLAG_SCTP_STRUCT_FILE 0x01
507 u32 conn_flags; 506 u32 conn_flags;
508 /* Used for iscsi_tx_login_rsp() */ 507 /* Used for iscsi_tx_login_rsp() */
509 u32 login_itt; 508 u32 login_itt;
diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c
index ecdd46deedda..3df8a2cef86f 100644
--- a/drivers/target/iscsi/iscsi_target_erl1.c
+++ b/drivers/target/iscsi/iscsi_target_erl1.c
@@ -965,8 +965,8 @@ int iscsit_execute_cmd(struct iscsi_cmd *cmd, int ooo)
965 if (cmd->immediate_data) { 965 if (cmd->immediate_data) {
966 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { 966 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) {
967 spin_unlock_bh(&cmd->istate_lock); 967 spin_unlock_bh(&cmd->istate_lock);
968 return transport_generic_handle_data( 968 target_execute_cmd(&cmd->se_cmd);
969 &cmd->se_cmd); 969 return 0;
970 } 970 }
971 spin_unlock_bh(&cmd->istate_lock); 971 spin_unlock_bh(&cmd->istate_lock);
972 972
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index a3656c9903a1..0694d9b1bce6 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -518,7 +518,7 @@ int iscsi_login_post_auth_non_zero_tsih(
518 * initiator and release the new connection. 518 * initiator and release the new connection.
519 */ 519 */
520 conn_ptr = iscsit_get_conn_from_cid_rcfr(sess, cid); 520 conn_ptr = iscsit_get_conn_from_cid_rcfr(sess, cid);
521 if ((conn_ptr)) { 521 if (conn_ptr) {
522 pr_err("Connection exists with CID %hu for %s," 522 pr_err("Connection exists with CID %hu for %s,"
523 " performing connection reinstatement.\n", 523 " performing connection reinstatement.\n",
524 conn_ptr->cid, sess->sess_ops->InitiatorName); 524 conn_ptr->cid, sess->sess_ops->InitiatorName);
@@ -539,7 +539,7 @@ int iscsi_login_post_auth_non_zero_tsih(
539 if (sess->sess_ops->ErrorRecoveryLevel == 2) { 539 if (sess->sess_ops->ErrorRecoveryLevel == 2) {
540 cr = iscsit_get_inactive_connection_recovery_entry( 540 cr = iscsit_get_inactive_connection_recovery_entry(
541 sess, cid); 541 sess, cid);
542 if ((cr)) { 542 if (cr) {
543 pr_debug("Performing implicit logout" 543 pr_debug("Performing implicit logout"
544 " for connection recovery on CID: %hu\n", 544 " for connection recovery on CID: %hu\n",
545 conn->cid); 545 conn->cid);
@@ -795,22 +795,6 @@ int iscsi_target_setup_login_socket(
795 } 795 }
796 np->np_socket = sock; 796 np->np_socket = sock;
797 /* 797 /*
798 * The SCTP stack needs struct socket->file.
799 */
800 if ((np->np_network_transport == ISCSI_SCTP_TCP) ||
801 (np->np_network_transport == ISCSI_SCTP_UDP)) {
802 if (!sock->file) {
803 sock->file = kzalloc(sizeof(struct file), GFP_KERNEL);
804 if (!sock->file) {
805 pr_err("Unable to allocate struct"
806 " file for SCTP\n");
807 ret = -ENOMEM;
808 goto fail;
809 }
810 np->np_flags |= NPF_SCTP_STRUCT_FILE;
811 }
812 }
813 /*
814 * Setup the np->np_sockaddr from the passed sockaddr setup 798 * Setup the np->np_sockaddr from the passed sockaddr setup
815 * in iscsi_target_configfs.c code.. 799 * in iscsi_target_configfs.c code..
816 */ 800 */
@@ -869,21 +853,15 @@ int iscsi_target_setup_login_socket(
869 853
870fail: 854fail:
871 np->np_socket = NULL; 855 np->np_socket = NULL;
872 if (sock) { 856 if (sock)
873 if (np->np_flags & NPF_SCTP_STRUCT_FILE) {
874 kfree(sock->file);
875 sock->file = NULL;
876 }
877
878 sock_release(sock); 857 sock_release(sock);
879 }
880 return ret; 858 return ret;
881} 859}
882 860
883static int __iscsi_target_login_thread(struct iscsi_np *np) 861static int __iscsi_target_login_thread(struct iscsi_np *np)
884{ 862{
885 u8 buffer[ISCSI_HDR_LEN], iscsi_opcode, zero_tsih = 0; 863 u8 buffer[ISCSI_HDR_LEN], iscsi_opcode, zero_tsih = 0;
886 int err, ret = 0, set_sctp_conn_flag, stop; 864 int err, ret = 0, stop;
887 struct iscsi_conn *conn = NULL; 865 struct iscsi_conn *conn = NULL;
888 struct iscsi_login *login; 866 struct iscsi_login *login;
889 struct iscsi_portal_group *tpg = NULL; 867 struct iscsi_portal_group *tpg = NULL;
@@ -894,7 +872,6 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
894 struct sockaddr_in6 sock_in6; 872 struct sockaddr_in6 sock_in6;
895 873
896 flush_signals(current); 874 flush_signals(current);
897 set_sctp_conn_flag = 0;
898 sock = np->np_socket; 875 sock = np->np_socket;
899 876
900 spin_lock_bh(&np->np_thread_lock); 877 spin_lock_bh(&np->np_thread_lock);
@@ -917,35 +894,12 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
917 spin_unlock_bh(&np->np_thread_lock); 894 spin_unlock_bh(&np->np_thread_lock);
918 goto out; 895 goto out;
919 } 896 }
920 /*
921 * The SCTP stack needs struct socket->file.
922 */
923 if ((np->np_network_transport == ISCSI_SCTP_TCP) ||
924 (np->np_network_transport == ISCSI_SCTP_UDP)) {
925 if (!new_sock->file) {
926 new_sock->file = kzalloc(
927 sizeof(struct file), GFP_KERNEL);
928 if (!new_sock->file) {
929 pr_err("Unable to allocate struct"
930 " file for SCTP\n");
931 sock_release(new_sock);
932 /* Get another socket */
933 return 1;
934 }
935 set_sctp_conn_flag = 1;
936 }
937 }
938
939 iscsi_start_login_thread_timer(np); 897 iscsi_start_login_thread_timer(np);
940 898
941 conn = kzalloc(sizeof(struct iscsi_conn), GFP_KERNEL); 899 conn = kzalloc(sizeof(struct iscsi_conn), GFP_KERNEL);
942 if (!conn) { 900 if (!conn) {
943 pr_err("Could not allocate memory for" 901 pr_err("Could not allocate memory for"
944 " new connection\n"); 902 " new connection\n");
945 if (set_sctp_conn_flag) {
946 kfree(new_sock->file);
947 new_sock->file = NULL;
948 }
949 sock_release(new_sock); 903 sock_release(new_sock);
950 /* Get another socket */ 904 /* Get another socket */
951 return 1; 905 return 1;
@@ -955,9 +909,6 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
955 conn->conn_state = TARG_CONN_STATE_FREE; 909 conn->conn_state = TARG_CONN_STATE_FREE;
956 conn->sock = new_sock; 910 conn->sock = new_sock;
957 911
958 if (set_sctp_conn_flag)
959 conn->conn_flags |= CONNFLAG_SCTP_STRUCT_FILE;
960
961 pr_debug("Moving to TARG_CONN_STATE_XPT_UP.\n"); 912 pr_debug("Moving to TARG_CONN_STATE_XPT_UP.\n");
962 conn->conn_state = TARG_CONN_STATE_XPT_UP; 913 conn->conn_state = TARG_CONN_STATE_XPT_UP;
963 914
@@ -1081,7 +1032,7 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
1081 goto new_sess_out; 1032 goto new_sess_out;
1082 1033
1083 zero_tsih = (pdu->tsih == 0x0000); 1034 zero_tsih = (pdu->tsih == 0x0000);
1084 if ((zero_tsih)) { 1035 if (zero_tsih) {
1085 /* 1036 /*
1086 * This is the leading connection of a new session. 1037 * This is the leading connection of a new session.
1087 * We wait until after authentication to check for 1038 * We wait until after authentication to check for
@@ -1205,13 +1156,8 @@ old_sess_out:
1205 iscsi_release_param_list(conn->param_list); 1156 iscsi_release_param_list(conn->param_list);
1206 conn->param_list = NULL; 1157 conn->param_list = NULL;
1207 } 1158 }
1208 if (conn->sock) { 1159 if (conn->sock)
1209 if (conn->conn_flags & CONNFLAG_SCTP_STRUCT_FILE) {
1210 kfree(conn->sock->file);
1211 conn->sock->file = NULL;
1212 }
1213 sock_release(conn->sock); 1160 sock_release(conn->sock);
1214 }
1215 kfree(conn); 1161 kfree(conn);
1216 1162
1217 if (tpg) { 1163 if (tpg) {
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c
index ed5241e7f12a..0c4760fabfc0 100644
--- a/drivers/target/iscsi/iscsi_target_parameters.c
+++ b/drivers/target/iscsi/iscsi_target_parameters.c
@@ -681,7 +681,7 @@ int iscsi_update_param_value(struct iscsi_param *param, char *value)
681 param->value = kzalloc(strlen(value) + 1, GFP_KERNEL); 681 param->value = kzalloc(strlen(value) + 1, GFP_KERNEL);
682 if (!param->value) { 682 if (!param->value) {
683 pr_err("Unable to allocate memory for value.\n"); 683 pr_err("Unable to allocate memory for value.\n");
684 return -1; 684 return -ENOMEM;
685 } 685 }
686 686
687 memcpy(param->value, value, strlen(value)); 687 memcpy(param->value, value, strlen(value));
diff --git a/drivers/target/iscsi/iscsi_target_tmr.c b/drivers/target/iscsi/iscsi_target_tmr.c
index f4e640b51fd1..f62fe123d902 100644
--- a/drivers/target/iscsi/iscsi_target_tmr.c
+++ b/drivers/target/iscsi/iscsi_target_tmr.c
@@ -19,6 +19,7 @@
19 ******************************************************************************/ 19 ******************************************************************************/
20 20
21#include <asm/unaligned.h> 21#include <asm/unaligned.h>
22#include <scsi/scsi_device.h>
22#include <scsi/iscsi_proto.h> 23#include <scsi/iscsi_proto.h>
23#include <target/target_core_base.h> 24#include <target/target_core_base.h>
24#include <target/target_core_fabric.h> 25#include <target/target_core_fabric.h>
@@ -61,7 +62,7 @@ u8 iscsit_tmr_abort_task(
61 } 62 }
62 63
63 se_tmr->ref_task_tag = hdr->rtt; 64 se_tmr->ref_task_tag = hdr->rtt;
64 se_tmr->ref_cmd = &ref_cmd->se_cmd; 65 tmr_req->ref_cmd = ref_cmd;
65 tmr_req->ref_cmd_sn = hdr->refcmdsn; 66 tmr_req->ref_cmd_sn = hdr->refcmdsn;
66 tmr_req->exp_data_sn = hdr->exp_datasn; 67 tmr_req->exp_data_sn = hdr->exp_datasn;
67 68
@@ -121,7 +122,7 @@ u8 iscsit_tmr_task_reassign(
121 struct iscsi_tmr_req *tmr_req = cmd->tmr_req; 122 struct iscsi_tmr_req *tmr_req = cmd->tmr_req;
122 struct se_tmr_req *se_tmr = cmd->se_cmd.se_tmr_req; 123 struct se_tmr_req *se_tmr = cmd->se_cmd.se_tmr_req;
123 struct iscsi_tm *hdr = (struct iscsi_tm *) buf; 124 struct iscsi_tm *hdr = (struct iscsi_tm *) buf;
124 int ret; 125 int ret, ref_lun;
125 126
126 pr_debug("Got TASK_REASSIGN TMR ITT: 0x%08x," 127 pr_debug("Got TASK_REASSIGN TMR ITT: 0x%08x,"
127 " RefTaskTag: 0x%08x, ExpDataSN: 0x%08x, CID: %hu\n", 128 " RefTaskTag: 0x%08x, ExpDataSN: 0x%08x, CID: %hu\n",
@@ -155,9 +156,16 @@ u8 iscsit_tmr_task_reassign(
155 return ISCSI_TMF_RSP_REJECTED; 156 return ISCSI_TMF_RSP_REJECTED;
156 } 157 }
157 158
159 ref_lun = scsilun_to_int(&hdr->lun);
160 if (ref_lun != ref_cmd->se_cmd.orig_fe_lun) {
161 pr_err("Unable to perform connection recovery for"
162 " differing ref_lun: %d ref_cmd orig_fe_lun: %u\n",
163 ref_lun, ref_cmd->se_cmd.orig_fe_lun);
164 return ISCSI_TMF_RSP_REJECTED;
165 }
166
158 se_tmr->ref_task_tag = hdr->rtt; 167 se_tmr->ref_task_tag = hdr->rtt;
159 se_tmr->ref_cmd = &ref_cmd->se_cmd; 168 tmr_req->ref_cmd = ref_cmd;
160 se_tmr->ref_task_lun = get_unaligned_le64(&hdr->lun);
161 tmr_req->ref_cmd_sn = hdr->refcmdsn; 169 tmr_req->ref_cmd_sn = hdr->refcmdsn;
162 tmr_req->exp_data_sn = hdr->exp_datasn; 170 tmr_req->exp_data_sn = hdr->exp_datasn;
163 tmr_req->conn_recovery = cr; 171 tmr_req->conn_recovery = cr;
@@ -191,9 +199,7 @@ static int iscsit_task_reassign_complete_nop_out(
191 struct iscsi_tmr_req *tmr_req, 199 struct iscsi_tmr_req *tmr_req,
192 struct iscsi_conn *conn) 200 struct iscsi_conn *conn)
193{ 201{
194 struct se_tmr_req *se_tmr = tmr_req->se_tmr_req; 202 struct iscsi_cmd *cmd = tmr_req->ref_cmd;
195 struct se_cmd *se_cmd = se_tmr->ref_cmd;
196 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
197 struct iscsi_conn_recovery *cr; 203 struct iscsi_conn_recovery *cr;
198 204
199 if (!cmd->cr) { 205 if (!cmd->cr) {
@@ -251,7 +257,8 @@ static int iscsit_task_reassign_complete_write(
251 pr_debug("WRITE ITT: 0x%08x: t_state: %d" 257 pr_debug("WRITE ITT: 0x%08x: t_state: %d"
252 " never sent to transport\n", 258 " never sent to transport\n",
253 cmd->init_task_tag, cmd->se_cmd.t_state); 259 cmd->init_task_tag, cmd->se_cmd.t_state);
254 return transport_generic_handle_data(se_cmd); 260 target_execute_cmd(se_cmd);
261 return 0;
255 } 262 }
256 263
257 cmd->i_state = ISTATE_SEND_STATUS; 264 cmd->i_state = ISTATE_SEND_STATUS;
@@ -360,9 +367,7 @@ static int iscsit_task_reassign_complete_scsi_cmnd(
360 struct iscsi_tmr_req *tmr_req, 367 struct iscsi_tmr_req *tmr_req,
361 struct iscsi_conn *conn) 368 struct iscsi_conn *conn)
362{ 369{
363 struct se_tmr_req *se_tmr = tmr_req->se_tmr_req; 370 struct iscsi_cmd *cmd = tmr_req->ref_cmd;
364 struct se_cmd *se_cmd = se_tmr->ref_cmd;
365 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
366 struct iscsi_conn_recovery *cr; 371 struct iscsi_conn_recovery *cr;
367 372
368 if (!cmd->cr) { 373 if (!cmd->cr) {
@@ -385,7 +390,7 @@ static int iscsit_task_reassign_complete_scsi_cmnd(
385 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); 390 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list);
386 spin_unlock_bh(&conn->cmd_lock); 391 spin_unlock_bh(&conn->cmd_lock);
387 392
388 if (se_cmd->se_cmd_flags & SCF_SENT_CHECK_CONDITION) { 393 if (cmd->se_cmd.se_cmd_flags & SCF_SENT_CHECK_CONDITION) {
389 cmd->i_state = ISTATE_SEND_STATUS; 394 cmd->i_state = ISTATE_SEND_STATUS;
390 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); 395 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
391 return 0; 396 return 0;
@@ -411,17 +416,14 @@ static int iscsit_task_reassign_complete(
411 struct iscsi_tmr_req *tmr_req, 416 struct iscsi_tmr_req *tmr_req,
412 struct iscsi_conn *conn) 417 struct iscsi_conn *conn)
413{ 418{
414 struct se_tmr_req *se_tmr = tmr_req->se_tmr_req;
415 struct se_cmd *se_cmd;
416 struct iscsi_cmd *cmd; 419 struct iscsi_cmd *cmd;
417 int ret = 0; 420 int ret = 0;
418 421
419 if (!se_tmr->ref_cmd) { 422 if (!tmr_req->ref_cmd) {
420 pr_err("TMR Request is missing a RefCmd struct iscsi_cmd.\n"); 423 pr_err("TMR Request is missing a RefCmd struct iscsi_cmd.\n");
421 return -1; 424 return -1;
422 } 425 }
423 se_cmd = se_tmr->ref_cmd; 426 cmd = tmr_req->ref_cmd;
424 cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
425 427
426 cmd->conn = conn; 428 cmd->conn = conn;
427 429
@@ -547,9 +549,7 @@ int iscsit_task_reassign_prepare_write(
547 struct iscsi_tmr_req *tmr_req, 549 struct iscsi_tmr_req *tmr_req,
548 struct iscsi_conn *conn) 550 struct iscsi_conn *conn)
549{ 551{
550 struct se_tmr_req *se_tmr = tmr_req->se_tmr_req; 552 struct iscsi_cmd *cmd = tmr_req->ref_cmd;
551 struct se_cmd *se_cmd = se_tmr->ref_cmd;
552 struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
553 struct iscsi_pdu *pdu = NULL; 553 struct iscsi_pdu *pdu = NULL;
554 struct iscsi_r2t *r2t = NULL, *r2t_tmp; 554 struct iscsi_r2t *r2t = NULL, *r2t_tmp;
555 int first_incomplete_r2t = 1, i = 0; 555 int first_incomplete_r2t = 1, i = 0;
@@ -782,14 +782,12 @@ int iscsit_check_task_reassign_expdatasn(
782 struct iscsi_tmr_req *tmr_req, 782 struct iscsi_tmr_req *tmr_req,
783 struct iscsi_conn *conn) 783 struct iscsi_conn *conn)
784{ 784{
785 struct se_tmr_req *se_tmr = tmr_req->se_tmr_req; 785 struct iscsi_cmd *ref_cmd = tmr_req->ref_cmd;
786 struct se_cmd *se_cmd = se_tmr->ref_cmd;
787 struct iscsi_cmd *ref_cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd);
788 786
789 if (ref_cmd->iscsi_opcode != ISCSI_OP_SCSI_CMD) 787 if (ref_cmd->iscsi_opcode != ISCSI_OP_SCSI_CMD)
790 return 0; 788 return 0;
791 789
792 if (se_cmd->se_cmd_flags & SCF_SENT_CHECK_CONDITION) 790 if (ref_cmd->se_cmd.se_cmd_flags & SCF_SENT_CHECK_CONDITION)
793 return 0; 791 return 0;
794 792
795 if (ref_cmd->data_direction == DMA_NONE) 793 if (ref_cmd->data_direction == DMA_NONE)
diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
index 879d8d0fa3fe..a38a3f8ab0d9 100644
--- a/drivers/target/iscsi/iscsi_target_tpg.c
+++ b/drivers/target/iscsi/iscsi_target_tpg.c
@@ -303,6 +303,7 @@ int iscsit_tpg_enable_portal_group(struct iscsi_portal_group *tpg)
303{ 303{
304 struct iscsi_param *param; 304 struct iscsi_param *param;
305 struct iscsi_tiqn *tiqn = tpg->tpg_tiqn; 305 struct iscsi_tiqn *tiqn = tpg->tpg_tiqn;
306 int ret;
306 307
307 spin_lock(&tpg->tpg_state_lock); 308 spin_lock(&tpg->tpg_state_lock);
308 if (tpg->tpg_state == TPG_STATE_ACTIVE) { 309 if (tpg->tpg_state == TPG_STATE_ACTIVE) {
@@ -319,19 +320,19 @@ int iscsit_tpg_enable_portal_group(struct iscsi_portal_group *tpg)
319 param = iscsi_find_param_from_key(AUTHMETHOD, tpg->param_list); 320 param = iscsi_find_param_from_key(AUTHMETHOD, tpg->param_list);
320 if (!param) { 321 if (!param) {
321 spin_unlock(&tpg->tpg_state_lock); 322 spin_unlock(&tpg->tpg_state_lock);
322 return -ENOMEM; 323 return -EINVAL;
323 } 324 }
324 325
325 if (ISCSI_TPG_ATTRIB(tpg)->authentication) { 326 if (ISCSI_TPG_ATTRIB(tpg)->authentication) {
326 if (!strcmp(param->value, NONE)) 327 if (!strcmp(param->value, NONE)) {
327 if (iscsi_update_param_value(param, CHAP) < 0) { 328 ret = iscsi_update_param_value(param, CHAP);
328 spin_unlock(&tpg->tpg_state_lock); 329 if (ret)
329 return -ENOMEM; 330 goto err;
330 }
331 if (iscsit_ta_authentication(tpg, 1) < 0) {
332 spin_unlock(&tpg->tpg_state_lock);
333 return -ENOMEM;
334 } 331 }
332
333 ret = iscsit_ta_authentication(tpg, 1);
334 if (ret < 0)
335 goto err;
335 } 336 }
336 337
337 tpg->tpg_state = TPG_STATE_ACTIVE; 338 tpg->tpg_state = TPG_STATE_ACTIVE;
@@ -344,6 +345,10 @@ int iscsit_tpg_enable_portal_group(struct iscsi_portal_group *tpg)
344 spin_unlock(&tiqn->tiqn_tpg_lock); 345 spin_unlock(&tiqn->tiqn_tpg_lock);
345 346
346 return 0; 347 return 0;
348
349err:
350 spin_unlock(&tpg->tpg_state_lock);
351 return ret;
347} 352}
348 353
349int iscsit_tpg_disable_portal_group(struct iscsi_portal_group *tpg, int force) 354int iscsit_tpg_disable_portal_group(struct iscsi_portal_group *tpg, int force)
@@ -558,7 +563,7 @@ int iscsit_ta_authentication(struct iscsi_portal_group *tpg, u32 authentication)
558 if ((authentication != 1) && (authentication != 0)) { 563 if ((authentication != 1) && (authentication != 0)) {
559 pr_err("Illegal value for authentication parameter:" 564 pr_err("Illegal value for authentication parameter:"
560 " %u, ignoring request.\n", authentication); 565 " %u, ignoring request.\n", authentication);
561 return -1; 566 return -EINVAL;
562 } 567 }
563 568
564 memset(buf1, 0, sizeof(buf1)); 569 memset(buf1, 0, sizeof(buf1));
@@ -593,7 +598,7 @@ int iscsit_ta_authentication(struct iscsi_portal_group *tpg, u32 authentication)
593 } else { 598 } else {
594 snprintf(buf1, sizeof(buf1), "%s", param->value); 599 snprintf(buf1, sizeof(buf1), "%s", param->value);
595 none = strstr(buf1, NONE); 600 none = strstr(buf1, NONE);
596 if ((none)) 601 if (none)
597 goto out; 602 goto out;
598 strncat(buf1, ",", strlen(",")); 603 strncat(buf1, ",", strlen(","));
599 strncat(buf1, NONE, strlen(NONE)); 604 strncat(buf1, NONE, strlen(NONE));
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 38dfac2b0a1c..5491c632a15e 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -211,12 +211,11 @@ static void tcm_loop_submission_work(struct work_struct *work)
211 /* 211 /*
212 * Because some userspace code via scsi-generic do not memset their 212 * Because some userspace code via scsi-generic do not memset their
213 * associated read buffers, go ahead and do that here for type 213 * associated read buffers, go ahead and do that here for type
214 * SCF_SCSI_CONTROL_SG_IO_CDB. Also note that this is currently 214 * non-data CDBs. Also note that this is currently guaranteed to be a
215 * guaranteed to be a single SGL for SCF_SCSI_CONTROL_SG_IO_CDB 215 * single SGL for this case by target core in
216 * by target core in target_setup_cmd_from_cdb() -> 216 * target_setup_cmd_from_cdb() -> transport_generic_cmd_sequencer().
217 * transport_generic_cmd_sequencer().
218 */ 217 */
219 if (se_cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB && 218 if (!(se_cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) &&
220 se_cmd->data_direction == DMA_FROM_DEVICE) { 219 se_cmd->data_direction == DMA_FROM_DEVICE) {
221 struct scatterlist *sg = scsi_sglist(sc); 220 struct scatterlist *sg = scsi_sglist(sc);
222 unsigned char *buf = kmap(sg_page(sg)) + sg->offset; 221 unsigned char *buf = kmap(sg_page(sg)) + sg->offset;
@@ -779,7 +778,7 @@ static int tcm_loop_write_pending(struct se_cmd *se_cmd)
779 * We now tell TCM to add this WRITE CDB directly into the TCM storage 778 * We now tell TCM to add this WRITE CDB directly into the TCM storage
780 * object execution queue. 779 * object execution queue.
781 */ 780 */
782 transport_generic_process_write(se_cmd); 781 target_execute_cmd(se_cmd);
783 return 0; 782 return 0;
784} 783}
785 784
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 7e6136e2ce81..39ddba584b30 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -1219,28 +1219,14 @@ static void sbp_handle_command(struct sbp_target_request *req)
1219 ret = sbp_fetch_command(req); 1219 ret = sbp_fetch_command(req);
1220 if (ret) { 1220 if (ret) {
1221 pr_debug("sbp_handle_command: fetch command failed: %d\n", ret); 1221 pr_debug("sbp_handle_command: fetch command failed: %d\n", ret);
1222 req->status.status |= cpu_to_be32( 1222 goto err;
1223 STATUS_BLOCK_RESP(STATUS_RESP_TRANSPORT_FAILURE) |
1224 STATUS_BLOCK_DEAD(0) |
1225 STATUS_BLOCK_LEN(1) |
1226 STATUS_BLOCK_SBP_STATUS(SBP_STATUS_UNSPECIFIED_ERROR));
1227 sbp_send_status(req);
1228 sbp_free_request(req);
1229 return;
1230 } 1223 }
1231 1224
1232 ret = sbp_fetch_page_table(req); 1225 ret = sbp_fetch_page_table(req);
1233 if (ret) { 1226 if (ret) {
1234 pr_debug("sbp_handle_command: fetch page table failed: %d\n", 1227 pr_debug("sbp_handle_command: fetch page table failed: %d\n",
1235 ret); 1228 ret);
1236 req->status.status |= cpu_to_be32( 1229 goto err;
1237 STATUS_BLOCK_RESP(STATUS_RESP_TRANSPORT_FAILURE) |
1238 STATUS_BLOCK_DEAD(0) |
1239 STATUS_BLOCK_LEN(1) |
1240 STATUS_BLOCK_SBP_STATUS(SBP_STATUS_UNSPECIFIED_ERROR));
1241 sbp_send_status(req);
1242 sbp_free_request(req);
1243 return;
1244 } 1230 }
1245 1231
1246 unpacked_lun = req->login->lun->unpacked_lun; 1232 unpacked_lun = req->login->lun->unpacked_lun;
@@ -1249,9 +1235,21 @@ static void sbp_handle_command(struct sbp_target_request *req)
1249 pr_debug("sbp_handle_command ORB:0x%llx unpacked_lun:%d data_len:%d data_dir:%d\n", 1235 pr_debug("sbp_handle_command ORB:0x%llx unpacked_lun:%d data_len:%d data_dir:%d\n",
1250 req->orb_pointer, unpacked_lun, data_length, data_dir); 1236 req->orb_pointer, unpacked_lun, data_length, data_dir);
1251 1237
1252 target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf, 1238 if (target_submit_cmd(&req->se_cmd, sess->se_sess, req->cmd_buf,
1253 req->sense_buf, unpacked_lun, data_length, 1239 req->sense_buf, unpacked_lun, data_length,
1254 MSG_SIMPLE_TAG, data_dir, 0); 1240 MSG_SIMPLE_TAG, data_dir, 0))
1241 goto err;
1242
1243 return;
1244
1245err:
1246 req->status.status |= cpu_to_be32(
1247 STATUS_BLOCK_RESP(STATUS_RESP_TRANSPORT_FAILURE) |
1248 STATUS_BLOCK_DEAD(0) |
1249 STATUS_BLOCK_LEN(1) |
1250 STATUS_BLOCK_SBP_STATUS(SBP_STATUS_UNSPECIFIED_ERROR));
1251 sbp_send_status(req);
1252 sbp_free_request(req);
1255} 1253}
1256 1254
1257/* 1255/*
@@ -1784,8 +1782,7 @@ static int sbp_write_pending(struct se_cmd *se_cmd)
1784 return ret; 1782 return ret;
1785 } 1783 }
1786 1784
1787 transport_generic_process_write(se_cmd); 1785 target_execute_cmd(se_cmd);
1788
1789 return 0; 1786 return 0;
1790} 1787}
1791 1788
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 5ad972856a8d..cf2c66f3c116 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -300,8 +300,8 @@ int core_free_device_list_for_node(
300 lun = deve->se_lun; 300 lun = deve->se_lun;
301 301
302 spin_unlock_irq(&nacl->device_list_lock); 302 spin_unlock_irq(&nacl->device_list_lock);
303 core_update_device_list_for_node(lun, NULL, deve->mapped_lun, 303 core_disable_device_list_for_node(lun, NULL, deve->mapped_lun,
304 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg, 0); 304 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg);
305 spin_lock_irq(&nacl->device_list_lock); 305 spin_lock_irq(&nacl->device_list_lock);
306 } 306 }
307 spin_unlock_irq(&nacl->device_list_lock); 307 spin_unlock_irq(&nacl->device_list_lock);
@@ -342,72 +342,46 @@ void core_update_device_list_access(
342 spin_unlock_irq(&nacl->device_list_lock); 342 spin_unlock_irq(&nacl->device_list_lock);
343} 343}
344 344
345/* core_update_device_list_for_node(): 345/* core_enable_device_list_for_node():
346 * 346 *
347 * 347 *
348 */ 348 */
349int core_update_device_list_for_node( 349int core_enable_device_list_for_node(
350 struct se_lun *lun, 350 struct se_lun *lun,
351 struct se_lun_acl *lun_acl, 351 struct se_lun_acl *lun_acl,
352 u32 mapped_lun, 352 u32 mapped_lun,
353 u32 lun_access, 353 u32 lun_access,
354 struct se_node_acl *nacl, 354 struct se_node_acl *nacl,
355 struct se_portal_group *tpg, 355 struct se_portal_group *tpg)
356 int enable)
357{ 356{
358 struct se_port *port = lun->lun_sep; 357 struct se_port *port = lun->lun_sep;
359 struct se_dev_entry *deve = nacl->device_list[mapped_lun]; 358 struct se_dev_entry *deve;
360 int trans = 0;
361 /*
362 * If the MappedLUN entry is being disabled, the entry in
363 * port->sep_alua_list must be removed now before clearing the
364 * struct se_dev_entry pointers below as logic in
365 * core_alua_do_transition_tg_pt() depends on these being present.
366 */
367 if (!enable) {
368 /*
369 * deve->se_lun_acl will be NULL for demo-mode created LUNs
370 * that have not been explicitly concerted to MappedLUNs ->
371 * struct se_lun_acl, but we remove deve->alua_port_list from
372 * port->sep_alua_list. This also means that active UAs and
373 * NodeACL context specific PR metadata for demo-mode
374 * MappedLUN *deve will be released below..
375 */
376 spin_lock_bh(&port->sep_alua_lock);
377 list_del(&deve->alua_port_list);
378 spin_unlock_bh(&port->sep_alua_lock);
379 }
380 359
381 spin_lock_irq(&nacl->device_list_lock); 360 spin_lock_irq(&nacl->device_list_lock);
382 if (enable) { 361
383 /* 362 deve = nacl->device_list[mapped_lun];
384 * Check if the call is handling demo mode -> explict LUN ACL 363
385 * transition. This transition must be for the same struct se_lun 364 /*
386 * + mapped_lun that was setup in demo mode.. 365 * Check if the call is handling demo mode -> explict LUN ACL
387 */ 366 * transition. This transition must be for the same struct se_lun
388 if (deve->lun_flags & TRANSPORT_LUNFLAGS_INITIATOR_ACCESS) { 367 * + mapped_lun that was setup in demo mode..
389 if (deve->se_lun_acl != NULL) { 368 */
390 pr_err("struct se_dev_entry->se_lun_acl" 369 if (deve->lun_flags & TRANSPORT_LUNFLAGS_INITIATOR_ACCESS) {
391 " already set for demo mode -> explict" 370 if (deve->se_lun_acl != NULL) {
392 " LUN ACL transition\n"); 371 pr_err("struct se_dev_entry->se_lun_acl"
393 spin_unlock_irq(&nacl->device_list_lock); 372 " already set for demo mode -> explict"
394 return -EINVAL; 373 " LUN ACL transition\n");
395 } 374 spin_unlock_irq(&nacl->device_list_lock);
396 if (deve->se_lun != lun) { 375 return -EINVAL;
397 pr_err("struct se_dev_entry->se_lun does"
398 " match passed struct se_lun for demo mode"
399 " -> explict LUN ACL transition\n");
400 spin_unlock_irq(&nacl->device_list_lock);
401 return -EINVAL;
402 }
403 deve->se_lun_acl = lun_acl;
404 trans = 1;
405 } else {
406 deve->se_lun = lun;
407 deve->se_lun_acl = lun_acl;
408 deve->mapped_lun = mapped_lun;
409 deve->lun_flags |= TRANSPORT_LUNFLAGS_INITIATOR_ACCESS;
410 } 376 }
377 if (deve->se_lun != lun) {
378 pr_err("struct se_dev_entry->se_lun does"
379 " match passed struct se_lun for demo mode"
380 " -> explict LUN ACL transition\n");
381 spin_unlock_irq(&nacl->device_list_lock);
382 return -EINVAL;
383 }
384 deve->se_lun_acl = lun_acl;
411 385
412 if (lun_access & TRANSPORT_LUNFLAGS_READ_WRITE) { 386 if (lun_access & TRANSPORT_LUNFLAGS_READ_WRITE) {
413 deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_ONLY; 387 deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_ONLY;
@@ -417,27 +391,72 @@ int core_update_device_list_for_node(
417 deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_ONLY; 391 deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_ONLY;
418 } 392 }
419 393
420 if (trans) {
421 spin_unlock_irq(&nacl->device_list_lock);
422 return 0;
423 }
424 deve->creation_time = get_jiffies_64();
425 deve->attach_count++;
426 spin_unlock_irq(&nacl->device_list_lock); 394 spin_unlock_irq(&nacl->device_list_lock);
395 return 0;
396 }
427 397
428 spin_lock_bh(&port->sep_alua_lock); 398 deve->se_lun = lun;
429 list_add_tail(&deve->alua_port_list, &port->sep_alua_list); 399 deve->se_lun_acl = lun_acl;
430 spin_unlock_bh(&port->sep_alua_lock); 400 deve->mapped_lun = mapped_lun;
401 deve->lun_flags |= TRANSPORT_LUNFLAGS_INITIATOR_ACCESS;
431 402
432 return 0; 403 if (lun_access & TRANSPORT_LUNFLAGS_READ_WRITE) {
404 deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_ONLY;
405 deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_WRITE;
406 } else {
407 deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_WRITE;
408 deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_ONLY;
433 } 409 }
410
411 deve->creation_time = get_jiffies_64();
412 deve->attach_count++;
413 spin_unlock_irq(&nacl->device_list_lock);
414
415 spin_lock_bh(&port->sep_alua_lock);
416 list_add_tail(&deve->alua_port_list, &port->sep_alua_list);
417 spin_unlock_bh(&port->sep_alua_lock);
418
419 return 0;
420}
421
422/* core_disable_device_list_for_node():
423 *
424 *
425 */
426int core_disable_device_list_for_node(
427 struct se_lun *lun,
428 struct se_lun_acl *lun_acl,
429 u32 mapped_lun,
430 u32 lun_access,
431 struct se_node_acl *nacl,
432 struct se_portal_group *tpg)
433{
434 struct se_port *port = lun->lun_sep;
435 struct se_dev_entry *deve = nacl->device_list[mapped_lun];
436
437 /*
438 * If the MappedLUN entry is being disabled, the entry in
439 * port->sep_alua_list must be removed now before clearing the
440 * struct se_dev_entry pointers below as logic in
441 * core_alua_do_transition_tg_pt() depends on these being present.
442 *
443 * deve->se_lun_acl will be NULL for demo-mode created LUNs
444 * that have not been explicitly converted to MappedLUNs ->
445 * struct se_lun_acl, but we remove deve->alua_port_list from
446 * port->sep_alua_list. This also means that active UAs and
447 * NodeACL context specific PR metadata for demo-mode
448 * MappedLUN *deve will be released below..
449 */
450 spin_lock_bh(&port->sep_alua_lock);
451 list_del(&deve->alua_port_list);
452 spin_unlock_bh(&port->sep_alua_lock);
434 /* 453 /*
435 * Wait for any in process SPEC_I_PT=1 or REGISTER_AND_MOVE 454 * Wait for any in process SPEC_I_PT=1 or REGISTER_AND_MOVE
436 * PR operation to complete. 455 * PR operation to complete.
437 */ 456 */
438 spin_unlock_irq(&nacl->device_list_lock);
439 while (atomic_read(&deve->pr_ref_count) != 0) 457 while (atomic_read(&deve->pr_ref_count) != 0)
440 cpu_relax(); 458 cpu_relax();
459
441 spin_lock_irq(&nacl->device_list_lock); 460 spin_lock_irq(&nacl->device_list_lock);
442 /* 461 /*
443 * Disable struct se_dev_entry LUN ACL mapping 462 * Disable struct se_dev_entry LUN ACL mapping
@@ -475,9 +494,9 @@ void core_clear_lun_from_tpg(struct se_lun *lun, struct se_portal_group *tpg)
475 continue; 494 continue;
476 spin_unlock_irq(&nacl->device_list_lock); 495 spin_unlock_irq(&nacl->device_list_lock);
477 496
478 core_update_device_list_for_node(lun, NULL, 497 core_disable_device_list_for_node(lun, NULL,
479 deve->mapped_lun, TRANSPORT_LUNFLAGS_NO_ACCESS, 498 deve->mapped_lun, TRANSPORT_LUNFLAGS_NO_ACCESS,
480 nacl, tpg, 0); 499 nacl, tpg);
481 500
482 spin_lock_irq(&nacl->device_list_lock); 501 spin_lock_irq(&nacl->device_list_lock);
483 } 502 }
@@ -715,7 +734,7 @@ void se_release_device_for_hba(struct se_device *dev)
715 se_dev_stop(dev); 734 se_dev_stop(dev);
716 735
717 if (dev->dev_ptr) { 736 if (dev->dev_ptr) {
718 kthread_stop(dev->process_thread); 737 destroy_workqueue(dev->tmr_wq);
719 if (dev->transport->free_device) 738 if (dev->transport->free_device)
720 dev->transport->free_device(dev->dev_ptr); 739 dev->transport->free_device(dev->dev_ptr);
721 } 740 }
@@ -822,7 +841,7 @@ int se_dev_check_shutdown(struct se_device *dev)
822 return ret; 841 return ret;
823} 842}
824 843
825u32 se_dev_align_max_sectors(u32 max_sectors, u32 block_size) 844static u32 se_dev_align_max_sectors(u32 max_sectors, u32 block_size)
826{ 845{
827 u32 tmp, aligned_max_sectors; 846 u32 tmp, aligned_max_sectors;
828 /* 847 /*
@@ -1273,7 +1292,6 @@ int se_dev_set_block_size(struct se_device *dev, u32 block_size)
1273 1292
1274struct se_lun *core_dev_add_lun( 1293struct se_lun *core_dev_add_lun(
1275 struct se_portal_group *tpg, 1294 struct se_portal_group *tpg,
1276 struct se_hba *hba,
1277 struct se_device *dev, 1295 struct se_device *dev,
1278 u32 lun) 1296 u32 lun)
1279{ 1297{
@@ -1298,7 +1316,7 @@ struct se_lun *core_dev_add_lun(
1298 pr_debug("%s_TPG[%u]_LUN[%u] - Activated %s Logical Unit from" 1316 pr_debug("%s_TPG[%u]_LUN[%u] - Activated %s Logical Unit from"
1299 " CORE HBA: %u\n", tpg->se_tpg_tfo->get_fabric_name(), 1317 " CORE HBA: %u\n", tpg->se_tpg_tfo->get_fabric_name(),
1300 tpg->se_tpg_tfo->tpg_get_tag(tpg), lun_p->unpacked_lun, 1318 tpg->se_tpg_tfo->tpg_get_tag(tpg), lun_p->unpacked_lun,
1301 tpg->se_tpg_tfo->get_fabric_name(), hba->hba_id); 1319 tpg->se_tpg_tfo->get_fabric_name(), dev->se_hba->hba_id);
1302 /* 1320 /*
1303 * Update LUN maps for dynamically added initiators when 1321 * Update LUN maps for dynamically added initiators when
1304 * generate_node_acl is enabled. 1322 * generate_node_acl is enabled.
@@ -1470,8 +1488,8 @@ int core_dev_add_initiator_node_lun_acl(
1470 1488
1471 lacl->se_lun = lun; 1489 lacl->se_lun = lun;
1472 1490
1473 if (core_update_device_list_for_node(lun, lacl, lacl->mapped_lun, 1491 if (core_enable_device_list_for_node(lun, lacl, lacl->mapped_lun,
1474 lun_access, nacl, tpg, 1) < 0) 1492 lun_access, nacl, tpg) < 0)
1475 return -EINVAL; 1493 return -EINVAL;
1476 1494
1477 spin_lock(&lun->lun_acl_lock); 1495 spin_lock(&lun->lun_acl_lock);
@@ -1514,8 +1532,8 @@ int core_dev_del_initiator_node_lun_acl(
1514 smp_mb__after_atomic_dec(); 1532 smp_mb__after_atomic_dec();
1515 spin_unlock(&lun->lun_acl_lock); 1533 spin_unlock(&lun->lun_acl_lock);
1516 1534
1517 core_update_device_list_for_node(lun, NULL, lacl->mapped_lun, 1535 core_disable_device_list_for_node(lun, NULL, lacl->mapped_lun,
1518 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg, 0); 1536 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg);
1519 1537
1520 lacl->se_lun = NULL; 1538 lacl->se_lun = NULL;
1521 1539
diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
index 405cc98eaed6..ea479e54f5fd 100644
--- a/drivers/target/target_core_fabric_configfs.c
+++ b/drivers/target/target_core_fabric_configfs.c
@@ -764,8 +764,7 @@ static int target_fabric_port_link(
764 goto out; 764 goto out;
765 } 765 }
766 766
767 lun_p = core_dev_add_lun(se_tpg, dev->se_hba, dev, 767 lun_p = core_dev_add_lun(se_tpg, dev, lun->unpacked_lun);
768 lun->unpacked_lun);
769 if (IS_ERR(lun_p)) { 768 if (IS_ERR(lun_p)) {
770 pr_err("core_dev_add_lun() failed\n"); 769 pr_err("core_dev_add_lun() failed\n");
771 ret = PTR_ERR(lun_p); 770 ret = PTR_ERR(lun_p);
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index 9f99d0404908..9e2100551c78 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -331,7 +331,7 @@ static int fd_do_writev(struct se_cmd *cmd, struct scatterlist *sgl,
331 return 1; 331 return 1;
332} 332}
333 333
334static void fd_emulate_sync_cache(struct se_cmd *cmd) 334static int fd_execute_sync_cache(struct se_cmd *cmd)
335{ 335{
336 struct se_device *dev = cmd->se_dev; 336 struct se_device *dev = cmd->se_dev;
337 struct fd_dev *fd_dev = dev->dev_ptr; 337 struct fd_dev *fd_dev = dev->dev_ptr;
@@ -365,7 +365,7 @@ static void fd_emulate_sync_cache(struct se_cmd *cmd)
365 pr_err("FILEIO: vfs_fsync_range() failed: %d\n", ret); 365 pr_err("FILEIO: vfs_fsync_range() failed: %d\n", ret);
366 366
367 if (immed) 367 if (immed)
368 return; 368 return 0;
369 369
370 if (ret) { 370 if (ret) {
371 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 371 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
@@ -373,11 +373,15 @@ static void fd_emulate_sync_cache(struct se_cmd *cmd)
373 } else { 373 } else {
374 target_complete_cmd(cmd, SAM_STAT_GOOD); 374 target_complete_cmd(cmd, SAM_STAT_GOOD);
375 } 375 }
376
377 return 0;
376} 378}
377 379
378static int fd_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl, 380static int fd_execute_rw(struct se_cmd *cmd)
379 u32 sgl_nents, enum dma_data_direction data_direction)
380{ 381{
382 struct scatterlist *sgl = cmd->t_data_sg;
383 u32 sgl_nents = cmd->t_data_nents;
384 enum dma_data_direction data_direction = cmd->data_direction;
381 struct se_device *dev = cmd->se_dev; 385 struct se_device *dev = cmd->se_dev;
382 int ret = 0; 386 int ret = 0;
383 387
@@ -550,6 +554,16 @@ static sector_t fd_get_blocks(struct se_device *dev)
550 return div_u64(dev_size, dev->se_sub_dev->se_dev_attrib.block_size); 554 return div_u64(dev_size, dev->se_sub_dev->se_dev_attrib.block_size);
551} 555}
552 556
557static struct spc_ops fd_spc_ops = {
558 .execute_rw = fd_execute_rw,
559 .execute_sync_cache = fd_execute_sync_cache,
560};
561
562static int fd_parse_cdb(struct se_cmd *cmd)
563{
564 return sbc_parse_cdb(cmd, &fd_spc_ops);
565}
566
553static struct se_subsystem_api fileio_template = { 567static struct se_subsystem_api fileio_template = {
554 .name = "fileio", 568 .name = "fileio",
555 .owner = THIS_MODULE, 569 .owner = THIS_MODULE,
@@ -561,8 +575,7 @@ static struct se_subsystem_api fileio_template = {
561 .allocate_virtdevice = fd_allocate_virtdevice, 575 .allocate_virtdevice = fd_allocate_virtdevice,
562 .create_virtdevice = fd_create_virtdevice, 576 .create_virtdevice = fd_create_virtdevice,
563 .free_device = fd_free_device, 577 .free_device = fd_free_device,
564 .execute_cmd = fd_execute_cmd, 578 .parse_cdb = fd_parse_cdb,
565 .do_sync_cache = fd_emulate_sync_cache,
566 .check_configfs_dev_params = fd_check_configfs_dev_params, 579 .check_configfs_dev_params = fd_check_configfs_dev_params,
567 .set_configfs_dev_params = fd_set_configfs_dev_params, 580 .set_configfs_dev_params = fd_set_configfs_dev_params,
568 .show_configfs_dev_params = fd_show_configfs_dev_params, 581 .show_configfs_dev_params = fd_show_configfs_dev_params,
diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
index fd47950727b4..76db75e836ed 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -40,6 +40,7 @@
40#include <linux/module.h> 40#include <linux/module.h>
41#include <scsi/scsi.h> 41#include <scsi/scsi.h>
42#include <scsi/scsi_host.h> 42#include <scsi/scsi_host.h>
43#include <asm/unaligned.h>
43 44
44#include <target/target_core_base.h> 45#include <target/target_core_base.h>
45#include <target/target_core_backend.h> 46#include <target/target_core_backend.h>
@@ -96,6 +97,7 @@ static struct se_device *iblock_create_virtdevice(
96 struct request_queue *q; 97 struct request_queue *q;
97 struct queue_limits *limits; 98 struct queue_limits *limits;
98 u32 dev_flags = 0; 99 u32 dev_flags = 0;
100 fmode_t mode;
99 int ret = -EINVAL; 101 int ret = -EINVAL;
100 102
101 if (!ib_dev) { 103 if (!ib_dev) {
@@ -117,8 +119,11 @@ static struct se_device *iblock_create_virtdevice(
117 pr_debug( "IBLOCK: Claiming struct block_device: %s\n", 119 pr_debug( "IBLOCK: Claiming struct block_device: %s\n",
118 ib_dev->ibd_udev_path); 120 ib_dev->ibd_udev_path);
119 121
120 bd = blkdev_get_by_path(ib_dev->ibd_udev_path, 122 mode = FMODE_READ|FMODE_EXCL;
121 FMODE_WRITE|FMODE_READ|FMODE_EXCL, ib_dev); 123 if (!ib_dev->ibd_readonly)
124 mode |= FMODE_WRITE;
125
126 bd = blkdev_get_by_path(ib_dev->ibd_udev_path, mode, ib_dev);
122 if (IS_ERR(bd)) { 127 if (IS_ERR(bd)) {
123 ret = PTR_ERR(bd); 128 ret = PTR_ERR(bd);
124 goto failed; 129 goto failed;
@@ -292,7 +297,7 @@ static void iblock_end_io_flush(struct bio *bio, int err)
292 * Implement SYCHRONIZE CACHE. Note that we can't handle lba ranges and must 297 * Implement SYCHRONIZE CACHE. Note that we can't handle lba ranges and must
293 * always flush the whole cache. 298 * always flush the whole cache.
294 */ 299 */
295static void iblock_emulate_sync_cache(struct se_cmd *cmd) 300static int iblock_execute_sync_cache(struct se_cmd *cmd)
296{ 301{
297 struct iblock_dev *ib_dev = cmd->se_dev->dev_ptr; 302 struct iblock_dev *ib_dev = cmd->se_dev->dev_ptr;
298 int immed = (cmd->t_task_cdb[1] & 0x2); 303 int immed = (cmd->t_task_cdb[1] & 0x2);
@@ -311,23 +316,98 @@ static void iblock_emulate_sync_cache(struct se_cmd *cmd)
311 if (!immed) 316 if (!immed)
312 bio->bi_private = cmd; 317 bio->bi_private = cmd;
313 submit_bio(WRITE_FLUSH, bio); 318 submit_bio(WRITE_FLUSH, bio);
319 return 0;
314} 320}
315 321
316static int iblock_do_discard(struct se_device *dev, sector_t lba, u32 range) 322static int iblock_execute_unmap(struct se_cmd *cmd)
317{ 323{
324 struct se_device *dev = cmd->se_dev;
318 struct iblock_dev *ibd = dev->dev_ptr; 325 struct iblock_dev *ibd = dev->dev_ptr;
319 struct block_device *bd = ibd->ibd_bd; 326 unsigned char *buf, *ptr = NULL;
320 int barrier = 0; 327 sector_t lba;
328 int size = cmd->data_length;
329 u32 range;
330 int ret = 0;
331 int dl, bd_dl;
332
333 buf = transport_kmap_data_sg(cmd);
334
335 dl = get_unaligned_be16(&buf[0]);
336 bd_dl = get_unaligned_be16(&buf[2]);
337
338 size = min(size - 8, bd_dl);
339 if (size / 16 > dev->se_sub_dev->se_dev_attrib.max_unmap_block_desc_count) {
340 cmd->scsi_sense_reason = TCM_INVALID_PARAMETER_LIST;
341 ret = -EINVAL;
342 goto err;
343 }
344
345 /* First UNMAP block descriptor starts at 8 byte offset */
346 ptr = &buf[8];
347 pr_debug("UNMAP: Sub: %s Using dl: %u bd_dl: %u size: %u"
348 " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr);
349
350 while (size >= 16) {
351 lba = get_unaligned_be64(&ptr[0]);
352 range = get_unaligned_be32(&ptr[8]);
353 pr_debug("UNMAP: Using lba: %llu and range: %u\n",
354 (unsigned long long)lba, range);
355
356 if (range > dev->se_sub_dev->se_dev_attrib.max_unmap_lba_count) {
357 cmd->scsi_sense_reason = TCM_INVALID_PARAMETER_LIST;
358 ret = -EINVAL;
359 goto err;
360 }
361
362 if (lba + range > dev->transport->get_blocks(dev) + 1) {
363 cmd->scsi_sense_reason = TCM_ADDRESS_OUT_OF_RANGE;
364 ret = -EINVAL;
365 goto err;
366 }
321 367
322 return blkdev_issue_discard(bd, lba, range, GFP_KERNEL, barrier); 368 ret = blkdev_issue_discard(ibd->ibd_bd, lba, range,
369 GFP_KERNEL, 0);
370 if (ret < 0) {
371 pr_err("blkdev_issue_discard() failed: %d\n",
372 ret);
373 goto err;
374 }
375
376 ptr += 16;
377 size -= 16;
378 }
379
380err:
381 transport_kunmap_data_sg(cmd);
382 if (!ret)
383 target_complete_cmd(cmd, GOOD);
384 return ret;
385}
386
387static int iblock_execute_write_same(struct se_cmd *cmd)
388{
389 struct iblock_dev *ibd = cmd->se_dev->dev_ptr;
390 int ret;
391
392 ret = blkdev_issue_discard(ibd->ibd_bd, cmd->t_task_lba,
393 spc_get_write_same_sectors(cmd), GFP_KERNEL,
394 0);
395 if (ret < 0) {
396 pr_debug("blkdev_issue_discard() failed for WRITE_SAME\n");
397 return ret;
398 }
399
400 target_complete_cmd(cmd, GOOD);
401 return 0;
323} 402}
324 403
325enum { 404enum {
326 Opt_udev_path, Opt_force, Opt_err 405 Opt_udev_path, Opt_readonly, Opt_force, Opt_err
327}; 406};
328 407
329static match_table_t tokens = { 408static match_table_t tokens = {
330 {Opt_udev_path, "udev_path=%s"}, 409 {Opt_udev_path, "udev_path=%s"},
410 {Opt_readonly, "readonly=%d"},
331 {Opt_force, "force=%d"}, 411 {Opt_force, "force=%d"},
332 {Opt_err, NULL} 412 {Opt_err, NULL}
333}; 413};
@@ -340,6 +420,7 @@ static ssize_t iblock_set_configfs_dev_params(struct se_hba *hba,
340 char *orig, *ptr, *arg_p, *opts; 420 char *orig, *ptr, *arg_p, *opts;
341 substring_t args[MAX_OPT_ARGS]; 421 substring_t args[MAX_OPT_ARGS];
342 int ret = 0, token; 422 int ret = 0, token;
423 unsigned long tmp_readonly;
343 424
344 opts = kstrdup(page, GFP_KERNEL); 425 opts = kstrdup(page, GFP_KERNEL);
345 if (!opts) 426 if (!opts)
@@ -372,6 +453,22 @@ static ssize_t iblock_set_configfs_dev_params(struct se_hba *hba,
372 ib_dev->ibd_udev_path); 453 ib_dev->ibd_udev_path);
373 ib_dev->ibd_flags |= IBDF_HAS_UDEV_PATH; 454 ib_dev->ibd_flags |= IBDF_HAS_UDEV_PATH;
374 break; 455 break;
456 case Opt_readonly:
457 arg_p = match_strdup(&args[0]);
458 if (!arg_p) {
459 ret = -ENOMEM;
460 break;
461 }
462 ret = strict_strtoul(arg_p, 0, &tmp_readonly);
463 kfree(arg_p);
464 if (ret < 0) {
465 pr_err("strict_strtoul() failed for"
466 " readonly=\n");
467 goto out;
468 }
469 ib_dev->ibd_readonly = tmp_readonly;
470 pr_debug("IBLOCK: readonly: %d\n", ib_dev->ibd_readonly);
471 break;
375 case Opt_force: 472 case Opt_force:
376 break; 473 break;
377 default: 474 default:
@@ -411,11 +508,10 @@ static ssize_t iblock_show_configfs_dev_params(
411 if (bd) 508 if (bd)
412 bl += sprintf(b + bl, "iBlock device: %s", 509 bl += sprintf(b + bl, "iBlock device: %s",
413 bdevname(bd, buf)); 510 bdevname(bd, buf));
414 if (ibd->ibd_flags & IBDF_HAS_UDEV_PATH) { 511 if (ibd->ibd_flags & IBDF_HAS_UDEV_PATH)
415 bl += sprintf(b + bl, " UDEV PATH: %s\n", 512 bl += sprintf(b + bl, " UDEV PATH: %s",
416 ibd->ibd_udev_path); 513 ibd->ibd_udev_path);
417 } else 514 bl += sprintf(b + bl, " readonly: %d\n", ibd->ibd_readonly);
418 bl += sprintf(b + bl, "\n");
419 515
420 bl += sprintf(b + bl, " "); 516 bl += sprintf(b + bl, " ");
421 if (bd) { 517 if (bd) {
@@ -493,9 +589,11 @@ static void iblock_submit_bios(struct bio_list *list, int rw)
493 blk_finish_plug(&plug); 589 blk_finish_plug(&plug);
494} 590}
495 591
496static int iblock_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl, 592static int iblock_execute_rw(struct se_cmd *cmd)
497 u32 sgl_nents, enum dma_data_direction data_direction)
498{ 593{
594 struct scatterlist *sgl = cmd->t_data_sg;
595 u32 sgl_nents = cmd->t_data_nents;
596 enum dma_data_direction data_direction = cmd->data_direction;
499 struct se_device *dev = cmd->se_dev; 597 struct se_device *dev = cmd->se_dev;
500 struct iblock_req *ibr; 598 struct iblock_req *ibr;
501 struct bio *bio; 599 struct bio *bio;
@@ -642,6 +740,18 @@ static void iblock_bio_done(struct bio *bio, int err)
642 iblock_complete_cmd(cmd); 740 iblock_complete_cmd(cmd);
643} 741}
644 742
743static struct spc_ops iblock_spc_ops = {
744 .execute_rw = iblock_execute_rw,
745 .execute_sync_cache = iblock_execute_sync_cache,
746 .execute_write_same = iblock_execute_write_same,
747 .execute_unmap = iblock_execute_unmap,
748};
749
750static int iblock_parse_cdb(struct se_cmd *cmd)
751{
752 return sbc_parse_cdb(cmd, &iblock_spc_ops);
753}
754
645static struct se_subsystem_api iblock_template = { 755static struct se_subsystem_api iblock_template = {
646 .name = "iblock", 756 .name = "iblock",
647 .owner = THIS_MODULE, 757 .owner = THIS_MODULE,
@@ -653,9 +763,7 @@ static struct se_subsystem_api iblock_template = {
653 .allocate_virtdevice = iblock_allocate_virtdevice, 763 .allocate_virtdevice = iblock_allocate_virtdevice,
654 .create_virtdevice = iblock_create_virtdevice, 764 .create_virtdevice = iblock_create_virtdevice,
655 .free_device = iblock_free_device, 765 .free_device = iblock_free_device,
656 .execute_cmd = iblock_execute_cmd, 766 .parse_cdb = iblock_parse_cdb,
657 .do_discard = iblock_do_discard,
658 .do_sync_cache = iblock_emulate_sync_cache,
659 .check_configfs_dev_params = iblock_check_configfs_dev_params, 767 .check_configfs_dev_params = iblock_check_configfs_dev_params,
660 .set_configfs_dev_params = iblock_set_configfs_dev_params, 768 .set_configfs_dev_params = iblock_set_configfs_dev_params,
661 .show_configfs_dev_params = iblock_show_configfs_dev_params, 769 .show_configfs_dev_params = iblock_show_configfs_dev_params,
diff --git a/drivers/target/target_core_iblock.h b/drivers/target/target_core_iblock.h
index 66cf7b9e205e..533627ae79ec 100644
--- a/drivers/target/target_core_iblock.h
+++ b/drivers/target/target_core_iblock.h
@@ -18,6 +18,7 @@ struct iblock_dev {
18 u32 ibd_flags; 18 u32 ibd_flags;
19 struct bio_set *ibd_bio_set; 19 struct bio_set *ibd_bio_set;
20 struct block_device *ibd_bd; 20 struct block_device *ibd_bd;
21 bool ibd_readonly;
21} ____cacheline_aligned; 22} ____cacheline_aligned;
22 23
23#endif /* TARGET_CORE_IBLOCK_H */ 24#endif /* TARGET_CORE_IBLOCK_H */
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
index 165e82429687..0fd428225d11 100644
--- a/drivers/target/target_core_internal.h
+++ b/drivers/target/target_core_internal.h
@@ -4,25 +4,16 @@
4/* target_core_alua.c */ 4/* target_core_alua.c */
5extern struct t10_alua_lu_gp *default_lu_gp; 5extern struct t10_alua_lu_gp *default_lu_gp;
6 6
7/* target_core_cdb.c */
8int target_emulate_inquiry(struct se_cmd *cmd);
9int target_emulate_readcapacity(struct se_cmd *cmd);
10int target_emulate_readcapacity_16(struct se_cmd *cmd);
11int target_emulate_modesense(struct se_cmd *cmd);
12int target_emulate_request_sense(struct se_cmd *cmd);
13int target_emulate_unmap(struct se_cmd *cmd);
14int target_emulate_write_same(struct se_cmd *cmd);
15int target_emulate_synchronize_cache(struct se_cmd *cmd);
16int target_emulate_noop(struct se_cmd *cmd);
17
18/* target_core_device.c */ 7/* target_core_device.c */
19struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16); 8struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16);
20int core_free_device_list_for_node(struct se_node_acl *, 9int core_free_device_list_for_node(struct se_node_acl *,
21 struct se_portal_group *); 10 struct se_portal_group *);
22void core_dec_lacl_count(struct se_node_acl *, struct se_cmd *); 11void core_dec_lacl_count(struct se_node_acl *, struct se_cmd *);
23void core_update_device_list_access(u32, u32, struct se_node_acl *); 12void core_update_device_list_access(u32, u32, struct se_node_acl *);
24int core_update_device_list_for_node(struct se_lun *, struct se_lun_acl *, 13int core_enable_device_list_for_node(struct se_lun *, struct se_lun_acl *,
25 u32, u32, struct se_node_acl *, struct se_portal_group *, int); 14 u32, u32, struct se_node_acl *, struct se_portal_group *);
15int core_disable_device_list_for_node(struct se_lun *, struct se_lun_acl *,
16 u32, u32, struct se_node_acl *, struct se_portal_group *);
26void core_clear_lun_from_tpg(struct se_lun *, struct se_portal_group *); 17void core_clear_lun_from_tpg(struct se_lun *, struct se_portal_group *);
27int core_dev_export(struct se_device *, struct se_portal_group *, 18int core_dev_export(struct se_device *, struct se_portal_group *,
28 struct se_lun *); 19 struct se_lun *);
@@ -56,8 +47,7 @@ int se_dev_set_max_sectors(struct se_device *, u32);
56int se_dev_set_fabric_max_sectors(struct se_device *, u32); 47int se_dev_set_fabric_max_sectors(struct se_device *, u32);
57int se_dev_set_optimal_sectors(struct se_device *, u32); 48int se_dev_set_optimal_sectors(struct se_device *, u32);
58int se_dev_set_block_size(struct se_device *, u32); 49int se_dev_set_block_size(struct se_device *, u32);
59struct se_lun *core_dev_add_lun(struct se_portal_group *, struct se_hba *, 50struct se_lun *core_dev_add_lun(struct se_portal_group *, struct se_device *, u32);
60 struct se_device *, u32);
61int core_dev_del_lun(struct se_portal_group *, u32); 51int core_dev_del_lun(struct se_portal_group *, u32);
62struct se_lun *core_get_lun_from_tpg(struct se_portal_group *, u32); 52struct se_lun *core_get_lun_from_tpg(struct se_portal_group *, u32);
63struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *, 53struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *,
@@ -104,7 +94,6 @@ void release_se_kmem_caches(void);
104u32 scsi_get_new_index(scsi_index_t); 94u32 scsi_get_new_index(scsi_index_t);
105void transport_subsystem_check_init(void); 95void transport_subsystem_check_init(void);
106void transport_cmd_finish_abort(struct se_cmd *, int); 96void transport_cmd_finish_abort(struct se_cmd *, int);
107void __target_remove_from_execute_list(struct se_cmd *);
108unsigned char *transport_dump_cmd_direction(struct se_cmd *); 97unsigned char *transport_dump_cmd_direction(struct se_cmd *);
109void transport_dump_dev_state(struct se_device *, char *, int *); 98void transport_dump_dev_state(struct se_device *, char *, int *);
110void transport_dump_dev_info(struct se_device *, struct se_lun *, 99void transport_dump_dev_info(struct se_device *, struct se_lun *,
@@ -116,6 +105,7 @@ int transport_dump_vpd_ident(struct t10_vpd *, unsigned char *, int);
116bool target_stop_cmd(struct se_cmd *cmd, unsigned long *flags); 105bool target_stop_cmd(struct se_cmd *cmd, unsigned long *flags);
117int transport_clear_lun_from_sessions(struct se_lun *); 106int transport_clear_lun_from_sessions(struct se_lun *);
118void transport_send_task_abort(struct se_cmd *); 107void transport_send_task_abort(struct se_cmd *);
108int target_cmd_size_check(struct se_cmd *cmd, unsigned int size);
119 109
120/* target_core_stat.c */ 110/* target_core_stat.c */
121void target_stat_setup_dev_default_groups(struct se_subsystem_dev *); 111void target_stat_setup_dev_default_groups(struct se_subsystem_dev *);
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 85564998500a..1e946502c378 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -507,7 +507,7 @@ static int core_scsi3_pr_seq_non_holder(
507 * Check if write exclusive initiator ports *NOT* holding the 507 * Check if write exclusive initiator ports *NOT* holding the
508 * WRITE_EXCLUSIVE_* reservation. 508 * WRITE_EXCLUSIVE_* reservation.
509 */ 509 */
510 if ((we) && !(registered_nexus)) { 510 if (we && !registered_nexus) {
511 if (cmd->data_direction == DMA_TO_DEVICE) { 511 if (cmd->data_direction == DMA_TO_DEVICE) {
512 /* 512 /*
513 * Conflict for write exclusive 513 * Conflict for write exclusive
@@ -2031,7 +2031,7 @@ static int __core_scsi3_write_aptpl_to_file(
2031 if (IS_ERR(file) || !file || !file->f_dentry) { 2031 if (IS_ERR(file) || !file || !file->f_dentry) {
2032 pr_err("filp_open(%s) for APTPL metadata" 2032 pr_err("filp_open(%s) for APTPL metadata"
2033 " failed\n", path); 2033 " failed\n", path);
2034 return (PTR_ERR(file) < 0 ? PTR_ERR(file) : -ENOENT); 2034 return IS_ERR(file) ? PTR_ERR(file) : -ENOENT;
2035 } 2035 }
2036 2036
2037 iov[0].iov_base = &buf[0]; 2037 iov[0].iov_base = &buf[0];
@@ -2486,7 +2486,7 @@ static int core_scsi3_pro_reserve(
2486 */ 2486 */
2487 spin_lock(&dev->dev_reservation_lock); 2487 spin_lock(&dev->dev_reservation_lock);
2488 pr_res_holder = dev->dev_pr_res_holder; 2488 pr_res_holder = dev->dev_pr_res_holder;
2489 if ((pr_res_holder)) { 2489 if (pr_res_holder) {
2490 /* 2490 /*
2491 * From spc4r17 Section 5.7.9: Reserving: 2491 * From spc4r17 Section 5.7.9: Reserving:
2492 * 2492 *
@@ -3818,7 +3818,7 @@ int target_scsi3_emulate_pr_out(struct se_cmd *cmd)
3818 " SPC-2 reservation is held, returning" 3818 " SPC-2 reservation is held, returning"
3819 " RESERVATION_CONFLICT\n"); 3819 " RESERVATION_CONFLICT\n");
3820 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT; 3820 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
3821 ret = EINVAL; 3821 ret = -EINVAL;
3822 goto out; 3822 goto out;
3823 } 3823 }
3824 3824
@@ -3828,7 +3828,8 @@ int target_scsi3_emulate_pr_out(struct se_cmd *cmd)
3828 */ 3828 */
3829 if (!cmd->se_sess) { 3829 if (!cmd->se_sess) {
3830 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 3830 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
3831 return -EINVAL; 3831 ret = -EINVAL;
3832 goto out;
3832 } 3833 }
3833 3834
3834 if (cmd->data_length < 24) { 3835 if (cmd->data_length < 24) {
@@ -4029,7 +4030,7 @@ static int core_scsi3_pri_read_reservation(struct se_cmd *cmd)
4029 4030
4030 spin_lock(&se_dev->dev_reservation_lock); 4031 spin_lock(&se_dev->dev_reservation_lock);
4031 pr_reg = se_dev->dev_pr_res_holder; 4032 pr_reg = se_dev->dev_pr_res_holder;
4032 if ((pr_reg)) { 4033 if (pr_reg) {
4033 /* 4034 /*
4034 * Set the hardcoded Additional Length 4035 * Set the hardcoded Additional Length
4035 */ 4036 */
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 4ce2cf642fce..6e32ff6f2fa0 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -35,8 +35,10 @@
35#include <linux/spinlock.h> 35#include <linux/spinlock.h>
36#include <linux/genhd.h> 36#include <linux/genhd.h>
37#include <linux/cdrom.h> 37#include <linux/cdrom.h>
38#include <linux/file.h> 38#include <linux/ratelimit.h>
39#include <linux/module.h> 39#include <linux/module.h>
40#include <asm/unaligned.h>
41
40#include <scsi/scsi.h> 42#include <scsi/scsi.h>
41#include <scsi/scsi_device.h> 43#include <scsi/scsi_device.h>
42#include <scsi/scsi_cmnd.h> 44#include <scsi/scsi_cmnd.h>
@@ -46,12 +48,14 @@
46#include <target/target_core_base.h> 48#include <target/target_core_base.h>
47#include <target/target_core_backend.h> 49#include <target/target_core_backend.h>
48 50
51#include "target_core_alua.h"
49#include "target_core_pscsi.h" 52#include "target_core_pscsi.h"
50 53
51#define ISPRINT(a) ((a >= ' ') && (a <= '~')) 54#define ISPRINT(a) ((a >= ' ') && (a <= '~'))
52 55
53static struct se_subsystem_api pscsi_template; 56static struct se_subsystem_api pscsi_template;
54 57
58static int pscsi_execute_cmd(struct se_cmd *cmd);
55static void pscsi_req_done(struct request *, int); 59static void pscsi_req_done(struct request *, int);
56 60
57/* pscsi_attach_hba(): 61/* pscsi_attach_hba():
@@ -1019,9 +1023,79 @@ fail:
1019 return -ENOMEM; 1023 return -ENOMEM;
1020} 1024}
1021 1025
1022static int pscsi_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl, 1026/*
1023 u32 sgl_nents, enum dma_data_direction data_direction) 1027 * Clear a lun set in the cdb if the initiator talking to use spoke
1028 * and old standards version, as we can't assume the underlying device
1029 * won't choke up on it.
1030 */
1031static inline void pscsi_clear_cdb_lun(unsigned char *cdb)
1032{
1033 switch (cdb[0]) {
1034 case READ_10: /* SBC - RDProtect */
1035 case READ_12: /* SBC - RDProtect */
1036 case READ_16: /* SBC - RDProtect */
1037 case SEND_DIAGNOSTIC: /* SPC - SELF-TEST Code */
1038 case VERIFY: /* SBC - VRProtect */
1039 case VERIFY_16: /* SBC - VRProtect */
1040 case WRITE_VERIFY: /* SBC - VRProtect */
1041 case WRITE_VERIFY_12: /* SBC - VRProtect */
1042 case MAINTENANCE_IN: /* SPC - Parameter Data Format for SA RTPG */
1043 break;
1044 default:
1045 cdb[1] &= 0x1f; /* clear logical unit number */
1046 break;
1047 }
1048}
1049
1050static int pscsi_parse_cdb(struct se_cmd *cmd)
1051{
1052 unsigned char *cdb = cmd->t_task_cdb;
1053 unsigned int dummy_size;
1054 int ret;
1055
1056 if (cmd->se_cmd_flags & SCF_BIDI) {
1057 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1058 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
1059 return -EINVAL;
1060 }
1061
1062 pscsi_clear_cdb_lun(cdb);
1063
1064 /*
1065 * For REPORT LUNS we always need to emulate the response, for everything
1066 * else the default for pSCSI is to pass the command to the underlying
1067 * LLD / physical hardware.
1068 */
1069 switch (cdb[0]) {
1070 case REPORT_LUNS:
1071 ret = spc_parse_cdb(cmd, &dummy_size);
1072 if (ret)
1073 return ret;
1074 break;
1075 case READ_6:
1076 case READ_10:
1077 case READ_12:
1078 case READ_16:
1079 case WRITE_6:
1080 case WRITE_10:
1081 case WRITE_12:
1082 case WRITE_16:
1083 case WRITE_VERIFY:
1084 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
1085 /* FALLTHROUGH*/
1086 default:
1087 cmd->execute_cmd = pscsi_execute_cmd;
1088 break;
1089 }
1090
1091 return 0;
1092}
1093
1094static int pscsi_execute_cmd(struct se_cmd *cmd)
1024{ 1095{
1096 struct scatterlist *sgl = cmd->t_data_sg;
1097 u32 sgl_nents = cmd->t_data_nents;
1098 enum dma_data_direction data_direction = cmd->data_direction;
1025 struct pscsi_dev_virt *pdv = cmd->se_dev->dev_ptr; 1099 struct pscsi_dev_virt *pdv = cmd->se_dev->dev_ptr;
1026 struct pscsi_plugin_task *pt; 1100 struct pscsi_plugin_task *pt;
1027 struct request *req; 1101 struct request *req;
@@ -1042,7 +1116,7 @@ static int pscsi_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl,
1042 memcpy(pt->pscsi_cdb, cmd->t_task_cdb, 1116 memcpy(pt->pscsi_cdb, cmd->t_task_cdb,
1043 scsi_command_size(cmd->t_task_cdb)); 1117 scsi_command_size(cmd->t_task_cdb));
1044 1118
1045 if (cmd->se_cmd_flags & SCF_SCSI_NON_DATA_CDB) { 1119 if (!sgl) {
1046 req = blk_get_request(pdv->pdv_sd->request_queue, 1120 req = blk_get_request(pdv->pdv_sd->request_queue,
1047 (data_direction == DMA_TO_DEVICE), 1121 (data_direction == DMA_TO_DEVICE),
1048 GFP_KERNEL); 1122 GFP_KERNEL);
@@ -1188,7 +1262,7 @@ static struct se_subsystem_api pscsi_template = {
1188 .create_virtdevice = pscsi_create_virtdevice, 1262 .create_virtdevice = pscsi_create_virtdevice,
1189 .free_device = pscsi_free_device, 1263 .free_device = pscsi_free_device,
1190 .transport_complete = pscsi_transport_complete, 1264 .transport_complete = pscsi_transport_complete,
1191 .execute_cmd = pscsi_execute_cmd, 1265 .parse_cdb = pscsi_parse_cdb,
1192 .check_configfs_dev_params = pscsi_check_configfs_dev_params, 1266 .check_configfs_dev_params = pscsi_check_configfs_dev_params,
1193 .set_configfs_dev_params = pscsi_set_configfs_dev_params, 1267 .set_configfs_dev_params = pscsi_set_configfs_dev_params,
1194 .show_configfs_dev_params = pscsi_show_configfs_dev_params, 1268 .show_configfs_dev_params = pscsi_show_configfs_dev_params,
diff --git a/drivers/target/target_core_rd.c b/drivers/target/target_core_rd.c
index d0ceb873c0e5..d00bbe33ff8b 100644
--- a/drivers/target/target_core_rd.c
+++ b/drivers/target/target_core_rd.c
@@ -284,9 +284,11 @@ static struct rd_dev_sg_table *rd_get_sg_table(struct rd_dev *rd_dev, u32 page)
284 return NULL; 284 return NULL;
285} 285}
286 286
287static int rd_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl, 287static int rd_execute_rw(struct se_cmd *cmd)
288 u32 sgl_nents, enum dma_data_direction data_direction)
289{ 288{
289 struct scatterlist *sgl = cmd->t_data_sg;
290 u32 sgl_nents = cmd->t_data_nents;
291 enum dma_data_direction data_direction = cmd->data_direction;
290 struct se_device *se_dev = cmd->se_dev; 292 struct se_device *se_dev = cmd->se_dev;
291 struct rd_dev *dev = se_dev->dev_ptr; 293 struct rd_dev *dev = se_dev->dev_ptr;
292 struct rd_dev_sg_table *table; 294 struct rd_dev_sg_table *table;
@@ -460,6 +462,15 @@ static sector_t rd_get_blocks(struct se_device *dev)
460 return blocks_long; 462 return blocks_long;
461} 463}
462 464
465static struct spc_ops rd_spc_ops = {
466 .execute_rw = rd_execute_rw,
467};
468
469static int rd_parse_cdb(struct se_cmd *cmd)
470{
471 return sbc_parse_cdb(cmd, &rd_spc_ops);
472}
473
463static struct se_subsystem_api rd_mcp_template = { 474static struct se_subsystem_api rd_mcp_template = {
464 .name = "rd_mcp", 475 .name = "rd_mcp",
465 .transport_type = TRANSPORT_PLUGIN_VHBA_VDEV, 476 .transport_type = TRANSPORT_PLUGIN_VHBA_VDEV,
@@ -468,7 +479,7 @@ static struct se_subsystem_api rd_mcp_template = {
468 .allocate_virtdevice = rd_allocate_virtdevice, 479 .allocate_virtdevice = rd_allocate_virtdevice,
469 .create_virtdevice = rd_create_virtdevice, 480 .create_virtdevice = rd_create_virtdevice,
470 .free_device = rd_free_device, 481 .free_device = rd_free_device,
471 .execute_cmd = rd_execute_cmd, 482 .parse_cdb = rd_parse_cdb,
472 .check_configfs_dev_params = rd_check_configfs_dev_params, 483 .check_configfs_dev_params = rd_check_configfs_dev_params,
473 .set_configfs_dev_params = rd_set_configfs_dev_params, 484 .set_configfs_dev_params = rd_set_configfs_dev_params,
474 .show_configfs_dev_params = rd_show_configfs_dev_params, 485 .show_configfs_dev_params = rd_show_configfs_dev_params,
diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
new file mode 100644
index 000000000000..a9dd9469e3bd
--- /dev/null
+++ b/drivers/target/target_core_sbc.c
@@ -0,0 +1,581 @@
1/*
2 * SCSI Block Commands (SBC) parsing and emulation.
3 *
4 * Copyright (c) 2002, 2003, 2004, 2005 PyX Technologies, Inc.
5 * Copyright (c) 2005, 2006, 2007 SBE, Inc.
6 * Copyright (c) 2007-2010 Rising Tide Systems
7 * Copyright (c) 2008-2010 Linux-iSCSI.org
8 *
9 * Nicholas A. Bellinger <nab@kernel.org>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 */
25
26#include <linux/kernel.h>
27#include <linux/module.h>
28#include <linux/ratelimit.h>
29#include <asm/unaligned.h>
30#include <scsi/scsi.h>
31
32#include <target/target_core_base.h>
33#include <target/target_core_backend.h>
34#include <target/target_core_fabric.h>
35
36#include "target_core_internal.h"
37#include "target_core_ua.h"
38
39
40static int sbc_emulate_readcapacity(struct se_cmd *cmd)
41{
42 struct se_device *dev = cmd->se_dev;
43 unsigned char *buf;
44 unsigned long long blocks_long = dev->transport->get_blocks(dev);
45 u32 blocks;
46
47 if (blocks_long >= 0x00000000ffffffff)
48 blocks = 0xffffffff;
49 else
50 blocks = (u32)blocks_long;
51
52 buf = transport_kmap_data_sg(cmd);
53
54 buf[0] = (blocks >> 24) & 0xff;
55 buf[1] = (blocks >> 16) & 0xff;
56 buf[2] = (blocks >> 8) & 0xff;
57 buf[3] = blocks & 0xff;
58 buf[4] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff;
59 buf[5] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff;
60 buf[6] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff;
61 buf[7] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff;
62
63 transport_kunmap_data_sg(cmd);
64
65 target_complete_cmd(cmd, GOOD);
66 return 0;
67}
68
69static int sbc_emulate_readcapacity_16(struct se_cmd *cmd)
70{
71 struct se_device *dev = cmd->se_dev;
72 unsigned char *buf;
73 unsigned long long blocks = dev->transport->get_blocks(dev);
74
75 buf = transport_kmap_data_sg(cmd);
76
77 buf[0] = (blocks >> 56) & 0xff;
78 buf[1] = (blocks >> 48) & 0xff;
79 buf[2] = (blocks >> 40) & 0xff;
80 buf[3] = (blocks >> 32) & 0xff;
81 buf[4] = (blocks >> 24) & 0xff;
82 buf[5] = (blocks >> 16) & 0xff;
83 buf[6] = (blocks >> 8) & 0xff;
84 buf[7] = blocks & 0xff;
85 buf[8] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff;
86 buf[9] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff;
87 buf[10] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff;
88 buf[11] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff;
89 /*
90 * Set Thin Provisioning Enable bit following sbc3r22 in section
91 * READ CAPACITY (16) byte 14 if emulate_tpu or emulate_tpws is enabled.
92 */
93 if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws)
94 buf[14] = 0x80;
95
96 transport_kunmap_data_sg(cmd);
97
98 target_complete_cmd(cmd, GOOD);
99 return 0;
100}
101
102int spc_get_write_same_sectors(struct se_cmd *cmd)
103{
104 u32 num_blocks;
105
106 if (cmd->t_task_cdb[0] == WRITE_SAME)
107 num_blocks = get_unaligned_be16(&cmd->t_task_cdb[7]);
108 else if (cmd->t_task_cdb[0] == WRITE_SAME_16)
109 num_blocks = get_unaligned_be32(&cmd->t_task_cdb[10]);
110 else /* WRITE_SAME_32 via VARIABLE_LENGTH_CMD */
111 num_blocks = get_unaligned_be32(&cmd->t_task_cdb[28]);
112
113 /*
114 * Use the explicit range when non zero is supplied, otherwise calculate
115 * the remaining range based on ->get_blocks() - starting LBA.
116 */
117 if (num_blocks)
118 return num_blocks;
119
120 return cmd->se_dev->transport->get_blocks(cmd->se_dev) -
121 cmd->t_task_lba + 1;
122}
123EXPORT_SYMBOL(spc_get_write_same_sectors);
124
125static int sbc_emulate_verify(struct se_cmd *cmd)
126{
127 target_complete_cmd(cmd, GOOD);
128 return 0;
129}
130
131static inline u32 sbc_get_size(struct se_cmd *cmd, u32 sectors)
132{
133 return cmd->se_dev->se_sub_dev->se_dev_attrib.block_size * sectors;
134}
135
136static int sbc_check_valid_sectors(struct se_cmd *cmd)
137{
138 struct se_device *dev = cmd->se_dev;
139 unsigned long long end_lba;
140 u32 sectors;
141
142 sectors = cmd->data_length / dev->se_sub_dev->se_dev_attrib.block_size;
143 end_lba = dev->transport->get_blocks(dev) + 1;
144
145 if (cmd->t_task_lba + sectors > end_lba) {
146 pr_err("target: lba %llu, sectors %u exceeds end lba %llu\n",
147 cmd->t_task_lba, sectors, end_lba);
148 return -EINVAL;
149 }
150
151 return 0;
152}
153
154static inline u32 transport_get_sectors_6(unsigned char *cdb)
155{
156 /*
157 * Use 8-bit sector value. SBC-3 says:
158 *
159 * A TRANSFER LENGTH field set to zero specifies that 256
160 * logical blocks shall be written. Any other value
161 * specifies the number of logical blocks that shall be
162 * written.
163 */
164 return cdb[4] ? : 256;
165}
166
167static inline u32 transport_get_sectors_10(unsigned char *cdb)
168{
169 return (u32)(cdb[7] << 8) + cdb[8];
170}
171
172static inline u32 transport_get_sectors_12(unsigned char *cdb)
173{
174 return (u32)(cdb[6] << 24) + (cdb[7] << 16) + (cdb[8] << 8) + cdb[9];
175}
176
177static inline u32 transport_get_sectors_16(unsigned char *cdb)
178{
179 return (u32)(cdb[10] << 24) + (cdb[11] << 16) +
180 (cdb[12] << 8) + cdb[13];
181}
182
183/*
184 * Used for VARIABLE_LENGTH_CDB WRITE_32 and READ_32 variants
185 */
186static inline u32 transport_get_sectors_32(unsigned char *cdb)
187{
188 return (u32)(cdb[28] << 24) + (cdb[29] << 16) +
189 (cdb[30] << 8) + cdb[31];
190
191}
192
193static inline u32 transport_lba_21(unsigned char *cdb)
194{
195 return ((cdb[1] & 0x1f) << 16) | (cdb[2] << 8) | cdb[3];
196}
197
198static inline u32 transport_lba_32(unsigned char *cdb)
199{
200 return (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
201}
202
203static inline unsigned long long transport_lba_64(unsigned char *cdb)
204{
205 unsigned int __v1, __v2;
206
207 __v1 = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
208 __v2 = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
209
210 return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
211}
212
213/*
214 * For VARIABLE_LENGTH_CDB w/ 32 byte extended CDBs
215 */
216static inline unsigned long long transport_lba_64_ext(unsigned char *cdb)
217{
218 unsigned int __v1, __v2;
219
220 __v1 = (cdb[12] << 24) | (cdb[13] << 16) | (cdb[14] << 8) | cdb[15];
221 __v2 = (cdb[16] << 24) | (cdb[17] << 16) | (cdb[18] << 8) | cdb[19];
222
223 return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
224}
225
226static int sbc_write_same_supported(struct se_device *dev,
227 unsigned char *flags)
228{
229 if ((flags[0] & 0x04) || (flags[0] & 0x02)) {
230 pr_err("WRITE_SAME PBDATA and LBDATA"
231 " bits not supported for Block Discard"
232 " Emulation\n");
233 return -ENOSYS;
234 }
235
236 /*
237 * Currently for the emulated case we only accept
238 * tpws with the UNMAP=1 bit set.
239 */
240 if (!(flags[0] & 0x08)) {
241 pr_err("WRITE_SAME w/o UNMAP bit not"
242 " supported for Block Discard Emulation\n");
243 return -ENOSYS;
244 }
245
246 return 0;
247}
248
249static void xdreadwrite_callback(struct se_cmd *cmd)
250{
251 unsigned char *buf, *addr;
252 struct scatterlist *sg;
253 unsigned int offset;
254 int i;
255 int count;
256 /*
257 * From sbc3r22.pdf section 5.48 XDWRITEREAD (10) command
258 *
259 * 1) read the specified logical block(s);
260 * 2) transfer logical blocks from the data-out buffer;
261 * 3) XOR the logical blocks transferred from the data-out buffer with
262 * the logical blocks read, storing the resulting XOR data in a buffer;
263 * 4) if the DISABLE WRITE bit is set to zero, then write the logical
264 * blocks transferred from the data-out buffer; and
265 * 5) transfer the resulting XOR data to the data-in buffer.
266 */
267 buf = kmalloc(cmd->data_length, GFP_KERNEL);
268 if (!buf) {
269 pr_err("Unable to allocate xor_callback buf\n");
270 return;
271 }
272 /*
273 * Copy the scatterlist WRITE buffer located at cmd->t_data_sg
274 * into the locally allocated *buf
275 */
276 sg_copy_to_buffer(cmd->t_data_sg,
277 cmd->t_data_nents,
278 buf,
279 cmd->data_length);
280
281 /*
282 * Now perform the XOR against the BIDI read memory located at
283 * cmd->t_mem_bidi_list
284 */
285
286 offset = 0;
287 for_each_sg(cmd->t_bidi_data_sg, sg, cmd->t_bidi_data_nents, count) {
288 addr = kmap_atomic(sg_page(sg));
289 if (!addr)
290 goto out;
291
292 for (i = 0; i < sg->length; i++)
293 *(addr + sg->offset + i) ^= *(buf + offset + i);
294
295 offset += sg->length;
296 kunmap_atomic(addr);
297 }
298
299out:
300 kfree(buf);
301}
302
303int sbc_parse_cdb(struct se_cmd *cmd, struct spc_ops *ops)
304{
305 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
306 struct se_device *dev = cmd->se_dev;
307 unsigned char *cdb = cmd->t_task_cdb;
308 unsigned int size;
309 u32 sectors = 0;
310 int ret;
311
312 switch (cdb[0]) {
313 case READ_6:
314 sectors = transport_get_sectors_6(cdb);
315 cmd->t_task_lba = transport_lba_21(cdb);
316 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
317 cmd->execute_cmd = ops->execute_rw;
318 break;
319 case READ_10:
320 sectors = transport_get_sectors_10(cdb);
321 cmd->t_task_lba = transport_lba_32(cdb);
322 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
323 cmd->execute_cmd = ops->execute_rw;
324 break;
325 case READ_12:
326 sectors = transport_get_sectors_12(cdb);
327 cmd->t_task_lba = transport_lba_32(cdb);
328 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
329 cmd->execute_cmd = ops->execute_rw;
330 break;
331 case READ_16:
332 sectors = transport_get_sectors_16(cdb);
333 cmd->t_task_lba = transport_lba_64(cdb);
334 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
335 cmd->execute_cmd = ops->execute_rw;
336 break;
337 case WRITE_6:
338 sectors = transport_get_sectors_6(cdb);
339 cmd->t_task_lba = transport_lba_21(cdb);
340 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
341 cmd->execute_cmd = ops->execute_rw;
342 break;
343 case WRITE_10:
344 case WRITE_VERIFY:
345 sectors = transport_get_sectors_10(cdb);
346 cmd->t_task_lba = transport_lba_32(cdb);
347 if (cdb[1] & 0x8)
348 cmd->se_cmd_flags |= SCF_FUA;
349 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
350 cmd->execute_cmd = ops->execute_rw;
351 break;
352 case WRITE_12:
353 sectors = transport_get_sectors_12(cdb);
354 cmd->t_task_lba = transport_lba_32(cdb);
355 if (cdb[1] & 0x8)
356 cmd->se_cmd_flags |= SCF_FUA;
357 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
358 cmd->execute_cmd = ops->execute_rw;
359 break;
360 case WRITE_16:
361 sectors = transport_get_sectors_16(cdb);
362 cmd->t_task_lba = transport_lba_64(cdb);
363 if (cdb[1] & 0x8)
364 cmd->se_cmd_flags |= SCF_FUA;
365 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
366 cmd->execute_cmd = ops->execute_rw;
367 break;
368 case XDWRITEREAD_10:
369 if ((cmd->data_direction != DMA_TO_DEVICE) ||
370 !(cmd->se_cmd_flags & SCF_BIDI))
371 goto out_invalid_cdb_field;
372 sectors = transport_get_sectors_10(cdb);
373
374 cmd->t_task_lba = transport_lba_32(cdb);
375 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
376
377 /*
378 * Setup BIDI XOR callback to be run after I/O completion.
379 */
380 cmd->execute_cmd = ops->execute_rw;
381 cmd->transport_complete_callback = &xdreadwrite_callback;
382 if (cdb[1] & 0x8)
383 cmd->se_cmd_flags |= SCF_FUA;
384 break;
385 case VARIABLE_LENGTH_CMD:
386 {
387 u16 service_action = get_unaligned_be16(&cdb[8]);
388 switch (service_action) {
389 case XDWRITEREAD_32:
390 sectors = transport_get_sectors_32(cdb);
391
392 /*
393 * Use WRITE_32 and READ_32 opcodes for the emulated
394 * XDWRITE_READ_32 logic.
395 */
396 cmd->t_task_lba = transport_lba_64_ext(cdb);
397 cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB;
398
399 /*
400 * Setup BIDI XOR callback to be run during after I/O
401 * completion.
402 */
403 cmd->execute_cmd = ops->execute_rw;
404 cmd->transport_complete_callback = &xdreadwrite_callback;
405 if (cdb[1] & 0x8)
406 cmd->se_cmd_flags |= SCF_FUA;
407 break;
408 case WRITE_SAME_32:
409 if (!ops->execute_write_same)
410 goto out_unsupported_cdb;
411
412 sectors = transport_get_sectors_32(cdb);
413 if (!sectors) {
414 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not"
415 " supported\n");
416 goto out_invalid_cdb_field;
417 }
418
419 size = sbc_get_size(cmd, 1);
420 cmd->t_task_lba = get_unaligned_be64(&cdb[12]);
421
422 if (sbc_write_same_supported(dev, &cdb[10]) < 0)
423 goto out_unsupported_cdb;
424 cmd->execute_cmd = ops->execute_write_same;
425 break;
426 default:
427 pr_err("VARIABLE_LENGTH_CMD service action"
428 " 0x%04x not supported\n", service_action);
429 goto out_unsupported_cdb;
430 }
431 break;
432 }
433 case READ_CAPACITY:
434 size = READ_CAP_LEN;
435 cmd->execute_cmd = sbc_emulate_readcapacity;
436 break;
437 case SERVICE_ACTION_IN:
438 switch (cmd->t_task_cdb[1] & 0x1f) {
439 case SAI_READ_CAPACITY_16:
440 cmd->execute_cmd = sbc_emulate_readcapacity_16;
441 break;
442 default:
443 pr_err("Unsupported SA: 0x%02x\n",
444 cmd->t_task_cdb[1] & 0x1f);
445 goto out_invalid_cdb_field;
446 }
447 size = (cdb[10] << 24) | (cdb[11] << 16) |
448 (cdb[12] << 8) | cdb[13];
449 break;
450 case SYNCHRONIZE_CACHE:
451 case SYNCHRONIZE_CACHE_16:
452 if (!ops->execute_sync_cache)
453 goto out_unsupported_cdb;
454
455 /*
456 * Extract LBA and range to be flushed for emulated SYNCHRONIZE_CACHE
457 */
458 if (cdb[0] == SYNCHRONIZE_CACHE) {
459 sectors = transport_get_sectors_10(cdb);
460 cmd->t_task_lba = transport_lba_32(cdb);
461 } else {
462 sectors = transport_get_sectors_16(cdb);
463 cmd->t_task_lba = transport_lba_64(cdb);
464 }
465
466 size = sbc_get_size(cmd, sectors);
467
468 /*
469 * Check to ensure that LBA + Range does not exceed past end of
470 * device for IBLOCK and FILEIO ->do_sync_cache() backend calls
471 */
472 if (cmd->t_task_lba || sectors) {
473 if (sbc_check_valid_sectors(cmd) < 0)
474 goto out_invalid_cdb_field;
475 }
476 cmd->execute_cmd = ops->execute_sync_cache;
477 break;
478 case UNMAP:
479 if (!ops->execute_unmap)
480 goto out_unsupported_cdb;
481
482 size = get_unaligned_be16(&cdb[7]);
483 cmd->execute_cmd = ops->execute_unmap;
484 break;
485 case WRITE_SAME_16:
486 if (!ops->execute_write_same)
487 goto out_unsupported_cdb;
488
489 sectors = transport_get_sectors_16(cdb);
490 if (!sectors) {
491 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n");
492 goto out_invalid_cdb_field;
493 }
494
495 size = sbc_get_size(cmd, 1);
496 cmd->t_task_lba = get_unaligned_be64(&cdb[2]);
497
498 if (sbc_write_same_supported(dev, &cdb[1]) < 0)
499 goto out_unsupported_cdb;
500 cmd->execute_cmd = ops->execute_write_same;
501 break;
502 case WRITE_SAME:
503 if (!ops->execute_write_same)
504 goto out_unsupported_cdb;
505
506 sectors = transport_get_sectors_10(cdb);
507 if (!sectors) {
508 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n");
509 goto out_invalid_cdb_field;
510 }
511
512 size = sbc_get_size(cmd, 1);
513 cmd->t_task_lba = get_unaligned_be32(&cdb[2]);
514
515 /*
516 * Follow sbcr26 with WRITE_SAME (10) and check for the existence
517 * of byte 1 bit 3 UNMAP instead of original reserved field
518 */
519 if (sbc_write_same_supported(dev, &cdb[1]) < 0)
520 goto out_unsupported_cdb;
521 cmd->execute_cmd = ops->execute_write_same;
522 break;
523 case VERIFY:
524 size = 0;
525 cmd->execute_cmd = sbc_emulate_verify;
526 break;
527 default:
528 ret = spc_parse_cdb(cmd, &size);
529 if (ret)
530 return ret;
531 }
532
533 /* reject any command that we don't have a handler for */
534 if (!(cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) && !cmd->execute_cmd)
535 goto out_unsupported_cdb;
536
537 if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
538 unsigned long long end_lba;
539
540 if (sectors > su_dev->se_dev_attrib.fabric_max_sectors) {
541 printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
542 " big sectors %u exceeds fabric_max_sectors:"
543 " %u\n", cdb[0], sectors,
544 su_dev->se_dev_attrib.fabric_max_sectors);
545 goto out_invalid_cdb_field;
546 }
547 if (sectors > su_dev->se_dev_attrib.hw_max_sectors) {
548 printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
549 " big sectors %u exceeds backend hw_max_sectors:"
550 " %u\n", cdb[0], sectors,
551 su_dev->se_dev_attrib.hw_max_sectors);
552 goto out_invalid_cdb_field;
553 }
554
555 end_lba = dev->transport->get_blocks(dev) + 1;
556 if (cmd->t_task_lba + sectors > end_lba) {
557 pr_err("cmd exceeds last lba %llu "
558 "(lba %llu, sectors %u)\n",
559 end_lba, cmd->t_task_lba, sectors);
560 goto out_invalid_cdb_field;
561 }
562
563 size = sbc_get_size(cmd, sectors);
564 }
565
566 ret = target_cmd_size_check(cmd, size);
567 if (ret < 0)
568 return ret;
569
570 return 0;
571
572out_unsupported_cdb:
573 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
574 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
575 return -EINVAL;
576out_invalid_cdb_field:
577 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
578 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
579 return -EINVAL;
580}
581EXPORT_SYMBOL(sbc_parse_cdb);
diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_spc.c
index 9888693a18fe..4c861de538c9 100644
--- a/drivers/target/target_core_cdb.c
+++ b/drivers/target/target_core_spc.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * CDB emulation for non-READ/WRITE commands. 2 * SCSI Primary Commands (SPC) parsing and emulation.
3 * 3 *
4 * Copyright (c) 2002, 2003, 2004, 2005 PyX Technologies, Inc. 4 * Copyright (c) 2002, 2003, 2004, 2005 PyX Technologies, Inc.
5 * Copyright (c) 2005, 2006, 2007 SBE, Inc. 5 * Copyright (c) 2005, 2006, 2007 SBE, Inc.
@@ -26,17 +26,21 @@
26#include <linux/kernel.h> 26#include <linux/kernel.h>
27#include <linux/module.h> 27#include <linux/module.h>
28#include <asm/unaligned.h> 28#include <asm/unaligned.h>
29
29#include <scsi/scsi.h> 30#include <scsi/scsi.h>
31#include <scsi/scsi_tcq.h>
30 32
31#include <target/target_core_base.h> 33#include <target/target_core_base.h>
32#include <target/target_core_backend.h> 34#include <target/target_core_backend.h>
33#include <target/target_core_fabric.h> 35#include <target/target_core_fabric.h>
34 36
35#include "target_core_internal.h" 37#include "target_core_internal.h"
38#include "target_core_alua.h"
39#include "target_core_pr.h"
36#include "target_core_ua.h" 40#include "target_core_ua.h"
37 41
38static void 42
39target_fill_alua_data(struct se_port *port, unsigned char *buf) 43static void spc_fill_alua_data(struct se_port *port, unsigned char *buf)
40{ 44{
41 struct t10_alua_tg_pt_gp *tg_pt_gp; 45 struct t10_alua_tg_pt_gp *tg_pt_gp;
42 struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; 46 struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem;
@@ -65,8 +69,7 @@ target_fill_alua_data(struct se_port *port, unsigned char *buf)
65 spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 69 spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
66} 70}
67 71
68static int 72static int spc_emulate_inquiry_std(struct se_cmd *cmd, char *buf)
69target_emulate_inquiry_std(struct se_cmd *cmd, char *buf)
70{ 73{
71 struct se_lun *lun = cmd->se_lun; 74 struct se_lun *lun = cmd->se_lun;
72 struct se_device *dev = cmd->se_dev; 75 struct se_device *dev = cmd->se_dev;
@@ -93,7 +96,7 @@ target_emulate_inquiry_std(struct se_cmd *cmd, char *buf)
93 * Enable SCCS and TPGS fields for Emulated ALUA 96 * Enable SCCS and TPGS fields for Emulated ALUA
94 */ 97 */
95 if (dev->se_sub_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) 98 if (dev->se_sub_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED)
96 target_fill_alua_data(lun->lun_sep, buf); 99 spc_fill_alua_data(lun->lun_sep, buf);
97 100
98 buf[7] = 0x2; /* CmdQue=1 */ 101 buf[7] = 0x2; /* CmdQue=1 */
99 102
@@ -106,8 +109,7 @@ target_emulate_inquiry_std(struct se_cmd *cmd, char *buf)
106} 109}
107 110
108/* unit serial number */ 111/* unit serial number */
109static int 112static int spc_emulate_evpd_80(struct se_cmd *cmd, unsigned char *buf)
110target_emulate_evpd_80(struct se_cmd *cmd, unsigned char *buf)
111{ 113{
112 struct se_device *dev = cmd->se_dev; 114 struct se_device *dev = cmd->se_dev;
113 u16 len = 0; 115 u16 len = 0;
@@ -127,8 +129,8 @@ target_emulate_evpd_80(struct se_cmd *cmd, unsigned char *buf)
127 return 0; 129 return 0;
128} 130}
129 131
130static void 132static void spc_parse_naa_6h_vendor_specific(struct se_device *dev,
131target_parse_naa_6h_vendor_specific(struct se_device *dev, unsigned char *buf) 133 unsigned char *buf)
132{ 134{
133 unsigned char *p = &dev->se_sub_dev->t10_wwn.unit_serial[0]; 135 unsigned char *p = &dev->se_sub_dev->t10_wwn.unit_serial[0];
134 int cnt; 136 int cnt;
@@ -162,8 +164,7 @@ target_parse_naa_6h_vendor_specific(struct se_device *dev, unsigned char *buf)
162 * Device identification VPD, for a complete list of 164 * Device identification VPD, for a complete list of
163 * DESIGNATOR TYPEs see spc4r17 Table 459. 165 * DESIGNATOR TYPEs see spc4r17 Table 459.
164 */ 166 */
165static int 167static int spc_emulate_evpd_83(struct se_cmd *cmd, unsigned char *buf)
166target_emulate_evpd_83(struct se_cmd *cmd, unsigned char *buf)
167{ 168{
168 struct se_device *dev = cmd->se_dev; 169 struct se_device *dev = cmd->se_dev;
169 struct se_lun *lun = cmd->se_lun; 170 struct se_lun *lun = cmd->se_lun;
@@ -220,7 +221,7 @@ target_emulate_evpd_83(struct se_cmd *cmd, unsigned char *buf)
220 * VENDOR_SPECIFIC_IDENTIFIER and 221 * VENDOR_SPECIFIC_IDENTIFIER and
221 * VENDOR_SPECIFIC_IDENTIFIER_EXTENTION 222 * VENDOR_SPECIFIC_IDENTIFIER_EXTENTION
222 */ 223 */
223 target_parse_naa_6h_vendor_specific(dev, &buf[off]); 224 spc_parse_naa_6h_vendor_specific(dev, &buf[off]);
224 225
225 len = 20; 226 len = 20;
226 off = (len + 4); 227 off = (len + 4);
@@ -414,8 +415,7 @@ check_scsi_name:
414} 415}
415 416
416/* Extended INQUIRY Data VPD Page */ 417/* Extended INQUIRY Data VPD Page */
417static int 418static int spc_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf)
418target_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf)
419{ 419{
420 buf[3] = 0x3c; 420 buf[3] = 0x3c;
421 /* Set HEADSUP, ORDSUP, SIMPSUP */ 421 /* Set HEADSUP, ORDSUP, SIMPSUP */
@@ -428,15 +428,14 @@ target_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf)
428} 428}
429 429
430/* Block Limits VPD page */ 430/* Block Limits VPD page */
431static int 431static int spc_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
432target_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
433{ 432{
434 struct se_device *dev = cmd->se_dev; 433 struct se_device *dev = cmd->se_dev;
435 u32 max_sectors; 434 u32 max_sectors;
436 int have_tp = 0; 435 int have_tp = 0;
437 436
438 /* 437 /*
439 * Following sbc3r22 section 6.5.3 Block Limits VPD page, when 438 * Following spc3r22 section 6.5.3 Block Limits VPD page, when
440 * emulate_tpu=1 or emulate_tpws=1 we will be expect a 439 * emulate_tpu=1 or emulate_tpws=1 we will be expect a
441 * different page length for Thin Provisioning. 440 * different page length for Thin Provisioning.
442 */ 441 */
@@ -500,8 +499,7 @@ target_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf)
500} 499}
501 500
502/* Block Device Characteristics VPD page */ 501/* Block Device Characteristics VPD page */
503static int 502static int spc_emulate_evpd_b1(struct se_cmd *cmd, unsigned char *buf)
504target_emulate_evpd_b1(struct se_cmd *cmd, unsigned char *buf)
505{ 503{
506 struct se_device *dev = cmd->se_dev; 504 struct se_device *dev = cmd->se_dev;
507 505
@@ -513,13 +511,12 @@ target_emulate_evpd_b1(struct se_cmd *cmd, unsigned char *buf)
513} 511}
514 512
515/* Thin Provisioning VPD */ 513/* Thin Provisioning VPD */
516static int 514static int spc_emulate_evpd_b2(struct se_cmd *cmd, unsigned char *buf)
517target_emulate_evpd_b2(struct se_cmd *cmd, unsigned char *buf)
518{ 515{
519 struct se_device *dev = cmd->se_dev; 516 struct se_device *dev = cmd->se_dev;
520 517
521 /* 518 /*
522 * From sbc3r22 section 6.5.4 Thin Provisioning VPD page: 519 * From spc3r22 section 6.5.4 Thin Provisioning VPD page:
523 * 520 *
524 * The PAGE LENGTH field is defined in SPC-4. If the DP bit is set to 521 * The PAGE LENGTH field is defined in SPC-4. If the DP bit is set to
525 * zero, then the page length shall be set to 0004h. If the DP bit 522 * zero, then the page length shall be set to 0004h. If the DP bit
@@ -564,25 +561,23 @@ target_emulate_evpd_b2(struct se_cmd *cmd, unsigned char *buf)
564 return 0; 561 return 0;
565} 562}
566 563
567static int 564static int spc_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf);
568target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf);
569 565
570static struct { 566static struct {
571 uint8_t page; 567 uint8_t page;
572 int (*emulate)(struct se_cmd *, unsigned char *); 568 int (*emulate)(struct se_cmd *, unsigned char *);
573} evpd_handlers[] = { 569} evpd_handlers[] = {
574 { .page = 0x00, .emulate = target_emulate_evpd_00 }, 570 { .page = 0x00, .emulate = spc_emulate_evpd_00 },
575 { .page = 0x80, .emulate = target_emulate_evpd_80 }, 571 { .page = 0x80, .emulate = spc_emulate_evpd_80 },
576 { .page = 0x83, .emulate = target_emulate_evpd_83 }, 572 { .page = 0x83, .emulate = spc_emulate_evpd_83 },
577 { .page = 0x86, .emulate = target_emulate_evpd_86 }, 573 { .page = 0x86, .emulate = spc_emulate_evpd_86 },
578 { .page = 0xb0, .emulate = target_emulate_evpd_b0 }, 574 { .page = 0xb0, .emulate = spc_emulate_evpd_b0 },
579 { .page = 0xb1, .emulate = target_emulate_evpd_b1 }, 575 { .page = 0xb1, .emulate = spc_emulate_evpd_b1 },
580 { .page = 0xb2, .emulate = target_emulate_evpd_b2 }, 576 { .page = 0xb2, .emulate = spc_emulate_evpd_b2 },
581}; 577};
582 578
583/* supported vital product data pages */ 579/* supported vital product data pages */
584static int 580static int spc_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf)
585target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf)
586{ 581{
587 int p; 582 int p;
588 583
@@ -601,7 +596,7 @@ target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf)
601 return 0; 596 return 0;
602} 597}
603 598
604int target_emulate_inquiry(struct se_cmd *cmd) 599static int spc_emulate_inquiry(struct se_cmd *cmd)
605{ 600{
606 struct se_device *dev = cmd->se_dev; 601 struct se_device *dev = cmd->se_dev;
607 struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg; 602 struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg;
@@ -643,7 +638,7 @@ int target_emulate_inquiry(struct se_cmd *cmd)
643 goto out; 638 goto out;
644 } 639 }
645 640
646 ret = target_emulate_inquiry_std(cmd, buf); 641 ret = spc_emulate_inquiry_std(cmd, buf);
647 goto out; 642 goto out;
648 } 643 }
649 644
@@ -671,70 +666,7 @@ out:
671 return ret; 666 return ret;
672} 667}
673 668
674int target_emulate_readcapacity(struct se_cmd *cmd) 669static int spc_modesense_rwrecovery(unsigned char *p)
675{
676 struct se_device *dev = cmd->se_dev;
677 unsigned char *buf;
678 unsigned long long blocks_long = dev->transport->get_blocks(dev);
679 u32 blocks;
680
681 if (blocks_long >= 0x00000000ffffffff)
682 blocks = 0xffffffff;
683 else
684 blocks = (u32)blocks_long;
685
686 buf = transport_kmap_data_sg(cmd);
687
688 buf[0] = (blocks >> 24) & 0xff;
689 buf[1] = (blocks >> 16) & 0xff;
690 buf[2] = (blocks >> 8) & 0xff;
691 buf[3] = blocks & 0xff;
692 buf[4] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff;
693 buf[5] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff;
694 buf[6] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff;
695 buf[7] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff;
696
697 transport_kunmap_data_sg(cmd);
698
699 target_complete_cmd(cmd, GOOD);
700 return 0;
701}
702
703int target_emulate_readcapacity_16(struct se_cmd *cmd)
704{
705 struct se_device *dev = cmd->se_dev;
706 unsigned char *buf;
707 unsigned long long blocks = dev->transport->get_blocks(dev);
708
709 buf = transport_kmap_data_sg(cmd);
710
711 buf[0] = (blocks >> 56) & 0xff;
712 buf[1] = (blocks >> 48) & 0xff;
713 buf[2] = (blocks >> 40) & 0xff;
714 buf[3] = (blocks >> 32) & 0xff;
715 buf[4] = (blocks >> 24) & 0xff;
716 buf[5] = (blocks >> 16) & 0xff;
717 buf[6] = (blocks >> 8) & 0xff;
718 buf[7] = blocks & 0xff;
719 buf[8] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff;
720 buf[9] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff;
721 buf[10] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff;
722 buf[11] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff;
723 /*
724 * Set Thin Provisioning Enable bit following sbc3r22 in section
725 * READ CAPACITY (16) byte 14 if emulate_tpu or emulate_tpws is enabled.
726 */
727 if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws)
728 buf[14] = 0x80;
729
730 transport_kunmap_data_sg(cmd);
731
732 target_complete_cmd(cmd, GOOD);
733 return 0;
734}
735
736static int
737target_modesense_rwrecovery(unsigned char *p)
738{ 670{
739 p[0] = 0x01; 671 p[0] = 0x01;
740 p[1] = 0x0a; 672 p[1] = 0x0a;
@@ -742,8 +674,7 @@ target_modesense_rwrecovery(unsigned char *p)
742 return 12; 674 return 12;
743} 675}
744 676
745static int 677static int spc_modesense_control(struct se_device *dev, unsigned char *p)
746target_modesense_control(struct se_device *dev, unsigned char *p)
747{ 678{
748 p[0] = 0x0a; 679 p[0] = 0x0a;
749 p[1] = 0x0a; 680 p[1] = 0x0a;
@@ -828,8 +759,7 @@ target_modesense_control(struct se_device *dev, unsigned char *p)
828 return 12; 759 return 12;
829} 760}
830 761
831static int 762static int spc_modesense_caching(struct se_device *dev, unsigned char *p)
832target_modesense_caching(struct se_device *dev, unsigned char *p)
833{ 763{
834 p[0] = 0x08; 764 p[0] = 0x08;
835 p[1] = 0x12; 765 p[1] = 0x12;
@@ -840,8 +770,7 @@ target_modesense_caching(struct se_device *dev, unsigned char *p)
840 return 20; 770 return 20;
841} 771}
842 772
843static void 773static void spc_modesense_write_protect(unsigned char *buf, int type)
844target_modesense_write_protect(unsigned char *buf, int type)
845{ 774{
846 /* 775 /*
847 * I believe that the WP bit (bit 7) in the mode header is the same for 776 * I believe that the WP bit (bit 7) in the mode header is the same for
@@ -856,8 +785,7 @@ target_modesense_write_protect(unsigned char *buf, int type)
856 } 785 }
857} 786}
858 787
859static void 788static void spc_modesense_dpofua(unsigned char *buf, int type)
860target_modesense_dpofua(unsigned char *buf, int type)
861{ 789{
862 switch (type) { 790 switch (type) {
863 case TYPE_DISK: 791 case TYPE_DISK:
@@ -868,7 +796,7 @@ target_modesense_dpofua(unsigned char *buf, int type)
868 } 796 }
869} 797}
870 798
871int target_emulate_modesense(struct se_cmd *cmd) 799static int spc_emulate_modesense(struct se_cmd *cmd)
872{ 800{
873 struct se_device *dev = cmd->se_dev; 801 struct se_device *dev = cmd->se_dev;
874 char *cdb = cmd->t_task_cdb; 802 char *cdb = cmd->t_task_cdb;
@@ -883,18 +811,18 @@ int target_emulate_modesense(struct se_cmd *cmd)
883 811
884 switch (cdb[2] & 0x3f) { 812 switch (cdb[2] & 0x3f) {
885 case 0x01: 813 case 0x01:
886 length = target_modesense_rwrecovery(&buf[offset]); 814 length = spc_modesense_rwrecovery(&buf[offset]);
887 break; 815 break;
888 case 0x08: 816 case 0x08:
889 length = target_modesense_caching(dev, &buf[offset]); 817 length = spc_modesense_caching(dev, &buf[offset]);
890 break; 818 break;
891 case 0x0a: 819 case 0x0a:
892 length = target_modesense_control(dev, &buf[offset]); 820 length = spc_modesense_control(dev, &buf[offset]);
893 break; 821 break;
894 case 0x3f: 822 case 0x3f:
895 length = target_modesense_rwrecovery(&buf[offset]); 823 length = spc_modesense_rwrecovery(&buf[offset]);
896 length += target_modesense_caching(dev, &buf[offset+length]); 824 length += spc_modesense_caching(dev, &buf[offset+length]);
897 length += target_modesense_control(dev, &buf[offset+length]); 825 length += spc_modesense_control(dev, &buf[offset+length]);
898 break; 826 break;
899 default: 827 default:
900 pr_err("MODE SENSE: unimplemented page/subpage: 0x%02x/0x%02x\n", 828 pr_err("MODE SENSE: unimplemented page/subpage: 0x%02x/0x%02x\n",
@@ -912,11 +840,11 @@ int target_emulate_modesense(struct se_cmd *cmd)
912 if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 840 if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) ||
913 (cmd->se_deve && 841 (cmd->se_deve &&
914 (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 842 (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY)))
915 target_modesense_write_protect(&buf[3], type); 843 spc_modesense_write_protect(&buf[3], type);
916 844
917 if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 845 if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) &&
918 (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 846 (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0))
919 target_modesense_dpofua(&buf[3], type); 847 spc_modesense_dpofua(&buf[3], type);
920 848
921 if ((offset + 2) > cmd->data_length) 849 if ((offset + 2) > cmd->data_length)
922 offset = cmd->data_length; 850 offset = cmd->data_length;
@@ -928,11 +856,11 @@ int target_emulate_modesense(struct se_cmd *cmd)
928 if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 856 if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) ||
929 (cmd->se_deve && 857 (cmd->se_deve &&
930 (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 858 (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY)))
931 target_modesense_write_protect(&buf[2], type); 859 spc_modesense_write_protect(&buf[2], type);
932 860
933 if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 861 if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) &&
934 (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 862 (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0))
935 target_modesense_dpofua(&buf[2], type); 863 spc_modesense_dpofua(&buf[2], type);
936 864
937 if ((offset + 1) > cmd->data_length) 865 if ((offset + 1) > cmd->data_length)
938 offset = cmd->data_length; 866 offset = cmd->data_length;
@@ -946,7 +874,7 @@ int target_emulate_modesense(struct se_cmd *cmd)
946 return 0; 874 return 0;
947} 875}
948 876
949int target_emulate_request_sense(struct se_cmd *cmd) 877static int spc_emulate_request_sense(struct se_cmd *cmd)
950{ 878{
951 unsigned char *cdb = cmd->t_task_cdb; 879 unsigned char *cdb = cmd->t_task_cdb;
952 unsigned char *buf; 880 unsigned char *buf;
@@ -1005,126 +933,172 @@ end:
1005 return 0; 933 return 0;
1006} 934}
1007 935
1008/* 936static int spc_emulate_testunitready(struct se_cmd *cmd)
1009 * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
1010 * Note this is not used for TCM/pSCSI passthrough
1011 */
1012int target_emulate_unmap(struct se_cmd *cmd)
1013{ 937{
1014 struct se_device *dev = cmd->se_dev; 938 target_complete_cmd(cmd, GOOD);
1015 unsigned char *buf, *ptr = NULL; 939 return 0;
1016 unsigned char *cdb = &cmd->t_task_cdb[0];
1017 sector_t lba;
1018 unsigned int size = cmd->data_length, range;
1019 int ret = 0, offset;
1020 unsigned short dl, bd_dl;
1021
1022 if (!dev->transport->do_discard) {
1023 pr_err("UNMAP emulation not supported for: %s\n",
1024 dev->transport->name);
1025 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
1026 return -ENOSYS;
1027 }
1028
1029 /* First UNMAP block descriptor starts at 8 byte offset */
1030 offset = 8;
1031 size -= 8;
1032 dl = get_unaligned_be16(&cdb[0]);
1033 bd_dl = get_unaligned_be16(&cdb[2]);
1034
1035 buf = transport_kmap_data_sg(cmd);
1036
1037 ptr = &buf[offset];
1038 pr_debug("UNMAP: Sub: %s Using dl: %hu bd_dl: %hu size: %hu"
1039 " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr);
1040
1041 while (size) {
1042 lba = get_unaligned_be64(&ptr[0]);
1043 range = get_unaligned_be32(&ptr[8]);
1044 pr_debug("UNMAP: Using lba: %llu and range: %u\n",
1045 (unsigned long long)lba, range);
1046
1047 ret = dev->transport->do_discard(dev, lba, range);
1048 if (ret < 0) {
1049 pr_err("blkdev_issue_discard() failed: %d\n",
1050 ret);
1051 goto err;
1052 }
1053
1054 ptr += 16;
1055 size -= 16;
1056 }
1057
1058err:
1059 transport_kunmap_data_sg(cmd);
1060 if (!ret)
1061 target_complete_cmd(cmd, GOOD);
1062 return ret;
1063} 940}
1064 941
1065/* 942int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1066 * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support.
1067 * Note this is not used for TCM/pSCSI passthrough
1068 */
1069int target_emulate_write_same(struct se_cmd *cmd)
1070{ 943{
1071 struct se_device *dev = cmd->se_dev; 944 struct se_device *dev = cmd->se_dev;
1072 sector_t range; 945 struct se_subsystem_dev *su_dev = dev->se_sub_dev;
1073 sector_t lba = cmd->t_task_lba; 946 unsigned char *cdb = cmd->t_task_cdb;
1074 u32 num_blocks;
1075 int ret;
1076
1077 if (!dev->transport->do_discard) {
1078 pr_err("WRITE_SAME emulation not supported"
1079 " for: %s\n", dev->transport->name);
1080 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
1081 return -ENOSYS;
1082 }
1083
1084 if (cmd->t_task_cdb[0] == WRITE_SAME)
1085 num_blocks = get_unaligned_be16(&cmd->t_task_cdb[7]);
1086 else if (cmd->t_task_cdb[0] == WRITE_SAME_16)
1087 num_blocks = get_unaligned_be32(&cmd->t_task_cdb[10]);
1088 else /* WRITE_SAME_32 via VARIABLE_LENGTH_CMD */
1089 num_blocks = get_unaligned_be32(&cmd->t_task_cdb[28]);
1090
1091 /*
1092 * Use the explicit range when non zero is supplied, otherwise calculate
1093 * the remaining range based on ->get_blocks() - starting LBA.
1094 */
1095 if (num_blocks != 0)
1096 range = num_blocks;
1097 else
1098 range = (dev->transport->get_blocks(dev) - lba);
1099
1100 pr_debug("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n",
1101 (unsigned long long)lba, (unsigned long long)range);
1102 947
1103 ret = dev->transport->do_discard(dev, lba, range); 948 switch (cdb[0]) {
1104 if (ret < 0) { 949 case MODE_SELECT:
1105 pr_debug("blkdev_issue_discard() failed for WRITE_SAME\n"); 950 *size = cdb[4];
1106 return ret; 951 break;
1107 } 952 case MODE_SELECT_10:
953 *size = (cdb[7] << 8) + cdb[8];
954 break;
955 case MODE_SENSE:
956 *size = cdb[4];
957 cmd->execute_cmd = spc_emulate_modesense;
958 break;
959 case MODE_SENSE_10:
960 *size = (cdb[7] << 8) + cdb[8];
961 cmd->execute_cmd = spc_emulate_modesense;
962 break;
963 case LOG_SELECT:
964 case LOG_SENSE:
965 *size = (cdb[7] << 8) + cdb[8];
966 break;
967 case PERSISTENT_RESERVE_IN:
968 if (su_dev->t10_pr.res_type == SPC3_PERSISTENT_RESERVATIONS)
969 cmd->execute_cmd = target_scsi3_emulate_pr_in;
970 *size = (cdb[7] << 8) + cdb[8];
971 break;
972 case PERSISTENT_RESERVE_OUT:
973 if (su_dev->t10_pr.res_type == SPC3_PERSISTENT_RESERVATIONS)
974 cmd->execute_cmd = target_scsi3_emulate_pr_out;
975 *size = (cdb[7] << 8) + cdb[8];
976 break;
977 case RELEASE:
978 case RELEASE_10:
979 if (cdb[0] == RELEASE_10)
980 *size = (cdb[7] << 8) | cdb[8];
981 else
982 *size = cmd->data_length;
983
984 if (su_dev->t10_pr.res_type != SPC_PASSTHROUGH)
985 cmd->execute_cmd = target_scsi2_reservation_release;
986 break;
987 case RESERVE:
988 case RESERVE_10:
989 /*
990 * The SPC-2 RESERVE does not contain a size in the SCSI CDB.
991 * Assume the passthrough or $FABRIC_MOD will tell us about it.
992 */
993 if (cdb[0] == RESERVE_10)
994 *size = (cdb[7] << 8) | cdb[8];
995 else
996 *size = cmd->data_length;
1108 997
1109 target_complete_cmd(cmd, GOOD); 998 /*
1110 return 0; 999 * Setup the legacy emulated handler for SPC-2 and
1111} 1000 * >= SPC-3 compatible reservation handling (CRH=1)
1001 * Otherwise, we assume the underlying SCSI logic is
1002 * is running in SPC_PASSTHROUGH, and wants reservations
1003 * emulation disabled.
1004 */
1005 if (su_dev->t10_pr.res_type != SPC_PASSTHROUGH)
1006 cmd->execute_cmd = target_scsi2_reservation_reserve;
1007 break;
1008 case REQUEST_SENSE:
1009 *size = cdb[4];
1010 cmd->execute_cmd = spc_emulate_request_sense;
1011 break;
1012 case INQUIRY:
1013 *size = (cdb[3] << 8) + cdb[4];
1112 1014
1113int target_emulate_synchronize_cache(struct se_cmd *cmd) 1015 /*
1114{ 1016 * Do implict HEAD_OF_QUEUE processing for INQUIRY.
1115 if (!cmd->se_dev->transport->do_sync_cache) { 1017 * See spc4r17 section 5.3
1116 pr_err("SYNCHRONIZE_CACHE emulation not supported" 1018 */
1117 " for: %s\n", cmd->se_dev->transport->name); 1019 if (cmd->se_dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
1020 cmd->sam_task_attr = MSG_HEAD_TAG;
1021 cmd->execute_cmd = spc_emulate_inquiry;
1022 break;
1023 case SECURITY_PROTOCOL_IN:
1024 case SECURITY_PROTOCOL_OUT:
1025 *size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
1026 break;
1027 case EXTENDED_COPY:
1028 case READ_ATTRIBUTE:
1029 case RECEIVE_COPY_RESULTS:
1030 case WRITE_ATTRIBUTE:
1031 *size = (cdb[10] << 24) | (cdb[11] << 16) |
1032 (cdb[12] << 8) | cdb[13];
1033 break;
1034 case RECEIVE_DIAGNOSTIC:
1035 case SEND_DIAGNOSTIC:
1036 *size = (cdb[3] << 8) | cdb[4];
1037 break;
1038 case WRITE_BUFFER:
1039 *size = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8];
1040 break;
1041 case REPORT_LUNS:
1042 cmd->execute_cmd = target_report_luns;
1043 *size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
1044 /*
1045 * Do implict HEAD_OF_QUEUE processing for REPORT_LUNS
1046 * See spc4r17 section 5.3
1047 */
1048 if (cmd->se_dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
1049 cmd->sam_task_attr = MSG_HEAD_TAG;
1050 break;
1051 case TEST_UNIT_READY:
1052 cmd->execute_cmd = spc_emulate_testunitready;
1053 *size = 0;
1054 break;
1055 case MAINTENANCE_IN:
1056 if (dev->transport->get_device_type(dev) != TYPE_ROM) {
1057 /*
1058 * MAINTENANCE_IN from SCC-2
1059 * Check for emulated MI_REPORT_TARGET_PGS
1060 */
1061 if ((cdb[1] & 0x1f) == MI_REPORT_TARGET_PGS &&
1062 su_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) {
1063 cmd->execute_cmd =
1064 target_emulate_report_target_port_groups;
1065 }
1066 *size = get_unaligned_be32(&cdb[6]);
1067 } else {
1068 /*
1069 * GPCMD_SEND_KEY from multi media commands
1070 */
1071 *size = get_unaligned_be16(&cdb[8]);
1072 }
1073 break;
1074 case MAINTENANCE_OUT:
1075 if (dev->transport->get_device_type(dev) != TYPE_ROM) {
1076 /*
1077 * MAINTENANCE_OUT from SCC-2
1078 * Check for emulated MO_SET_TARGET_PGS.
1079 */
1080 if (cdb[1] == MO_SET_TARGET_PGS &&
1081 su_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) {
1082 cmd->execute_cmd =
1083 target_emulate_set_target_port_groups;
1084 }
1085 *size = get_unaligned_be32(&cdb[6]);
1086 } else {
1087 /*
1088 * GPCMD_SEND_KEY from multi media commands
1089 */
1090 *size = get_unaligned_be16(&cdb[8]);
1091 }
1092 break;
1093 default:
1094 pr_warn("TARGET_CORE[%s]: Unsupported SCSI Opcode"
1095 " 0x%02x, sending CHECK_CONDITION.\n",
1096 cmd->se_tfo->get_fabric_name(), cdb[0]);
1097 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1118 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1098 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
1119 return -ENOSYS; 1099 return -EINVAL;
1120 } 1100 }
1121 1101
1122 cmd->se_dev->transport->do_sync_cache(cmd);
1123 return 0;
1124}
1125
1126int target_emulate_noop(struct se_cmd *cmd)
1127{
1128 target_complete_cmd(cmd, GOOD);
1129 return 0; 1102 return 0;
1130} 1103}
1104EXPORT_SYMBOL(spc_parse_cdb);
diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c
index 84caf1bed9a3..1c59a3c23b2c 100644
--- a/drivers/target/target_core_tmr.c
+++ b/drivers/target/target_core_tmr.c
@@ -295,9 +295,6 @@ static void core_tmr_drain_state_list(
295 295
296 list_move_tail(&cmd->state_list, &drain_task_list); 296 list_move_tail(&cmd->state_list, &drain_task_list);
297 cmd->state_active = false; 297 cmd->state_active = false;
298
299 if (!list_empty(&cmd->execute_list))
300 __target_remove_from_execute_list(cmd);
301 } 298 }
302 spin_unlock_irqrestore(&dev->execute_task_lock, flags); 299 spin_unlock_irqrestore(&dev->execute_task_lock, flags);
303 300
@@ -354,57 +351,6 @@ static void core_tmr_drain_state_list(
354 } 351 }
355} 352}
356 353
357static void core_tmr_drain_cmd_list(
358 struct se_device *dev,
359 struct se_cmd *prout_cmd,
360 struct se_node_acl *tmr_nacl,
361 int tas,
362 struct list_head *preempt_and_abort_list)
363{
364 LIST_HEAD(drain_cmd_list);
365 struct se_queue_obj *qobj = &dev->dev_queue_obj;
366 struct se_cmd *cmd, *tcmd;
367 unsigned long flags;
368
369 /*
370 * Release all commands remaining in the per-device command queue.
371 *
372 * This follows the same logic as above for the state list.
373 */
374 spin_lock_irqsave(&qobj->cmd_queue_lock, flags);
375 list_for_each_entry_safe(cmd, tcmd, &qobj->qobj_list, se_queue_node) {
376 /*
377 * For PREEMPT_AND_ABORT usage, only process commands
378 * with a matching reservation key.
379 */
380 if (target_check_cdb_and_preempt(preempt_and_abort_list, cmd))
381 continue;
382 /*
383 * Not aborting PROUT PREEMPT_AND_ABORT CDB..
384 */
385 if (prout_cmd == cmd)
386 continue;
387
388 cmd->transport_state &= ~CMD_T_QUEUED;
389 atomic_dec(&qobj->queue_cnt);
390 list_move_tail(&cmd->se_queue_node, &drain_cmd_list);
391 }
392 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
393
394 while (!list_empty(&drain_cmd_list)) {
395 cmd = list_entry(drain_cmd_list.next, struct se_cmd, se_queue_node);
396 list_del_init(&cmd->se_queue_node);
397
398 pr_debug("LUN_RESET: %s from Device Queue: cmd: %p t_state:"
399 " %d t_fe_count: %d\n", (preempt_and_abort_list) ?
400 "Preempt" : "", cmd, cmd->t_state,
401 atomic_read(&cmd->t_fe_count));
402
403 core_tmr_handle_tas_abort(tmr_nacl, cmd, tas,
404 atomic_read(&cmd->t_fe_count));
405 }
406}
407
408int core_tmr_lun_reset( 354int core_tmr_lun_reset(
409 struct se_device *dev, 355 struct se_device *dev,
410 struct se_tmr_req *tmr, 356 struct se_tmr_req *tmr,
@@ -447,8 +393,7 @@ int core_tmr_lun_reset(
447 core_tmr_drain_tmr_list(dev, tmr, preempt_and_abort_list); 393 core_tmr_drain_tmr_list(dev, tmr, preempt_and_abort_list);
448 core_tmr_drain_state_list(dev, prout_cmd, tmr_nacl, tas, 394 core_tmr_drain_state_list(dev, prout_cmd, tmr_nacl, tas,
449 preempt_and_abort_list); 395 preempt_and_abort_list);
450 core_tmr_drain_cmd_list(dev, prout_cmd, tmr_nacl, tas, 396
451 preempt_and_abort_list);
452 /* 397 /*
453 * Clear any legacy SPC-2 reservation when called during 398 * Clear any legacy SPC-2 reservation when called during
454 * LOGICAL UNIT RESET 399 * LOGICAL UNIT RESET
diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
index 8bd58e284185..b8628a5014b9 100644
--- a/drivers/target/target_core_tpg.c
+++ b/drivers/target/target_core_tpg.c
@@ -77,8 +77,8 @@ static void core_clear_initiator_node_from_tpg(
77 77
78 lun = deve->se_lun; 78 lun = deve->se_lun;
79 spin_unlock_irq(&nacl->device_list_lock); 79 spin_unlock_irq(&nacl->device_list_lock);
80 core_update_device_list_for_node(lun, NULL, deve->mapped_lun, 80 core_disable_device_list_for_node(lun, NULL, deve->mapped_lun,
81 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg, 0); 81 TRANSPORT_LUNFLAGS_NO_ACCESS, nacl, tpg);
82 82
83 spin_lock_irq(&nacl->device_list_lock); 83 spin_lock_irq(&nacl->device_list_lock);
84 } 84 }
@@ -172,8 +172,8 @@ void core_tpg_add_node_to_devs(
172 (lun_access == TRANSPORT_LUNFLAGS_READ_WRITE) ? 172 (lun_access == TRANSPORT_LUNFLAGS_READ_WRITE) ?
173 "READ-WRITE" : "READ-ONLY"); 173 "READ-WRITE" : "READ-ONLY");
174 174
175 core_update_device_list_for_node(lun, NULL, lun->unpacked_lun, 175 core_enable_device_list_for_node(lun, NULL, lun->unpacked_lun,
176 lun_access, acl, tpg, 1); 176 lun_access, acl, tpg);
177 spin_lock(&tpg->tpg_lun_lock); 177 spin_lock(&tpg->tpg_lun_lock);
178 } 178 }
179 spin_unlock(&tpg->tpg_lun_lock); 179 spin_unlock(&tpg->tpg_lun_lock);
@@ -306,10 +306,8 @@ struct se_node_acl *core_tpg_check_initiator_node_acl(
306 * TPG LUNs if the fabric is not explictly asking for 306 * TPG LUNs if the fabric is not explictly asking for
307 * tpg_check_demo_mode_login_only() == 1. 307 * tpg_check_demo_mode_login_only() == 1.
308 */ 308 */
309 if ((tpg->se_tpg_tfo->tpg_check_demo_mode_login_only != NULL) && 309 if ((tpg->se_tpg_tfo->tpg_check_demo_mode_login_only == NULL) ||
310 (tpg->se_tpg_tfo->tpg_check_demo_mode_login_only(tpg) == 1)) 310 (tpg->se_tpg_tfo->tpg_check_demo_mode_login_only(tpg) != 1))
311 do { ; } while (0);
312 else
313 core_tpg_add_node_to_devs(acl, tpg); 311 core_tpg_add_node_to_devs(acl, tpg);
314 312
315 spin_lock_irq(&tpg->acl_node_lock); 313 spin_lock_irq(&tpg->acl_node_lock);
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 634d0f31a28c..0eaae23d12b5 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -66,15 +66,12 @@ struct kmem_cache *t10_alua_lu_gp_mem_cache;
66struct kmem_cache *t10_alua_tg_pt_gp_cache; 66struct kmem_cache *t10_alua_tg_pt_gp_cache;
67struct kmem_cache *t10_alua_tg_pt_gp_mem_cache; 67struct kmem_cache *t10_alua_tg_pt_gp_mem_cache;
68 68
69static int transport_generic_write_pending(struct se_cmd *);
70static int transport_processing_thread(void *param);
71static int __transport_execute_tasks(struct se_device *dev, struct se_cmd *);
72static void transport_complete_task_attr(struct se_cmd *cmd); 69static void transport_complete_task_attr(struct se_cmd *cmd);
73static void transport_handle_queue_full(struct se_cmd *cmd, 70static void transport_handle_queue_full(struct se_cmd *cmd,
74 struct se_device *dev); 71 struct se_device *dev);
75static int transport_generic_get_mem(struct se_cmd *cmd); 72static int transport_generic_get_mem(struct se_cmd *cmd);
73static int target_get_sess_cmd(struct se_session *, struct se_cmd *, bool);
76static void transport_put_cmd(struct se_cmd *cmd); 74static void transport_put_cmd(struct se_cmd *cmd);
77static void transport_remove_cmd_from_queue(struct se_cmd *cmd);
78static int transport_set_sense_codes(struct se_cmd *cmd, u8 asc, u8 ascq); 75static int transport_set_sense_codes(struct se_cmd *cmd, u8 asc, u8 ascq);
79static void target_complete_ok_work(struct work_struct *work); 76static void target_complete_ok_work(struct work_struct *work);
80 77
@@ -195,14 +192,6 @@ u32 scsi_get_new_index(scsi_index_t type)
195 return new_index; 192 return new_index;
196} 193}
197 194
198static void transport_init_queue_obj(struct se_queue_obj *qobj)
199{
200 atomic_set(&qobj->queue_cnt, 0);
201 INIT_LIST_HEAD(&qobj->qobj_list);
202 init_waitqueue_head(&qobj->thread_wq);
203 spin_lock_init(&qobj->cmd_queue_lock);
204}
205
206void transport_subsystem_check_init(void) 195void transport_subsystem_check_init(void)
207{ 196{
208 int ret; 197 int ret;
@@ -243,7 +232,6 @@ struct se_session *transport_init_session(void)
243 INIT_LIST_HEAD(&se_sess->sess_list); 232 INIT_LIST_HEAD(&se_sess->sess_list);
244 INIT_LIST_HEAD(&se_sess->sess_acl_list); 233 INIT_LIST_HEAD(&se_sess->sess_acl_list);
245 INIT_LIST_HEAD(&se_sess->sess_cmd_list); 234 INIT_LIST_HEAD(&se_sess->sess_cmd_list);
246 INIT_LIST_HEAD(&se_sess->sess_wait_list);
247 spin_lock_init(&se_sess->sess_cmd_lock); 235 spin_lock_init(&se_sess->sess_cmd_lock);
248 kref_init(&se_sess->sess_kref); 236 kref_init(&se_sess->sess_kref);
249 237
@@ -468,18 +456,7 @@ static void target_remove_from_state_list(struct se_cmd *cmd)
468 spin_unlock_irqrestore(&dev->execute_task_lock, flags); 456 spin_unlock_irqrestore(&dev->execute_task_lock, flags);
469} 457}
470 458
471/* transport_cmd_check_stop(): 459static int transport_cmd_check_stop(struct se_cmd *cmd, bool remove_from_lists)
472 *
473 * 'transport_off = 1' determines if CMD_T_ACTIVE should be cleared.
474 * 'transport_off = 2' determines if task_dev_state should be removed.
475 *
476 * A non-zero u8 t_state sets cmd->t_state.
477 * Returns 1 when command is stopped, else 0.
478 */
479static int transport_cmd_check_stop(
480 struct se_cmd *cmd,
481 int transport_off,
482 u8 t_state)
483{ 460{
484 unsigned long flags; 461 unsigned long flags;
485 462
@@ -493,13 +470,23 @@ static int transport_cmd_check_stop(
493 __func__, __LINE__, cmd->se_tfo->get_task_tag(cmd)); 470 __func__, __LINE__, cmd->se_tfo->get_task_tag(cmd));
494 471
495 cmd->transport_state &= ~CMD_T_ACTIVE; 472 cmd->transport_state &= ~CMD_T_ACTIVE;
496 if (transport_off == 2) 473 if (remove_from_lists)
497 target_remove_from_state_list(cmd); 474 target_remove_from_state_list(cmd);
498 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 475 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
499 476
500 complete(&cmd->transport_lun_stop_comp); 477 complete(&cmd->transport_lun_stop_comp);
501 return 1; 478 return 1;
502 } 479 }
480
481 if (remove_from_lists) {
482 target_remove_from_state_list(cmd);
483
484 /*
485 * Clear struct se_cmd->se_lun before the handoff to FE.
486 */
487 cmd->se_lun = NULL;
488 }
489
503 /* 490 /*
504 * Determine if frontend context caller is requesting the stopping of 491 * Determine if frontend context caller is requesting the stopping of
505 * this command for frontend exceptions. 492 * this command for frontend exceptions.
@@ -509,58 +496,36 @@ static int transport_cmd_check_stop(
509 __func__, __LINE__, 496 __func__, __LINE__,
510 cmd->se_tfo->get_task_tag(cmd)); 497 cmd->se_tfo->get_task_tag(cmd));
511 498
512 if (transport_off == 2)
513 target_remove_from_state_list(cmd);
514
515 /*
516 * Clear struct se_cmd->se_lun before the transport_off == 2 handoff
517 * to FE.
518 */
519 if (transport_off == 2)
520 cmd->se_lun = NULL;
521 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 499 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
522 500
523 complete(&cmd->t_transport_stop_comp); 501 complete(&cmd->t_transport_stop_comp);
524 return 1; 502 return 1;
525 } 503 }
526 if (transport_off) { 504
527 cmd->transport_state &= ~CMD_T_ACTIVE; 505 cmd->transport_state &= ~CMD_T_ACTIVE;
528 if (transport_off == 2) { 506 if (remove_from_lists) {
529 target_remove_from_state_list(cmd); 507 /*
530 /* 508 * Some fabric modules like tcm_loop can release
531 * Clear struct se_cmd->se_lun before the transport_off == 2 509 * their internally allocated I/O reference now and
532 * handoff to fabric module. 510 * struct se_cmd now.
533 */ 511 *
534 cmd->se_lun = NULL; 512 * Fabric modules are expected to return '1' here if the
535 /* 513 * se_cmd being passed is released at this point,
536 * Some fabric modules like tcm_loop can release 514 * or zero if not being released.
537 * their internally allocated I/O reference now and 515 */
538 * struct se_cmd now. 516 if (cmd->se_tfo->check_stop_free != NULL) {
539 * 517 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
540 * Fabric modules are expected to return '1' here if the 518 return cmd->se_tfo->check_stop_free(cmd);
541 * se_cmd being passed is released at this point,
542 * or zero if not being released.
543 */
544 if (cmd->se_tfo->check_stop_free != NULL) {
545 spin_unlock_irqrestore(
546 &cmd->t_state_lock, flags);
547
548 return cmd->se_tfo->check_stop_free(cmd);
549 }
550 } 519 }
551 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 520 }
552 521
553 return 0;
554 } else if (t_state)
555 cmd->t_state = t_state;
556 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 522 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
557
558 return 0; 523 return 0;
559} 524}
560 525
561static int transport_cmd_check_stop_to_fabric(struct se_cmd *cmd) 526static int transport_cmd_check_stop_to_fabric(struct se_cmd *cmd)
562{ 527{
563 return transport_cmd_check_stop(cmd, 2, 0); 528 return transport_cmd_check_stop(cmd, true);
564} 529}
565 530
566static void transport_lun_remove_cmd(struct se_cmd *cmd) 531static void transport_lun_remove_cmd(struct se_cmd *cmd)
@@ -591,79 +556,8 @@ void transport_cmd_finish_abort(struct se_cmd *cmd, int remove)
591 556
592 if (transport_cmd_check_stop_to_fabric(cmd)) 557 if (transport_cmd_check_stop_to_fabric(cmd))
593 return; 558 return;
594 if (remove) { 559 if (remove)
595 transport_remove_cmd_from_queue(cmd);
596 transport_put_cmd(cmd); 560 transport_put_cmd(cmd);
597 }
598}
599
600static void transport_add_cmd_to_queue(struct se_cmd *cmd, int t_state,
601 bool at_head)
602{
603 struct se_device *dev = cmd->se_dev;
604 struct se_queue_obj *qobj = &dev->dev_queue_obj;
605 unsigned long flags;
606
607 if (t_state) {
608 spin_lock_irqsave(&cmd->t_state_lock, flags);
609 cmd->t_state = t_state;
610 cmd->transport_state |= CMD_T_ACTIVE;
611 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
612 }
613
614 spin_lock_irqsave(&qobj->cmd_queue_lock, flags);
615
616 /* If the cmd is already on the list, remove it before we add it */
617 if (!list_empty(&cmd->se_queue_node))
618 list_del(&cmd->se_queue_node);
619 else
620 atomic_inc(&qobj->queue_cnt);
621
622 if (at_head)
623 list_add(&cmd->se_queue_node, &qobj->qobj_list);
624 else
625 list_add_tail(&cmd->se_queue_node, &qobj->qobj_list);
626 cmd->transport_state |= CMD_T_QUEUED;
627 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
628
629 wake_up_interruptible(&qobj->thread_wq);
630}
631
632static struct se_cmd *
633transport_get_cmd_from_queue(struct se_queue_obj *qobj)
634{
635 struct se_cmd *cmd;
636 unsigned long flags;
637
638 spin_lock_irqsave(&qobj->cmd_queue_lock, flags);
639 if (list_empty(&qobj->qobj_list)) {
640 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
641 return NULL;
642 }
643 cmd = list_first_entry(&qobj->qobj_list, struct se_cmd, se_queue_node);
644
645 cmd->transport_state &= ~CMD_T_QUEUED;
646 list_del_init(&cmd->se_queue_node);
647 atomic_dec(&qobj->queue_cnt);
648 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
649
650 return cmd;
651}
652
653static void transport_remove_cmd_from_queue(struct se_cmd *cmd)
654{
655 struct se_queue_obj *qobj = &cmd->se_dev->dev_queue_obj;
656 unsigned long flags;
657
658 spin_lock_irqsave(&qobj->cmd_queue_lock, flags);
659 if (!(cmd->transport_state & CMD_T_QUEUED)) {
660 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
661 return;
662 }
663 cmd->transport_state &= ~CMD_T_QUEUED;
664 atomic_dec(&qobj->queue_cnt);
665 list_del_init(&cmd->se_queue_node);
666 spin_unlock_irqrestore(&qobj->cmd_queue_lock, flags);
667} 561}
668 562
669static void target_complete_failure_work(struct work_struct *work) 563static void target_complete_failure_work(struct work_struct *work)
@@ -742,68 +636,11 @@ static void target_add_to_state_list(struct se_cmd *cmd)
742 spin_unlock_irqrestore(&dev->execute_task_lock, flags); 636 spin_unlock_irqrestore(&dev->execute_task_lock, flags);
743} 637}
744 638
745static void __target_add_to_execute_list(struct se_cmd *cmd)
746{
747 struct se_device *dev = cmd->se_dev;
748 bool head_of_queue = false;
749
750 if (!list_empty(&cmd->execute_list))
751 return;
752
753 if (dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED &&
754 cmd->sam_task_attr == MSG_HEAD_TAG)
755 head_of_queue = true;
756
757 if (head_of_queue)
758 list_add(&cmd->execute_list, &dev->execute_list);
759 else
760 list_add_tail(&cmd->execute_list, &dev->execute_list);
761
762 atomic_inc(&dev->execute_tasks);
763
764 if (cmd->state_active)
765 return;
766
767 if (head_of_queue)
768 list_add(&cmd->state_list, &dev->state_list);
769 else
770 list_add_tail(&cmd->state_list, &dev->state_list);
771
772 cmd->state_active = true;
773}
774
775static void target_add_to_execute_list(struct se_cmd *cmd)
776{
777 unsigned long flags;
778 struct se_device *dev = cmd->se_dev;
779
780 spin_lock_irqsave(&dev->execute_task_lock, flags);
781 __target_add_to_execute_list(cmd);
782 spin_unlock_irqrestore(&dev->execute_task_lock, flags);
783}
784
785void __target_remove_from_execute_list(struct se_cmd *cmd)
786{
787 list_del_init(&cmd->execute_list);
788 atomic_dec(&cmd->se_dev->execute_tasks);
789}
790
791static void target_remove_from_execute_list(struct se_cmd *cmd)
792{
793 struct se_device *dev = cmd->se_dev;
794 unsigned long flags;
795
796 if (WARN_ON(list_empty(&cmd->execute_list)))
797 return;
798
799 spin_lock_irqsave(&dev->execute_task_lock, flags);
800 __target_remove_from_execute_list(cmd);
801 spin_unlock_irqrestore(&dev->execute_task_lock, flags);
802}
803
804/* 639/*
805 * Handle QUEUE_FULL / -EAGAIN and -ENOMEM status 640 * Handle QUEUE_FULL / -EAGAIN and -ENOMEM status
806 */ 641 */
642static void transport_write_pending_qf(struct se_cmd *cmd);
643static void transport_complete_qf(struct se_cmd *cmd);
807 644
808static void target_qf_do_work(struct work_struct *work) 645static void target_qf_do_work(struct work_struct *work)
809{ 646{
@@ -827,7 +664,10 @@ static void target_qf_do_work(struct work_struct *work)
827 (cmd->t_state == TRANSPORT_COMPLETE_QF_WP) ? "WRITE_PENDING" 664 (cmd->t_state == TRANSPORT_COMPLETE_QF_WP) ? "WRITE_PENDING"
828 : "UNKNOWN"); 665 : "UNKNOWN");
829 666
830 transport_add_cmd_to_queue(cmd, cmd->t_state, true); 667 if (cmd->t_state == TRANSPORT_COMPLETE_QF_WP)
668 transport_write_pending_qf(cmd);
669 else if (cmd->t_state == TRANSPORT_COMPLETE_QF_OK)
670 transport_complete_qf(cmd);
831 } 671 }
832} 672}
833 673
@@ -874,8 +714,7 @@ void transport_dump_dev_state(
874 break; 714 break;
875 } 715 }
876 716
877 *bl += sprintf(b + *bl, " Execute/Max Queue Depth: %d/%d", 717 *bl += sprintf(b + *bl, " Max Queue Depth: %d", dev->queue_depth);
878 atomic_read(&dev->execute_tasks), dev->queue_depth);
879 *bl += sprintf(b + *bl, " SectorSize: %u HwMaxSectors: %u\n", 718 *bl += sprintf(b + *bl, " SectorSize: %u HwMaxSectors: %u\n",
880 dev->se_sub_dev->se_dev_attrib.block_size, 719 dev->se_sub_dev->se_dev_attrib.block_size,
881 dev->se_sub_dev->se_dev_attrib.hw_max_sectors); 720 dev->se_sub_dev->se_dev_attrib.hw_max_sectors);
@@ -1212,7 +1051,6 @@ struct se_device *transport_add_device_to_core_hba(
1212 return NULL; 1051 return NULL;
1213 } 1052 }
1214 1053
1215 transport_init_queue_obj(&dev->dev_queue_obj);
1216 dev->dev_flags = device_flags; 1054 dev->dev_flags = device_flags;
1217 dev->dev_status |= TRANSPORT_DEVICE_DEACTIVATED; 1055 dev->dev_status |= TRANSPORT_DEVICE_DEACTIVATED;
1218 dev->dev_ptr = transport_dev; 1056 dev->dev_ptr = transport_dev;
@@ -1222,7 +1060,6 @@ struct se_device *transport_add_device_to_core_hba(
1222 INIT_LIST_HEAD(&dev->dev_list); 1060 INIT_LIST_HEAD(&dev->dev_list);
1223 INIT_LIST_HEAD(&dev->dev_sep_list); 1061 INIT_LIST_HEAD(&dev->dev_sep_list);
1224 INIT_LIST_HEAD(&dev->dev_tmr_list); 1062 INIT_LIST_HEAD(&dev->dev_tmr_list);
1225 INIT_LIST_HEAD(&dev->execute_list);
1226 INIT_LIST_HEAD(&dev->delayed_cmd_list); 1063 INIT_LIST_HEAD(&dev->delayed_cmd_list);
1227 INIT_LIST_HEAD(&dev->state_list); 1064 INIT_LIST_HEAD(&dev->state_list);
1228 INIT_LIST_HEAD(&dev->qf_cmd_list); 1065 INIT_LIST_HEAD(&dev->qf_cmd_list);
@@ -1261,17 +1098,17 @@ struct se_device *transport_add_device_to_core_hba(
1261 * Setup the Asymmetric Logical Unit Assignment for struct se_device 1098 * Setup the Asymmetric Logical Unit Assignment for struct se_device
1262 */ 1099 */
1263 if (core_setup_alua(dev, force_pt) < 0) 1100 if (core_setup_alua(dev, force_pt) < 0)
1264 goto out; 1101 goto err_dev_list;
1265 1102
1266 /* 1103 /*
1267 * Startup the struct se_device processing thread 1104 * Startup the struct se_device processing thread
1268 */ 1105 */
1269 dev->process_thread = kthread_run(transport_processing_thread, dev, 1106 dev->tmr_wq = alloc_workqueue("tmr-%s", WQ_MEM_RECLAIM | WQ_UNBOUND, 1,
1270 "LIO_%s", dev->transport->name); 1107 dev->transport->name);
1271 if (IS_ERR(dev->process_thread)) { 1108 if (!dev->tmr_wq) {
1272 pr_err("Unable to create kthread: LIO_%s\n", 1109 pr_err("Unable to create tmr workqueue for %s\n",
1273 dev->transport->name); 1110 dev->transport->name);
1274 goto out; 1111 goto err_dev_list;
1275 } 1112 }
1276 /* 1113 /*
1277 * Setup work_queue for QUEUE_FULL 1114 * Setup work_queue for QUEUE_FULL
@@ -1289,7 +1126,7 @@ struct se_device *transport_add_device_to_core_hba(
1289 if (!inquiry_prod || !inquiry_rev) { 1126 if (!inquiry_prod || !inquiry_rev) {
1290 pr_err("All non TCM/pSCSI plugins require" 1127 pr_err("All non TCM/pSCSI plugins require"
1291 " INQUIRY consts\n"); 1128 " INQUIRY consts\n");
1292 goto out; 1129 goto err_wq;
1293 } 1130 }
1294 1131
1295 strncpy(&dev->se_sub_dev->t10_wwn.vendor[0], "LIO-ORG", 8); 1132 strncpy(&dev->se_sub_dev->t10_wwn.vendor[0], "LIO-ORG", 8);
@@ -1299,9 +1136,10 @@ struct se_device *transport_add_device_to_core_hba(
1299 scsi_dump_inquiry(dev); 1136 scsi_dump_inquiry(dev);
1300 1137
1301 return dev; 1138 return dev;
1302out:
1303 kthread_stop(dev->process_thread);
1304 1139
1140err_wq:
1141 destroy_workqueue(dev->tmr_wq);
1142err_dev_list:
1305 spin_lock(&hba->device_lock); 1143 spin_lock(&hba->device_lock);
1306 list_del(&dev->dev_list); 1144 list_del(&dev->dev_list);
1307 hba->dev_count--; 1145 hba->dev_count--;
@@ -1315,35 +1153,54 @@ out:
1315} 1153}
1316EXPORT_SYMBOL(transport_add_device_to_core_hba); 1154EXPORT_SYMBOL(transport_add_device_to_core_hba);
1317 1155
1318/* transport_generic_prepare_cdb(): 1156int target_cmd_size_check(struct se_cmd *cmd, unsigned int size)
1319 *
1320 * Since the Initiator sees iSCSI devices as LUNs, the SCSI CDB will
1321 * contain the iSCSI LUN in bits 7-5 of byte 1 as per SAM-2.
1322 * The point of this is since we are mapping iSCSI LUNs to
1323 * SCSI Target IDs having a non-zero LUN in the CDB will throw the
1324 * devices and HBAs for a loop.
1325 */
1326static inline void transport_generic_prepare_cdb(
1327 unsigned char *cdb)
1328{ 1157{
1329 switch (cdb[0]) { 1158 struct se_device *dev = cmd->se_dev;
1330 case READ_10: /* SBC - RDProtect */ 1159
1331 case READ_12: /* SBC - RDProtect */ 1160 if (cmd->unknown_data_length) {
1332 case READ_16: /* SBC - RDProtect */ 1161 cmd->data_length = size;
1333 case SEND_DIAGNOSTIC: /* SPC - SELF-TEST Code */ 1162 } else if (size != cmd->data_length) {
1334 case VERIFY: /* SBC - VRProtect */ 1163 pr_warn("TARGET_CORE[%s]: Expected Transfer Length:"
1335 case VERIFY_16: /* SBC - VRProtect */ 1164 " %u does not match SCSI CDB Length: %u for SAM Opcode:"
1336 case WRITE_VERIFY: /* SBC - VRProtect */ 1165 " 0x%02x\n", cmd->se_tfo->get_fabric_name(),
1337 case WRITE_VERIFY_12: /* SBC - VRProtect */ 1166 cmd->data_length, size, cmd->t_task_cdb[0]);
1338 case MAINTENANCE_IN: /* SPC - Parameter Data Format for SA RTPG */ 1167
1339 break; 1168 cmd->cmd_spdtl = size;
1340 default: 1169
1341 cdb[1] &= 0x1f; /* clear logical unit number */ 1170 if (cmd->data_direction == DMA_TO_DEVICE) {
1342 break; 1171 pr_err("Rejecting underflow/overflow"
1172 " WRITE data\n");
1173 goto out_invalid_cdb_field;
1174 }
1175 /*
1176 * Reject READ_* or WRITE_* with overflow/underflow for
1177 * type SCF_SCSI_DATA_CDB.
1178 */
1179 if (dev->se_sub_dev->se_dev_attrib.block_size != 512) {
1180 pr_err("Failing OVERFLOW/UNDERFLOW for LBA op"
1181 " CDB on non 512-byte sector setup subsystem"
1182 " plugin: %s\n", dev->transport->name);
1183 /* Returns CHECK_CONDITION + INVALID_CDB_FIELD */
1184 goto out_invalid_cdb_field;
1185 }
1186
1187 if (size > cmd->data_length) {
1188 cmd->se_cmd_flags |= SCF_OVERFLOW_BIT;
1189 cmd->residual_count = (size - cmd->data_length);
1190 } else {
1191 cmd->se_cmd_flags |= SCF_UNDERFLOW_BIT;
1192 cmd->residual_count = (cmd->data_length - size);
1193 }
1194 cmd->data_length = size;
1343 } 1195 }
1344}
1345 1196
1346static int transport_generic_cmd_sequencer(struct se_cmd *, unsigned char *); 1197 return 0;
1198
1199out_invalid_cdb_field:
1200 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1201 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
1202 return -EINVAL;
1203}
1347 1204
1348/* 1205/*
1349 * Used by fabric modules containing a local struct se_cmd within their 1206 * Used by fabric modules containing a local struct se_cmd within their
@@ -1361,9 +1218,7 @@ void transport_init_se_cmd(
1361 INIT_LIST_HEAD(&cmd->se_lun_node); 1218 INIT_LIST_HEAD(&cmd->se_lun_node);
1362 INIT_LIST_HEAD(&cmd->se_delayed_node); 1219 INIT_LIST_HEAD(&cmd->se_delayed_node);
1363 INIT_LIST_HEAD(&cmd->se_qf_node); 1220 INIT_LIST_HEAD(&cmd->se_qf_node);
1364 INIT_LIST_HEAD(&cmd->se_queue_node);
1365 INIT_LIST_HEAD(&cmd->se_cmd_list); 1221 INIT_LIST_HEAD(&cmd->se_cmd_list);
1366 INIT_LIST_HEAD(&cmd->execute_list);
1367 INIT_LIST_HEAD(&cmd->state_list); 1222 INIT_LIST_HEAD(&cmd->state_list);
1368 init_completion(&cmd->transport_lun_fe_stop_comp); 1223 init_completion(&cmd->transport_lun_fe_stop_comp);
1369 init_completion(&cmd->transport_lun_stop_comp); 1224 init_completion(&cmd->transport_lun_stop_comp);
@@ -1418,9 +1273,12 @@ int target_setup_cmd_from_cdb(
1418 struct se_cmd *cmd, 1273 struct se_cmd *cmd,
1419 unsigned char *cdb) 1274 unsigned char *cdb)
1420{ 1275{
1276 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
1277 u32 pr_reg_type = 0;
1278 u8 alua_ascq = 0;
1279 unsigned long flags;
1421 int ret; 1280 int ret;
1422 1281
1423 transport_generic_prepare_cdb(cdb);
1424 /* 1282 /*
1425 * Ensure that the received CDB is less than the max (252 + 8) bytes 1283 * Ensure that the received CDB is less than the max (252 + 8) bytes
1426 * for VARIABLE_LENGTH_CMD 1284 * for VARIABLE_LENGTH_CMD
@@ -1457,15 +1315,66 @@ int target_setup_cmd_from_cdb(
1457 * Copy the original CDB into cmd-> 1315 * Copy the original CDB into cmd->
1458 */ 1316 */
1459 memcpy(cmd->t_task_cdb, cdb, scsi_command_size(cdb)); 1317 memcpy(cmd->t_task_cdb, cdb, scsi_command_size(cdb));
1318
1460 /* 1319 /*
1461 * Setup the received CDB based on SCSI defined opcodes and 1320 * Check for an existing UNIT ATTENTION condition
1462 * perform unit attention, persistent reservations and ALUA
1463 * checks for virtual device backends. The cmd->t_task_cdb
1464 * pointer is expected to be setup before we reach this point.
1465 */ 1321 */
1466 ret = transport_generic_cmd_sequencer(cmd, cdb); 1322 if (core_scsi3_ua_check(cmd, cdb) < 0) {
1323 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1324 cmd->scsi_sense_reason = TCM_CHECK_CONDITION_UNIT_ATTENTION;
1325 return -EINVAL;
1326 }
1327
1328 ret = su_dev->t10_alua.alua_state_check(cmd, cdb, &alua_ascq);
1329 if (ret != 0) {
1330 /*
1331 * Set SCSI additional sense code (ASC) to 'LUN Not Accessible';
1332 * The ALUA additional sense code qualifier (ASCQ) is determined
1333 * by the ALUA primary or secondary access state..
1334 */
1335 if (ret > 0) {
1336 pr_debug("[%s]: ALUA TG Port not available, "
1337 "SenseKey: NOT_READY, ASC/ASCQ: "
1338 "0x04/0x%02x\n",
1339 cmd->se_tfo->get_fabric_name(), alua_ascq);
1340
1341 transport_set_sense_codes(cmd, 0x04, alua_ascq);
1342 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1343 cmd->scsi_sense_reason = TCM_CHECK_CONDITION_NOT_READY;
1344 return -EINVAL;
1345 }
1346 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1347 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
1348 return -EINVAL;
1349 }
1350
1351 /*
1352 * Check status for SPC-3 Persistent Reservations
1353 */
1354 if (su_dev->t10_pr.pr_ops.t10_reservation_check(cmd, &pr_reg_type)) {
1355 if (su_dev->t10_pr.pr_ops.t10_seq_non_holder(
1356 cmd, cdb, pr_reg_type) != 0) {
1357 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
1358 cmd->se_cmd_flags |= SCF_SCSI_RESERVATION_CONFLICT;
1359 cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
1360 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
1361 return -EBUSY;
1362 }
1363 /*
1364 * This means the CDB is allowed for the SCSI Initiator port
1365 * when said port is *NOT* holding the legacy SPC-2 or
1366 * SPC-3 Persistent Reservation.
1367 */
1368 }
1369
1370 ret = cmd->se_dev->transport->parse_cdb(cmd);
1467 if (ret < 0) 1371 if (ret < 0)
1468 return ret; 1372 return ret;
1373
1374 spin_lock_irqsave(&cmd->t_state_lock, flags);
1375 cmd->se_cmd_flags |= SCF_SUPPORTED_SAM_OPCODE;
1376 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
1377
1469 /* 1378 /*
1470 * Check for SAM Task Attribute Emulation 1379 * Check for SAM Task Attribute Emulation
1471 */ 1380 */
@@ -1503,10 +1412,9 @@ int transport_handle_cdb_direct(
1503 return -EINVAL; 1412 return -EINVAL;
1504 } 1413 }
1505 /* 1414 /*
1506 * Set TRANSPORT_NEW_CMD state and CMD_T_ACTIVE following 1415 * Set TRANSPORT_NEW_CMD state and CMD_T_ACTIVE to ensure that
1507 * transport_generic_handle_cdb*() -> transport_add_cmd_to_queue() 1416 * outstanding descriptors are handled correctly during shutdown via
1508 * in existing usage to ensure that outstanding descriptors are handled 1417 * transport_wait_for_tasks()
1509 * correctly during shutdown via transport_wait_for_tasks()
1510 * 1418 *
1511 * Also, we don't take cmd->t_state_lock here as we only expect 1419 * Also, we don't take cmd->t_state_lock here as we only expect
1512 * this to be called for initial descriptor submission. 1420 * this to be called for initial descriptor submission.
@@ -1540,10 +1448,14 @@ EXPORT_SYMBOL(transport_handle_cdb_direct);
1540 * @data_dir: DMA data direction 1448 * @data_dir: DMA data direction
1541 * @flags: flags for command submission from target_sc_flags_tables 1449 * @flags: flags for command submission from target_sc_flags_tables
1542 * 1450 *
1451 * Returns non zero to signal active I/O shutdown failure. All other
1452 * setup exceptions will be returned as a SCSI CHECK_CONDITION response,
1453 * but still return zero here.
1454 *
1543 * This may only be called from process context, and also currently 1455 * This may only be called from process context, and also currently
1544 * assumes internal allocation of fabric payload buffer by target-core. 1456 * assumes internal allocation of fabric payload buffer by target-core.
1545 **/ 1457 **/
1546void target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess, 1458int target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess,
1547 unsigned char *cdb, unsigned char *sense, u32 unpacked_lun, 1459 unsigned char *cdb, unsigned char *sense, u32 unpacked_lun,
1548 u32 data_length, int task_attr, int data_dir, int flags) 1460 u32 data_length, int task_attr, int data_dir, int flags)
1549{ 1461{
@@ -1569,7 +1481,9 @@ void target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess,
1569 * for fabrics using TARGET_SCF_ACK_KREF that expect a second 1481 * for fabrics using TARGET_SCF_ACK_KREF that expect a second
1570 * kref_put() to happen during fabric packet acknowledgement. 1482 * kref_put() to happen during fabric packet acknowledgement.
1571 */ 1483 */
1572 target_get_sess_cmd(se_sess, se_cmd, (flags & TARGET_SCF_ACK_KREF)); 1484 rc = target_get_sess_cmd(se_sess, se_cmd, (flags & TARGET_SCF_ACK_KREF));
1485 if (rc)
1486 return rc;
1573 /* 1487 /*
1574 * Signal bidirectional data payloads to target-core 1488 * Signal bidirectional data payloads to target-core
1575 */ 1489 */
@@ -1582,16 +1496,13 @@ void target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess,
1582 transport_send_check_condition_and_sense(se_cmd, 1496 transport_send_check_condition_and_sense(se_cmd,
1583 se_cmd->scsi_sense_reason, 0); 1497 se_cmd->scsi_sense_reason, 0);
1584 target_put_sess_cmd(se_sess, se_cmd); 1498 target_put_sess_cmd(se_sess, se_cmd);
1585 return; 1499 return 0;
1586 } 1500 }
1587 /* 1501
1588 * Sanitize CDBs via transport_generic_cmd_sequencer() and
1589 * allocate the necessary tasks to complete the received CDB+data
1590 */
1591 rc = target_setup_cmd_from_cdb(se_cmd, cdb); 1502 rc = target_setup_cmd_from_cdb(se_cmd, cdb);
1592 if (rc != 0) { 1503 if (rc != 0) {
1593 transport_generic_request_failure(se_cmd); 1504 transport_generic_request_failure(se_cmd);
1594 return; 1505 return 0;
1595 } 1506 }
1596 1507
1597 /* 1508 /*
@@ -1600,14 +1511,8 @@ void target_submit_cmd(struct se_cmd *se_cmd, struct se_session *se_sess,
1600 */ 1511 */
1601 core_alua_check_nonop_delay(se_cmd); 1512 core_alua_check_nonop_delay(se_cmd);
1602 1513
1603 /*
1604 * Dispatch se_cmd descriptor to se_lun->lun_se_dev backend
1605 * for immediate execution of READs, otherwise wait for
1606 * transport_generic_handle_data() to be called for WRITEs
1607 * when fabric has filled the incoming buffer.
1608 */
1609 transport_handle_cdb_direct(se_cmd); 1514 transport_handle_cdb_direct(se_cmd);
1610 return; 1515 return 0;
1611} 1516}
1612EXPORT_SYMBOL(target_submit_cmd); 1517EXPORT_SYMBOL(target_submit_cmd);
1613 1518
@@ -1662,7 +1567,11 @@ int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,
1662 se_cmd->se_tmr_req->ref_task_tag = tag; 1567 se_cmd->se_tmr_req->ref_task_tag = tag;
1663 1568
1664 /* See target_submit_cmd for commentary */ 1569 /* See target_submit_cmd for commentary */
1665 target_get_sess_cmd(se_sess, se_cmd, (flags & TARGET_SCF_ACK_KREF)); 1570 ret = target_get_sess_cmd(se_sess, se_cmd, (flags & TARGET_SCF_ACK_KREF));
1571 if (ret) {
1572 core_tmr_release_req(se_cmd->se_tmr_req);
1573 return ret;
1574 }
1666 1575
1667 ret = transport_lookup_tmr_lun(se_cmd, unpacked_lun); 1576 ret = transport_lookup_tmr_lun(se_cmd, unpacked_lun);
1668 if (ret) { 1577 if (ret) {
@@ -1680,67 +1589,6 @@ int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,
1680EXPORT_SYMBOL(target_submit_tmr); 1589EXPORT_SYMBOL(target_submit_tmr);
1681 1590
1682/* 1591/*
1683 * Used by fabric module frontends defining a TFO->new_cmd_map() caller
1684 * to queue up a newly setup se_cmd w/ TRANSPORT_NEW_CMD_MAP in order to
1685 * complete setup in TCM process context w/ TFO->new_cmd_map().
1686 */
1687int transport_generic_handle_cdb_map(
1688 struct se_cmd *cmd)
1689{
1690 if (!cmd->se_lun) {
1691 dump_stack();
1692 pr_err("cmd->se_lun is NULL\n");
1693 return -EINVAL;
1694 }
1695
1696 transport_add_cmd_to_queue(cmd, TRANSPORT_NEW_CMD_MAP, false);
1697 return 0;
1698}
1699EXPORT_SYMBOL(transport_generic_handle_cdb_map);
1700
1701/* transport_generic_handle_data():
1702 *
1703 *
1704 */
1705int transport_generic_handle_data(
1706 struct se_cmd *cmd)
1707{
1708 /*
1709 * For the software fabric case, then we assume the nexus is being
1710 * failed/shutdown when signals are pending from the kthread context
1711 * caller, so we return a failure. For the HW target mode case running
1712 * in interrupt code, the signal_pending() check is skipped.
1713 */
1714 if (!in_interrupt() && signal_pending(current))
1715 return -EPERM;
1716 /*
1717 * If the received CDB has aleady been ABORTED by the generic
1718 * target engine, we now call transport_check_aborted_status()
1719 * to queue any delated TASK_ABORTED status for the received CDB to the
1720 * fabric module as we are expecting no further incoming DATA OUT
1721 * sequences at this point.
1722 */
1723 if (transport_check_aborted_status(cmd, 1) != 0)
1724 return 0;
1725
1726 transport_add_cmd_to_queue(cmd, TRANSPORT_PROCESS_WRITE, false);
1727 return 0;
1728}
1729EXPORT_SYMBOL(transport_generic_handle_data);
1730
1731/* transport_generic_handle_tmr():
1732 *
1733 *
1734 */
1735int transport_generic_handle_tmr(
1736 struct se_cmd *cmd)
1737{
1738 transport_add_cmd_to_queue(cmd, TRANSPORT_PROCESS_TMR, false);
1739 return 0;
1740}
1741EXPORT_SYMBOL(transport_generic_handle_tmr);
1742
1743/*
1744 * If the cmd is active, request it to be stopped and sleep until it 1592 * If the cmd is active, request it to be stopped and sleep until it
1745 * has completed. 1593 * has completed.
1746 */ 1594 */
@@ -1797,6 +1645,7 @@ void transport_generic_request_failure(struct se_cmd *cmd)
1797 case TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE: 1645 case TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE:
1798 case TCM_UNKNOWN_MODE_PAGE: 1646 case TCM_UNKNOWN_MODE_PAGE:
1799 case TCM_WRITE_PROTECTED: 1647 case TCM_WRITE_PROTECTED:
1648 case TCM_ADDRESS_OUT_OF_RANGE:
1800 case TCM_CHECK_CONDITION_ABORT_CMD: 1649 case TCM_CHECK_CONDITION_ABORT_CMD:
1801 case TCM_CHECK_CONDITION_UNIT_ATTENTION: 1650 case TCM_CHECK_CONDITION_UNIT_ATTENTION:
1802 case TCM_CHECK_CONDITION_NOT_READY: 1651 case TCM_CHECK_CONDITION_NOT_READY:
@@ -1832,13 +1681,7 @@ void transport_generic_request_failure(struct se_cmd *cmd)
1832 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1681 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
1833 break; 1682 break;
1834 } 1683 }
1835 /* 1684
1836 * If a fabric does not define a cmd->se_tfo->new_cmd_map caller,
1837 * make the call to transport_send_check_condition_and_sense()
1838 * directly. Otherwise expect the fabric to make the call to
1839 * transport_send_check_condition_and_sense() after handling
1840 * possible unsoliticied write data payloads.
1841 */
1842 ret = transport_send_check_condition_and_sense(cmd, 1685 ret = transport_send_check_condition_and_sense(cmd,
1843 cmd->scsi_sense_reason, 0); 1686 cmd->scsi_sense_reason, 0);
1844 if (ret == -EAGAIN || ret == -ENOMEM) 1687 if (ret == -EAGAIN || ret == -ENOMEM)
@@ -1856,406 +1699,123 @@ queue_full:
1856} 1699}
1857EXPORT_SYMBOL(transport_generic_request_failure); 1700EXPORT_SYMBOL(transport_generic_request_failure);
1858 1701
1859static inline u32 transport_lba_21(unsigned char *cdb) 1702static void __target_execute_cmd(struct se_cmd *cmd)
1860{ 1703{
1861 return ((cdb[1] & 0x1f) << 16) | (cdb[2] << 8) | cdb[3]; 1704 int error = 0;
1862}
1863 1705
1864static inline u32 transport_lba_32(unsigned char *cdb) 1706 spin_lock_irq(&cmd->t_state_lock);
1865{ 1707 cmd->transport_state |= (CMD_T_BUSY|CMD_T_SENT);
1866 return (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; 1708 spin_unlock_irq(&cmd->t_state_lock);
1867}
1868
1869static inline unsigned long long transport_lba_64(unsigned char *cdb)
1870{
1871 unsigned int __v1, __v2;
1872
1873 __v1 = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
1874 __v2 = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
1875
1876 return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
1877}
1878
1879/*
1880 * For VARIABLE_LENGTH_CDB w/ 32 byte extended CDBs
1881 */
1882static inline unsigned long long transport_lba_64_ext(unsigned char *cdb)
1883{
1884 unsigned int __v1, __v2;
1885
1886 __v1 = (cdb[12] << 24) | (cdb[13] << 16) | (cdb[14] << 8) | cdb[15];
1887 __v2 = (cdb[16] << 24) | (cdb[17] << 16) | (cdb[18] << 8) | cdb[19];
1888
1889 return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
1890}
1891
1892static void transport_set_supported_SAM_opcode(struct se_cmd *se_cmd)
1893{
1894 unsigned long flags;
1895
1896 spin_lock_irqsave(&se_cmd->t_state_lock, flags);
1897 se_cmd->se_cmd_flags |= SCF_SUPPORTED_SAM_OPCODE;
1898 spin_unlock_irqrestore(&se_cmd->t_state_lock, flags);
1899}
1900
1901/*
1902 * Called from Fabric Module context from transport_execute_tasks()
1903 *
1904 * The return of this function determins if the tasks from struct se_cmd
1905 * get added to the execution queue in transport_execute_tasks(),
1906 * or are added to the delayed or ordered lists here.
1907 */
1908static inline int transport_execute_task_attr(struct se_cmd *cmd)
1909{
1910 if (cmd->se_dev->dev_task_attr_type != SAM_TASK_ATTR_EMULATED)
1911 return 1;
1912 /*
1913 * Check for the existence of HEAD_OF_QUEUE, and if true return 1
1914 * to allow the passed struct se_cmd list of tasks to the front of the list.
1915 */
1916 if (cmd->sam_task_attr == MSG_HEAD_TAG) {
1917 pr_debug("Added HEAD_OF_QUEUE for CDB:"
1918 " 0x%02x, se_ordered_id: %u\n",
1919 cmd->t_task_cdb[0],
1920 cmd->se_ordered_id);
1921 return 1;
1922 } else if (cmd->sam_task_attr == MSG_ORDERED_TAG) {
1923 atomic_inc(&cmd->se_dev->dev_ordered_sync);
1924 smp_mb__after_atomic_inc();
1925
1926 pr_debug("Added ORDERED for CDB: 0x%02x to ordered"
1927 " list, se_ordered_id: %u\n",
1928 cmd->t_task_cdb[0],
1929 cmd->se_ordered_id);
1930 /*
1931 * Add ORDERED command to tail of execution queue if
1932 * no other older commands exist that need to be
1933 * completed first.
1934 */
1935 if (!atomic_read(&cmd->se_dev->simple_cmds))
1936 return 1;
1937 } else {
1938 /*
1939 * For SIMPLE and UNTAGGED Task Attribute commands
1940 */
1941 atomic_inc(&cmd->se_dev->simple_cmds);
1942 smp_mb__after_atomic_inc();
1943 }
1944 /*
1945 * Otherwise if one or more outstanding ORDERED task attribute exist,
1946 * add the dormant task(s) built for the passed struct se_cmd to the
1947 * execution queue and become in Active state for this struct se_device.
1948 */
1949 if (atomic_read(&cmd->se_dev->dev_ordered_sync) != 0) {
1950 /*
1951 * Otherwise, add cmd w/ tasks to delayed cmd queue that
1952 * will be drained upon completion of HEAD_OF_QUEUE task.
1953 */
1954 spin_lock(&cmd->se_dev->delayed_cmd_lock);
1955 cmd->se_cmd_flags |= SCF_DELAYED_CMD_FROM_SAM_ATTR;
1956 list_add_tail(&cmd->se_delayed_node,
1957 &cmd->se_dev->delayed_cmd_list);
1958 spin_unlock(&cmd->se_dev->delayed_cmd_lock);
1959
1960 pr_debug("Added CDB: 0x%02x Task Attr: 0x%02x to"
1961 " delayed CMD list, se_ordered_id: %u\n",
1962 cmd->t_task_cdb[0], cmd->sam_task_attr,
1963 cmd->se_ordered_id);
1964 /*
1965 * Return zero to let transport_execute_tasks() know
1966 * not to add the delayed tasks to the execution list.
1967 */
1968 return 0;
1969 }
1970 /*
1971 * Otherwise, no ORDERED task attributes exist..
1972 */
1973 return 1;
1974}
1975
1976/*
1977 * Called from fabric module context in transport_generic_new_cmd() and
1978 * transport_generic_process_write()
1979 */
1980static void transport_execute_tasks(struct se_cmd *cmd)
1981{
1982 int add_tasks;
1983 struct se_device *se_dev = cmd->se_dev;
1984 /*
1985 * Call transport_cmd_check_stop() to see if a fabric exception
1986 * has occurred that prevents execution.
1987 */
1988 if (!transport_cmd_check_stop(cmd, 0, TRANSPORT_PROCESSING)) {
1989 /*
1990 * Check for SAM Task Attribute emulation and HEAD_OF_QUEUE
1991 * attribute for the tasks of the received struct se_cmd CDB
1992 */
1993 add_tasks = transport_execute_task_attr(cmd);
1994 if (add_tasks) {
1995 __transport_execute_tasks(se_dev, cmd);
1996 return;
1997 }
1998 }
1999 __transport_execute_tasks(se_dev, NULL);
2000}
2001
2002static int __transport_execute_tasks(struct se_device *dev, struct se_cmd *new_cmd)
2003{
2004 int error;
2005 struct se_cmd *cmd = NULL;
2006 unsigned long flags;
2007
2008check_depth:
2009 spin_lock_irq(&dev->execute_task_lock);
2010 if (new_cmd != NULL)
2011 __target_add_to_execute_list(new_cmd);
2012
2013 if (list_empty(&dev->execute_list)) {
2014 spin_unlock_irq(&dev->execute_task_lock);
2015 return 0;
2016 }
2017 cmd = list_first_entry(&dev->execute_list, struct se_cmd, execute_list);
2018 __target_remove_from_execute_list(cmd);
2019 spin_unlock_irq(&dev->execute_task_lock);
2020
2021 spin_lock_irqsave(&cmd->t_state_lock, flags);
2022 cmd->transport_state |= CMD_T_BUSY;
2023 cmd->transport_state |= CMD_T_SENT;
2024
2025 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
2026 1709
2027 if (cmd->execute_cmd) 1710 if (cmd->execute_cmd)
2028 error = cmd->execute_cmd(cmd); 1711 error = cmd->execute_cmd(cmd);
2029 else {
2030 error = dev->transport->execute_cmd(cmd, cmd->t_data_sg,
2031 cmd->t_data_nents, cmd->data_direction);
2032 }
2033 1712
2034 if (error != 0) { 1713 if (error) {
2035 spin_lock_irqsave(&cmd->t_state_lock, flags); 1714 spin_lock_irq(&cmd->t_state_lock);
2036 cmd->transport_state &= ~CMD_T_BUSY; 1715 cmd->transport_state &= ~(CMD_T_BUSY|CMD_T_SENT);
2037 cmd->transport_state &= ~CMD_T_SENT; 1716 spin_unlock_irq(&cmd->t_state_lock);
2038 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
2039 1717
2040 transport_generic_request_failure(cmd); 1718 transport_generic_request_failure(cmd);
2041 } 1719 }
2042
2043 new_cmd = NULL;
2044 goto check_depth;
2045
2046 return 0;
2047} 1720}
2048 1721
2049static inline u32 transport_get_sectors_6( 1722void target_execute_cmd(struct se_cmd *cmd)
2050 unsigned char *cdb,
2051 struct se_cmd *cmd,
2052 int *ret)
2053{ 1723{
2054 struct se_device *dev = cmd->se_dev; 1724 struct se_device *dev = cmd->se_dev;
2055 1725
2056 /* 1726 /*
2057 * Assume TYPE_DISK for non struct se_device objects. 1727 * If the received CDB has aleady been aborted stop processing it here.
2058 * Use 8-bit sector value.
2059 */
2060 if (!dev)
2061 goto type_disk;
2062
2063 /*
2064 * Use 24-bit allocation length for TYPE_TAPE.
2065 */ 1728 */
2066 if (dev->transport->get_device_type(dev) == TYPE_TAPE) 1729 if (transport_check_aborted_status(cmd, 1))
2067 return (u32)(cdb[2] << 16) + (cdb[3] << 8) + cdb[4]; 1730 return;
2068
2069 /*
2070 * Everything else assume TYPE_DISK Sector CDB location.
2071 * Use 8-bit sector value. SBC-3 says:
2072 *
2073 * A TRANSFER LENGTH field set to zero specifies that 256
2074 * logical blocks shall be written. Any other value
2075 * specifies the number of logical blocks that shall be
2076 * written.
2077 */
2078type_disk:
2079 return cdb[4] ? : 256;
2080}
2081
2082static inline u32 transport_get_sectors_10(
2083 unsigned char *cdb,
2084 struct se_cmd *cmd,
2085 int *ret)
2086{
2087 struct se_device *dev = cmd->se_dev;
2088 1731
2089 /* 1732 /*
2090 * Assume TYPE_DISK for non struct se_device objects. 1733 * Determine if IOCTL context caller in requesting the stopping of this
2091 * Use 16-bit sector value. 1734 * command for LUN shutdown purposes.
2092 */ 1735 */
2093 if (!dev) 1736 spin_lock_irq(&cmd->t_state_lock);
2094 goto type_disk; 1737 if (cmd->transport_state & CMD_T_LUN_STOP) {
1738 pr_debug("%s:%d CMD_T_LUN_STOP for ITT: 0x%08x\n",
1739 __func__, __LINE__, cmd->se_tfo->get_task_tag(cmd));
2095 1740
2096 /* 1741 cmd->transport_state &= ~CMD_T_ACTIVE;
2097 * XXX_10 is not defined in SSC, throw an exception 1742 spin_unlock_irq(&cmd->t_state_lock);
2098 */ 1743 complete(&cmd->transport_lun_stop_comp);
2099 if (dev->transport->get_device_type(dev) == TYPE_TAPE) { 1744 return;
2100 *ret = -EINVAL;
2101 return 0;
2102 } 1745 }
2103
2104 /* 1746 /*
2105 * Everything else assume TYPE_DISK Sector CDB location. 1747 * Determine if frontend context caller is requesting the stopping of
2106 * Use 16-bit sector value. 1748 * this command for frontend exceptions.
2107 */
2108type_disk:
2109 return (u32)(cdb[7] << 8) + cdb[8];
2110}
2111
2112static inline u32 transport_get_sectors_12(
2113 unsigned char *cdb,
2114 struct se_cmd *cmd,
2115 int *ret)
2116{
2117 struct se_device *dev = cmd->se_dev;
2118
2119 /*
2120 * Assume TYPE_DISK for non struct se_device objects.
2121 * Use 32-bit sector value.
2122 */ 1749 */
2123 if (!dev) 1750 if (cmd->transport_state & CMD_T_STOP) {
2124 goto type_disk; 1751 pr_debug("%s:%d CMD_T_STOP for ITT: 0x%08x\n",
1752 __func__, __LINE__,
1753 cmd->se_tfo->get_task_tag(cmd));
2125 1754
2126 /* 1755 spin_unlock_irq(&cmd->t_state_lock);
2127 * XXX_12 is not defined in SSC, throw an exception 1756 complete(&cmd->t_transport_stop_comp);
2128 */ 1757 return;
2129 if (dev->transport->get_device_type(dev) == TYPE_TAPE) {
2130 *ret = -EINVAL;
2131 return 0;
2132 } 1758 }
2133 1759
2134 /* 1760 cmd->t_state = TRANSPORT_PROCESSING;
2135 * Everything else assume TYPE_DISK Sector CDB location. 1761 spin_unlock_irq(&cmd->t_state_lock);
2136 * Use 32-bit sector value.
2137 */
2138type_disk:
2139 return (u32)(cdb[6] << 24) + (cdb[7] << 16) + (cdb[8] << 8) + cdb[9];
2140}
2141
2142static inline u32 transport_get_sectors_16(
2143 unsigned char *cdb,
2144 struct se_cmd *cmd,
2145 int *ret)
2146{
2147 struct se_device *dev = cmd->se_dev;
2148
2149 /*
2150 * Assume TYPE_DISK for non struct se_device objects.
2151 * Use 32-bit sector value.
2152 */
2153 if (!dev)
2154 goto type_disk;
2155 1762
2156 /* 1763 if (dev->dev_task_attr_type != SAM_TASK_ATTR_EMULATED)
2157 * Use 24-bit allocation length for TYPE_TAPE. 1764 goto execute;
2158 */
2159 if (dev->transport->get_device_type(dev) == TYPE_TAPE)
2160 return (u32)(cdb[12] << 16) + (cdb[13] << 8) + cdb[14];
2161
2162type_disk:
2163 return (u32)(cdb[10] << 24) + (cdb[11] << 16) +
2164 (cdb[12] << 8) + cdb[13];
2165}
2166 1765
2167/*
2168 * Used for VARIABLE_LENGTH_CDB WRITE_32 and READ_32 variants
2169 */
2170static inline u32 transport_get_sectors_32(
2171 unsigned char *cdb,
2172 struct se_cmd *cmd,
2173 int *ret)
2174{
2175 /* 1766 /*
2176 * Assume TYPE_DISK for non struct se_device objects. 1767 * Check for the existence of HEAD_OF_QUEUE, and if true return 1
2177 * Use 32-bit sector value. 1768 * to allow the passed struct se_cmd list of tasks to the front of the list.
2178 */ 1769 */
2179 return (u32)(cdb[28] << 24) + (cdb[29] << 16) + 1770 switch (cmd->sam_task_attr) {
2180 (cdb[30] << 8) + cdb[31]; 1771 case MSG_HEAD_TAG:
1772 pr_debug("Added HEAD_OF_QUEUE for CDB: 0x%02x, "
1773 "se_ordered_id: %u\n",
1774 cmd->t_task_cdb[0], cmd->se_ordered_id);
1775 goto execute;
1776 case MSG_ORDERED_TAG:
1777 atomic_inc(&dev->dev_ordered_sync);
1778 smp_mb__after_atomic_inc();
2181 1779
2182} 1780 pr_debug("Added ORDERED for CDB: 0x%02x to ordered list, "
1781 " se_ordered_id: %u\n",
1782 cmd->t_task_cdb[0], cmd->se_ordered_id);
2183 1783
2184static inline u32 transport_get_size( 1784 /*
2185 u32 sectors, 1785 * Execute an ORDERED command if no other older commands
2186 unsigned char *cdb, 1786 * exist that need to be completed first.
2187 struct se_cmd *cmd) 1787 */
2188{ 1788 if (!atomic_read(&dev->simple_cmds))
2189 struct se_device *dev = cmd->se_dev; 1789 goto execute;
2190 1790 break;
2191 if (dev->transport->get_device_type(dev) == TYPE_TAPE) { 1791 default:
2192 if (cdb[1] & 1) { /* sectors */ 1792 /*
2193 return dev->se_sub_dev->se_dev_attrib.block_size * sectors; 1793 * For SIMPLE and UNTAGGED Task Attribute commands
2194 } else /* bytes */ 1794 */
2195 return sectors; 1795 atomic_inc(&dev->simple_cmds);
1796 smp_mb__after_atomic_inc();
1797 break;
2196 } 1798 }
2197 1799
2198 pr_debug("Returning block_size: %u, sectors: %u == %u for" 1800 if (atomic_read(&dev->dev_ordered_sync) != 0) {
2199 " %s object\n", dev->se_sub_dev->se_dev_attrib.block_size, 1801 spin_lock(&dev->delayed_cmd_lock);
2200 sectors, dev->se_sub_dev->se_dev_attrib.block_size * sectors, 1802 list_add_tail(&cmd->se_delayed_node, &dev->delayed_cmd_list);
2201 dev->transport->name); 1803 spin_unlock(&dev->delayed_cmd_lock);
2202
2203 return dev->se_sub_dev->se_dev_attrib.block_size * sectors;
2204}
2205 1804
2206static void transport_xor_callback(struct se_cmd *cmd) 1805 pr_debug("Added CDB: 0x%02x Task Attr: 0x%02x to"
2207{ 1806 " delayed CMD list, se_ordered_id: %u\n",
2208 unsigned char *buf, *addr; 1807 cmd->t_task_cdb[0], cmd->sam_task_attr,
2209 struct scatterlist *sg; 1808 cmd->se_ordered_id);
2210 unsigned int offset;
2211 int i;
2212 int count;
2213 /*
2214 * From sbc3r22.pdf section 5.48 XDWRITEREAD (10) command
2215 *
2216 * 1) read the specified logical block(s);
2217 * 2) transfer logical blocks from the data-out buffer;
2218 * 3) XOR the logical blocks transferred from the data-out buffer with
2219 * the logical blocks read, storing the resulting XOR data in a buffer;
2220 * 4) if the DISABLE WRITE bit is set to zero, then write the logical
2221 * blocks transferred from the data-out buffer; and
2222 * 5) transfer the resulting XOR data to the data-in buffer.
2223 */
2224 buf = kmalloc(cmd->data_length, GFP_KERNEL);
2225 if (!buf) {
2226 pr_err("Unable to allocate xor_callback buf\n");
2227 return; 1809 return;
2228 } 1810 }
2229 /*
2230 * Copy the scatterlist WRITE buffer located at cmd->t_data_sg
2231 * into the locally allocated *buf
2232 */
2233 sg_copy_to_buffer(cmd->t_data_sg,
2234 cmd->t_data_nents,
2235 buf,
2236 cmd->data_length);
2237 1811
1812execute:
2238 /* 1813 /*
2239 * Now perform the XOR against the BIDI read memory located at 1814 * Otherwise, no ORDERED task attributes exist..
2240 * cmd->t_mem_bidi_list
2241 */ 1815 */
2242 1816 __target_execute_cmd(cmd);
2243 offset = 0;
2244 for_each_sg(cmd->t_bidi_data_sg, sg, cmd->t_bidi_data_nents, count) {
2245 addr = kmap_atomic(sg_page(sg));
2246 if (!addr)
2247 goto out;
2248
2249 for (i = 0; i < sg->length; i++)
2250 *(addr + sg->offset + i) ^= *(buf + offset + i);
2251
2252 offset += sg->length;
2253 kunmap_atomic(addr);
2254 }
2255
2256out:
2257 kfree(buf);
2258} 1817}
1818EXPORT_SYMBOL(target_execute_cmd);
2259 1819
2260/* 1820/*
2261 * Used to obtain Sense Data from underlying Linux/SCSI struct scsi_cmnd 1821 * Used to obtain Sense Data from underlying Linux/SCSI struct scsi_cmnd
@@ -2312,737 +1872,31 @@ out:
2312 return -1; 1872 return -1;
2313} 1873}
2314 1874
2315static inline long long transport_dev_end_lba(struct se_device *dev) 1875/*
2316{ 1876 * Process all commands up to the last received ORDERED task attribute which
2317 return dev->transport->get_blocks(dev) + 1; 1877 * requires another blocking boundary
2318}
2319
2320static int transport_cmd_get_valid_sectors(struct se_cmd *cmd)
2321{
2322 struct se_device *dev = cmd->se_dev;
2323 u32 sectors;
2324
2325 if (dev->transport->get_device_type(dev) != TYPE_DISK)
2326 return 0;
2327
2328 sectors = (cmd->data_length / dev->se_sub_dev->se_dev_attrib.block_size);
2329
2330 if ((cmd->t_task_lba + sectors) > transport_dev_end_lba(dev)) {
2331 pr_err("LBA: %llu Sectors: %u exceeds"
2332 " transport_dev_end_lba(): %llu\n",
2333 cmd->t_task_lba, sectors,
2334 transport_dev_end_lba(dev));
2335 return -EINVAL;
2336 }
2337
2338 return 0;
2339}
2340
2341static int target_check_write_same_discard(unsigned char *flags, struct se_device *dev)
2342{
2343 /*
2344 * Determine if the received WRITE_SAME is used to for direct
2345 * passthrough into Linux/SCSI with struct request via TCM/pSCSI
2346 * or we are signaling the use of internal WRITE_SAME + UNMAP=1
2347 * emulation for -> Linux/BLOCK disbard with TCM/IBLOCK code.
2348 */
2349 int passthrough = (dev->transport->transport_type ==
2350 TRANSPORT_PLUGIN_PHBA_PDEV);
2351
2352 if (!passthrough) {
2353 if ((flags[0] & 0x04) || (flags[0] & 0x02)) {
2354 pr_err("WRITE_SAME PBDATA and LBDATA"
2355 " bits not supported for Block Discard"
2356 " Emulation\n");
2357 return -ENOSYS;
2358 }
2359 /*
2360 * Currently for the emulated case we only accept
2361 * tpws with the UNMAP=1 bit set.
2362 */
2363 if (!(flags[0] & 0x08)) {
2364 pr_err("WRITE_SAME w/o UNMAP bit not"
2365 " supported for Block Discard Emulation\n");
2366 return -ENOSYS;
2367 }
2368 }
2369
2370 return 0;
2371}
2372
2373/* transport_generic_cmd_sequencer():
2374 *
2375 * Generic Command Sequencer that should work for most DAS transport
2376 * drivers.
2377 *
2378 * Called from target_setup_cmd_from_cdb() in the $FABRIC_MOD
2379 * RX Thread.
2380 *
2381 * FIXME: Need to support other SCSI OPCODES where as well.
2382 */ 1878 */
2383static int transport_generic_cmd_sequencer( 1879static void target_restart_delayed_cmds(struct se_device *dev)
2384 struct se_cmd *cmd,
2385 unsigned char *cdb)
2386{ 1880{
2387 struct se_device *dev = cmd->se_dev; 1881 for (;;) {
2388 struct se_subsystem_dev *su_dev = dev->se_sub_dev; 1882 struct se_cmd *cmd;
2389 int ret = 0, sector_ret = 0, passthrough;
2390 u32 sectors = 0, size = 0, pr_reg_type = 0;
2391 u16 service_action;
2392 u8 alua_ascq = 0;
2393 /*
2394 * Check for an existing UNIT ATTENTION condition
2395 */
2396 if (core_scsi3_ua_check(cmd, cdb) < 0) {
2397 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
2398 cmd->scsi_sense_reason = TCM_CHECK_CONDITION_UNIT_ATTENTION;
2399 return -EINVAL;
2400 }
2401 /*
2402 * Check status of Asymmetric Logical Unit Assignment port
2403 */
2404 ret = su_dev->t10_alua.alua_state_check(cmd, cdb, &alua_ascq);
2405 if (ret != 0) {
2406 /*
2407 * Set SCSI additional sense code (ASC) to 'LUN Not Accessible';
2408 * The ALUA additional sense code qualifier (ASCQ) is determined
2409 * by the ALUA primary or secondary access state..
2410 */
2411 if (ret > 0) {
2412 pr_debug("[%s]: ALUA TG Port not available,"
2413 " SenseKey: NOT_READY, ASC/ASCQ: 0x04/0x%02x\n",
2414 cmd->se_tfo->get_fabric_name(), alua_ascq);
2415 1883
2416 transport_set_sense_codes(cmd, 0x04, alua_ascq); 1884 spin_lock(&dev->delayed_cmd_lock);
2417 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 1885 if (list_empty(&dev->delayed_cmd_list)) {
2418 cmd->scsi_sense_reason = TCM_CHECK_CONDITION_NOT_READY; 1886 spin_unlock(&dev->delayed_cmd_lock);
2419 return -EINVAL;
2420 }
2421 goto out_invalid_cdb_field;
2422 }
2423 /*
2424 * Check status for SPC-3 Persistent Reservations
2425 */
2426 if (su_dev->t10_pr.pr_ops.t10_reservation_check(cmd, &pr_reg_type) != 0) {
2427 if (su_dev->t10_pr.pr_ops.t10_seq_non_holder(
2428 cmd, cdb, pr_reg_type) != 0) {
2429 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
2430 cmd->se_cmd_flags |= SCF_SCSI_RESERVATION_CONFLICT;
2431 cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
2432 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
2433 return -EBUSY;
2434 }
2435 /*
2436 * This means the CDB is allowed for the SCSI Initiator port
2437 * when said port is *NOT* holding the legacy SPC-2 or
2438 * SPC-3 Persistent Reservation.
2439 */
2440 }
2441
2442 /*
2443 * If we operate in passthrough mode we skip most CDB emulation and
2444 * instead hand the commands down to the physical SCSI device.
2445 */
2446 passthrough =
2447 (dev->transport->transport_type == TRANSPORT_PLUGIN_PHBA_PDEV);
2448
2449 switch (cdb[0]) {
2450 case READ_6:
2451 sectors = transport_get_sectors_6(cdb, cmd, &sector_ret);
2452 if (sector_ret)
2453 goto out_unsupported_cdb;
2454 size = transport_get_size(sectors, cdb, cmd);
2455 cmd->t_task_lba = transport_lba_21(cdb);
2456 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2457 break;
2458 case READ_10:
2459 sectors = transport_get_sectors_10(cdb, cmd, &sector_ret);
2460 if (sector_ret)
2461 goto out_unsupported_cdb;
2462 size = transport_get_size(sectors, cdb, cmd);
2463 cmd->t_task_lba = transport_lba_32(cdb);
2464 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2465 break;
2466 case READ_12:
2467 sectors = transport_get_sectors_12(cdb, cmd, &sector_ret);
2468 if (sector_ret)
2469 goto out_unsupported_cdb;
2470 size = transport_get_size(sectors, cdb, cmd);
2471 cmd->t_task_lba = transport_lba_32(cdb);
2472 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2473 break;
2474 case READ_16:
2475 sectors = transport_get_sectors_16(cdb, cmd, &sector_ret);
2476 if (sector_ret)
2477 goto out_unsupported_cdb;
2478 size = transport_get_size(sectors, cdb, cmd);
2479 cmd->t_task_lba = transport_lba_64(cdb);
2480 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2481 break;
2482 case WRITE_6:
2483 sectors = transport_get_sectors_6(cdb, cmd, &sector_ret);
2484 if (sector_ret)
2485 goto out_unsupported_cdb;
2486 size = transport_get_size(sectors, cdb, cmd);
2487 cmd->t_task_lba = transport_lba_21(cdb);
2488 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2489 break;
2490 case WRITE_10:
2491 case WRITE_VERIFY:
2492 sectors = transport_get_sectors_10(cdb, cmd, &sector_ret);
2493 if (sector_ret)
2494 goto out_unsupported_cdb;
2495 size = transport_get_size(sectors, cdb, cmd);
2496 cmd->t_task_lba = transport_lba_32(cdb);
2497 if (cdb[1] & 0x8)
2498 cmd->se_cmd_flags |= SCF_FUA;
2499 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2500 break;
2501 case WRITE_12:
2502 sectors = transport_get_sectors_12(cdb, cmd, &sector_ret);
2503 if (sector_ret)
2504 goto out_unsupported_cdb;
2505 size = transport_get_size(sectors, cdb, cmd);
2506 cmd->t_task_lba = transport_lba_32(cdb);
2507 if (cdb[1] & 0x8)
2508 cmd->se_cmd_flags |= SCF_FUA;
2509 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2510 break;
2511 case WRITE_16:
2512 sectors = transport_get_sectors_16(cdb, cmd, &sector_ret);
2513 if (sector_ret)
2514 goto out_unsupported_cdb;
2515 size = transport_get_size(sectors, cdb, cmd);
2516 cmd->t_task_lba = transport_lba_64(cdb);
2517 if (cdb[1] & 0x8)
2518 cmd->se_cmd_flags |= SCF_FUA;
2519 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2520 break;
2521 case XDWRITEREAD_10:
2522 if ((cmd->data_direction != DMA_TO_DEVICE) ||
2523 !(cmd->se_cmd_flags & SCF_BIDI))
2524 goto out_invalid_cdb_field;
2525 sectors = transport_get_sectors_10(cdb, cmd, &sector_ret);
2526 if (sector_ret)
2527 goto out_unsupported_cdb;
2528 size = transport_get_size(sectors, cdb, cmd);
2529 cmd->t_task_lba = transport_lba_32(cdb);
2530 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2531
2532 /*
2533 * Do now allow BIDI commands for passthrough mode.
2534 */
2535 if (passthrough)
2536 goto out_unsupported_cdb;
2537
2538 /*
2539 * Setup BIDI XOR callback to be run after I/O completion.
2540 */
2541 cmd->transport_complete_callback = &transport_xor_callback;
2542 if (cdb[1] & 0x8)
2543 cmd->se_cmd_flags |= SCF_FUA;
2544 break;
2545 case VARIABLE_LENGTH_CMD:
2546 service_action = get_unaligned_be16(&cdb[8]);
2547 switch (service_action) {
2548 case XDWRITEREAD_32:
2549 sectors = transport_get_sectors_32(cdb, cmd, &sector_ret);
2550 if (sector_ret)
2551 goto out_unsupported_cdb;
2552 size = transport_get_size(sectors, cdb, cmd);
2553 /*
2554 * Use WRITE_32 and READ_32 opcodes for the emulated
2555 * XDWRITE_READ_32 logic.
2556 */
2557 cmd->t_task_lba = transport_lba_64_ext(cdb);
2558 cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
2559
2560 /*
2561 * Do now allow BIDI commands for passthrough mode.
2562 */
2563 if (passthrough)
2564 goto out_unsupported_cdb;
2565
2566 /*
2567 * Setup BIDI XOR callback to be run during after I/O
2568 * completion.
2569 */
2570 cmd->transport_complete_callback = &transport_xor_callback;
2571 if (cdb[1] & 0x8)
2572 cmd->se_cmd_flags |= SCF_FUA;
2573 break;
2574 case WRITE_SAME_32:
2575 sectors = transport_get_sectors_32(cdb, cmd, &sector_ret);
2576 if (sector_ret)
2577 goto out_unsupported_cdb;
2578
2579 if (sectors)
2580 size = transport_get_size(1, cdb, cmd);
2581 else {
2582 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not"
2583 " supported\n");
2584 goto out_invalid_cdb_field;
2585 }
2586
2587 cmd->t_task_lba = get_unaligned_be64(&cdb[12]);
2588 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2589
2590 if (target_check_write_same_discard(&cdb[10], dev) < 0)
2591 goto out_unsupported_cdb;
2592 if (!passthrough)
2593 cmd->execute_cmd = target_emulate_write_same;
2594 break;
2595 default:
2596 pr_err("VARIABLE_LENGTH_CMD service action"
2597 " 0x%04x not supported\n", service_action);
2598 goto out_unsupported_cdb;
2599 }
2600 break;
2601 case MAINTENANCE_IN:
2602 if (dev->transport->get_device_type(dev) != TYPE_ROM) {
2603 /* MAINTENANCE_IN from SCC-2 */
2604 /*
2605 * Check for emulated MI_REPORT_TARGET_PGS.
2606 */
2607 if ((cdb[1] & 0x1f) == MI_REPORT_TARGET_PGS &&
2608 su_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) {
2609 cmd->execute_cmd =
2610 target_emulate_report_target_port_groups;
2611 }
2612 size = (cdb[6] << 24) | (cdb[7] << 16) |
2613 (cdb[8] << 8) | cdb[9];
2614 } else {
2615 /* GPCMD_SEND_KEY from multi media commands */
2616 size = (cdb[8] << 8) + cdb[9];
2617 }
2618 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2619 break;
2620 case MODE_SELECT:
2621 size = cdb[4];
2622 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2623 break;
2624 case MODE_SELECT_10:
2625 size = (cdb[7] << 8) + cdb[8];
2626 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2627 break;
2628 case MODE_SENSE:
2629 size = cdb[4];
2630 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2631 if (!passthrough)
2632 cmd->execute_cmd = target_emulate_modesense;
2633 break;
2634 case MODE_SENSE_10:
2635 size = (cdb[7] << 8) + cdb[8];
2636 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2637 if (!passthrough)
2638 cmd->execute_cmd = target_emulate_modesense;
2639 break;
2640 case GPCMD_READ_BUFFER_CAPACITY:
2641 case GPCMD_SEND_OPC:
2642 case LOG_SELECT:
2643 case LOG_SENSE:
2644 size = (cdb[7] << 8) + cdb[8];
2645 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2646 break;
2647 case READ_BLOCK_LIMITS:
2648 size = READ_BLOCK_LEN;
2649 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2650 break;
2651 case GPCMD_GET_CONFIGURATION:
2652 case GPCMD_READ_FORMAT_CAPACITIES:
2653 case GPCMD_READ_DISC_INFO:
2654 case GPCMD_READ_TRACK_RZONE_INFO:
2655 size = (cdb[7] << 8) + cdb[8];
2656 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2657 break;
2658 case PERSISTENT_RESERVE_IN:
2659 if (su_dev->t10_pr.res_type == SPC3_PERSISTENT_RESERVATIONS)
2660 cmd->execute_cmd = target_scsi3_emulate_pr_in;
2661 size = (cdb[7] << 8) + cdb[8];
2662 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2663 break;
2664 case PERSISTENT_RESERVE_OUT:
2665 if (su_dev->t10_pr.res_type == SPC3_PERSISTENT_RESERVATIONS)
2666 cmd->execute_cmd = target_scsi3_emulate_pr_out;
2667 size = (cdb[7] << 8) + cdb[8];
2668 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2669 break;
2670 case GPCMD_MECHANISM_STATUS:
2671 case GPCMD_READ_DVD_STRUCTURE:
2672 size = (cdb[8] << 8) + cdb[9];
2673 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2674 break;
2675 case READ_POSITION:
2676 size = READ_POSITION_LEN;
2677 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2678 break;
2679 case MAINTENANCE_OUT:
2680 if (dev->transport->get_device_type(dev) != TYPE_ROM) {
2681 /* MAINTENANCE_OUT from SCC-2
2682 *
2683 * Check for emulated MO_SET_TARGET_PGS.
2684 */
2685 if (cdb[1] == MO_SET_TARGET_PGS &&
2686 su_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) {
2687 cmd->execute_cmd =
2688 target_emulate_set_target_port_groups;
2689 }
2690
2691 size = (cdb[6] << 24) | (cdb[7] << 16) |
2692 (cdb[8] << 8) | cdb[9];
2693 } else {
2694 /* GPCMD_REPORT_KEY from multi media commands */
2695 size = (cdb[8] << 8) + cdb[9];
2696 }
2697 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2698 break;
2699 case INQUIRY:
2700 size = (cdb[3] << 8) + cdb[4];
2701 /*
2702 * Do implict HEAD_OF_QUEUE processing for INQUIRY.
2703 * See spc4r17 section 5.3
2704 */
2705 if (cmd->se_dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
2706 cmd->sam_task_attr = MSG_HEAD_TAG;
2707 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2708 if (!passthrough)
2709 cmd->execute_cmd = target_emulate_inquiry;
2710 break;
2711 case READ_BUFFER:
2712 size = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8];
2713 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2714 break;
2715 case READ_CAPACITY:
2716 size = READ_CAP_LEN;
2717 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2718 if (!passthrough)
2719 cmd->execute_cmd = target_emulate_readcapacity;
2720 break;
2721 case READ_MEDIA_SERIAL_NUMBER:
2722 case SECURITY_PROTOCOL_IN:
2723 case SECURITY_PROTOCOL_OUT:
2724 size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
2725 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2726 break;
2727 case SERVICE_ACTION_IN:
2728 switch (cmd->t_task_cdb[1] & 0x1f) {
2729 case SAI_READ_CAPACITY_16:
2730 if (!passthrough)
2731 cmd->execute_cmd =
2732 target_emulate_readcapacity_16;
2733 break;
2734 default:
2735 if (passthrough)
2736 break;
2737
2738 pr_err("Unsupported SA: 0x%02x\n",
2739 cmd->t_task_cdb[1] & 0x1f);
2740 goto out_invalid_cdb_field;
2741 }
2742 /*FALLTHROUGH*/
2743 case ACCESS_CONTROL_IN:
2744 case ACCESS_CONTROL_OUT:
2745 case EXTENDED_COPY:
2746 case READ_ATTRIBUTE:
2747 case RECEIVE_COPY_RESULTS:
2748 case WRITE_ATTRIBUTE:
2749 size = (cdb[10] << 24) | (cdb[11] << 16) |
2750 (cdb[12] << 8) | cdb[13];
2751 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2752 break;
2753 case RECEIVE_DIAGNOSTIC:
2754 case SEND_DIAGNOSTIC:
2755 size = (cdb[3] << 8) | cdb[4];
2756 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2757 break;
2758/* #warning FIXME: Figure out correct GPCMD_READ_CD blocksize. */
2759#if 0
2760 case GPCMD_READ_CD:
2761 sectors = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8];
2762 size = (2336 * sectors);
2763 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2764 break;
2765#endif
2766 case READ_TOC:
2767 size = cdb[8];
2768 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2769 break;
2770 case REQUEST_SENSE:
2771 size = cdb[4];
2772 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2773 if (!passthrough)
2774 cmd->execute_cmd = target_emulate_request_sense;
2775 break;
2776 case READ_ELEMENT_STATUS:
2777 size = 65536 * cdb[7] + 256 * cdb[8] + cdb[9];
2778 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2779 break;
2780 case WRITE_BUFFER:
2781 size = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8];
2782 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2783 break;
2784 case RESERVE:
2785 case RESERVE_10:
2786 /*
2787 * The SPC-2 RESERVE does not contain a size in the SCSI CDB.
2788 * Assume the passthrough or $FABRIC_MOD will tell us about it.
2789 */
2790 if (cdb[0] == RESERVE_10)
2791 size = (cdb[7] << 8) | cdb[8];
2792 else
2793 size = cmd->data_length;
2794
2795 /*
2796 * Setup the legacy emulated handler for SPC-2 and
2797 * >= SPC-3 compatible reservation handling (CRH=1)
2798 * Otherwise, we assume the underlying SCSI logic is
2799 * is running in SPC_PASSTHROUGH, and wants reservations
2800 * emulation disabled.
2801 */
2802 if (su_dev->t10_pr.res_type != SPC_PASSTHROUGH)
2803 cmd->execute_cmd = target_scsi2_reservation_reserve;
2804 cmd->se_cmd_flags |= SCF_SCSI_NON_DATA_CDB;
2805 break;
2806 case RELEASE:
2807 case RELEASE_10:
2808 /*
2809 * The SPC-2 RELEASE does not contain a size in the SCSI CDB.
2810 * Assume the passthrough or $FABRIC_MOD will tell us about it.
2811 */
2812 if (cdb[0] == RELEASE_10)
2813 size = (cdb[7] << 8) | cdb[8];
2814 else
2815 size = cmd->data_length;
2816
2817 if (su_dev->t10_pr.res_type != SPC_PASSTHROUGH)
2818 cmd->execute_cmd = target_scsi2_reservation_release;
2819 cmd->se_cmd_flags |= SCF_SCSI_NON_DATA_CDB;
2820 break;
2821 case SYNCHRONIZE_CACHE:
2822 case SYNCHRONIZE_CACHE_16:
2823 /*
2824 * Extract LBA and range to be flushed for emulated SYNCHRONIZE_CACHE
2825 */
2826 if (cdb[0] == SYNCHRONIZE_CACHE) {
2827 sectors = transport_get_sectors_10(cdb, cmd, &sector_ret);
2828 cmd->t_task_lba = transport_lba_32(cdb);
2829 } else {
2830 sectors = transport_get_sectors_16(cdb, cmd, &sector_ret);
2831 cmd->t_task_lba = transport_lba_64(cdb);
2832 }
2833 if (sector_ret)
2834 goto out_unsupported_cdb;
2835
2836 size = transport_get_size(sectors, cdb, cmd);
2837 cmd->se_cmd_flags |= SCF_SCSI_NON_DATA_CDB;
2838
2839 if (passthrough)
2840 break; 1887 break;
2841
2842 /*
2843 * Check to ensure that LBA + Range does not exceed past end of
2844 * device for IBLOCK and FILEIO ->do_sync_cache() backend calls
2845 */
2846 if ((cmd->t_task_lba != 0) || (sectors != 0)) {
2847 if (transport_cmd_get_valid_sectors(cmd) < 0)
2848 goto out_invalid_cdb_field;
2849 }
2850 cmd->execute_cmd = target_emulate_synchronize_cache;
2851 break;
2852 case UNMAP:
2853 size = get_unaligned_be16(&cdb[7]);
2854 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2855 if (!passthrough)
2856 cmd->execute_cmd = target_emulate_unmap;
2857 break;
2858 case WRITE_SAME_16:
2859 sectors = transport_get_sectors_16(cdb, cmd, &sector_ret);
2860 if (sector_ret)
2861 goto out_unsupported_cdb;
2862
2863 if (sectors)
2864 size = transport_get_size(1, cdb, cmd);
2865 else {
2866 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n");
2867 goto out_invalid_cdb_field;
2868 } 1888 }
2869 1889
2870 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); 1890 cmd = list_entry(dev->delayed_cmd_list.next,
2871 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB; 1891 struct se_cmd, se_delayed_node);
2872 1892 list_del(&cmd->se_delayed_node);
2873 if (target_check_write_same_discard(&cdb[1], dev) < 0) 1893 spin_unlock(&dev->delayed_cmd_lock);
2874 goto out_unsupported_cdb;
2875 if (!passthrough)
2876 cmd->execute_cmd = target_emulate_write_same;
2877 break;
2878 case WRITE_SAME:
2879 sectors = transport_get_sectors_10(cdb, cmd, &sector_ret);
2880 if (sector_ret)
2881 goto out_unsupported_cdb;
2882 1894
2883 if (sectors) 1895 __target_execute_cmd(cmd);
2884 size = transport_get_size(1, cdb, cmd);
2885 else {
2886 pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n");
2887 goto out_invalid_cdb_field;
2888 }
2889 1896
2890 cmd->t_task_lba = get_unaligned_be32(&cdb[2]); 1897 if (cmd->sam_task_attr == MSG_ORDERED_TAG)
2891 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2892 /*
2893 * Follow sbcr26 with WRITE_SAME (10) and check for the existence
2894 * of byte 1 bit 3 UNMAP instead of original reserved field
2895 */
2896 if (target_check_write_same_discard(&cdb[1], dev) < 0)
2897 goto out_unsupported_cdb;
2898 if (!passthrough)
2899 cmd->execute_cmd = target_emulate_write_same;
2900 break;
2901 case ALLOW_MEDIUM_REMOVAL:
2902 case ERASE:
2903 case REZERO_UNIT:
2904 case SEEK_10:
2905 case SPACE:
2906 case START_STOP:
2907 case TEST_UNIT_READY:
2908 case VERIFY:
2909 case WRITE_FILEMARKS:
2910 cmd->se_cmd_flags |= SCF_SCSI_NON_DATA_CDB;
2911 if (!passthrough)
2912 cmd->execute_cmd = target_emulate_noop;
2913 break;
2914 case GPCMD_CLOSE_TRACK:
2915 case INITIALIZE_ELEMENT_STATUS:
2916 case GPCMD_LOAD_UNLOAD:
2917 case GPCMD_SET_SPEED:
2918 case MOVE_MEDIUM:
2919 cmd->se_cmd_flags |= SCF_SCSI_NON_DATA_CDB;
2920 break;
2921 case REPORT_LUNS:
2922 cmd->execute_cmd = target_report_luns;
2923 size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
2924 /*
2925 * Do implict HEAD_OF_QUEUE processing for REPORT_LUNS
2926 * See spc4r17 section 5.3
2927 */
2928 if (cmd->se_dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED)
2929 cmd->sam_task_attr = MSG_HEAD_TAG;
2930 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2931 break;
2932 case GET_EVENT_STATUS_NOTIFICATION:
2933 size = (cdb[7] << 8) | cdb[8];
2934 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2935 break;
2936 case ATA_16:
2937 /* Only support ATA passthrough to pSCSI backends.. */
2938 if (!passthrough)
2939 goto out_unsupported_cdb;
2940
2941 /* T_LENGTH */
2942 switch (cdb[2] & 0x3) {
2943 case 0x0:
2944 sectors = 0;
2945 break;
2946 case 0x1:
2947 sectors = (((cdb[1] & 0x1) ? cdb[3] : 0) << 8) | cdb[4];
2948 break;
2949 case 0x2:
2950 sectors = (((cdb[1] & 0x1) ? cdb[5] : 0) << 8) | cdb[6];
2951 break; 1898 break;
2952 case 0x3:
2953 pr_err("T_LENGTH=0x3 not supported for ATA_16\n");
2954 goto out_invalid_cdb_field;
2955 }
2956
2957 /* BYTE_BLOCK */
2958 if (cdb[2] & 0x4) {
2959 /* BLOCK T_TYPE: 512 or sector */
2960 size = sectors * ((cdb[2] & 0x10) ?
2961 dev->se_sub_dev->se_dev_attrib.block_size : 512);
2962 } else {
2963 /* BYTE */
2964 size = sectors;
2965 }
2966 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2967 break;
2968 default:
2969 pr_warn("TARGET_CORE[%s]: Unsupported SCSI Opcode"
2970 " 0x%02x, sending CHECK_CONDITION.\n",
2971 cmd->se_tfo->get_fabric_name(), cdb[0]);
2972 goto out_unsupported_cdb;
2973 }
2974
2975 if (cmd->unknown_data_length)
2976 cmd->data_length = size;
2977
2978 if (size != cmd->data_length) {
2979 pr_warn("TARGET_CORE[%s]: Expected Transfer Length:"
2980 " %u does not match SCSI CDB Length: %u for SAM Opcode:"
2981 " 0x%02x\n", cmd->se_tfo->get_fabric_name(),
2982 cmd->data_length, size, cdb[0]);
2983
2984 cmd->cmd_spdtl = size;
2985
2986 if (cmd->data_direction == DMA_TO_DEVICE) {
2987 pr_err("Rejecting underflow/overflow"
2988 " WRITE data\n");
2989 goto out_invalid_cdb_field;
2990 }
2991 /*
2992 * Reject READ_* or WRITE_* with overflow/underflow for
2993 * type SCF_SCSI_DATA_SG_IO_CDB.
2994 */
2995 if (!ret && (dev->se_sub_dev->se_dev_attrib.block_size != 512)) {
2996 pr_err("Failing OVERFLOW/UNDERFLOW for LBA op"
2997 " CDB on non 512-byte sector setup subsystem"
2998 " plugin: %s\n", dev->transport->name);
2999 /* Returns CHECK_CONDITION + INVALID_CDB_FIELD */
3000 goto out_invalid_cdb_field;
3001 }
3002
3003 if (size > cmd->data_length) {
3004 cmd->se_cmd_flags |= SCF_OVERFLOW_BIT;
3005 cmd->residual_count = (size - cmd->data_length);
3006 } else {
3007 cmd->se_cmd_flags |= SCF_UNDERFLOW_BIT;
3008 cmd->residual_count = (cmd->data_length - size);
3009 }
3010 cmd->data_length = size;
3011 } 1899 }
3012
3013 if (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) {
3014 if (sectors > su_dev->se_dev_attrib.fabric_max_sectors) {
3015 printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
3016 " big sectors %u exceeds fabric_max_sectors:"
3017 " %u\n", cdb[0], sectors,
3018 su_dev->se_dev_attrib.fabric_max_sectors);
3019 goto out_invalid_cdb_field;
3020 }
3021 if (sectors > su_dev->se_dev_attrib.hw_max_sectors) {
3022 printk_ratelimited(KERN_ERR "SCSI OP %02xh with too"
3023 " big sectors %u exceeds backend hw_max_sectors:"
3024 " %u\n", cdb[0], sectors,
3025 su_dev->se_dev_attrib.hw_max_sectors);
3026 goto out_invalid_cdb_field;
3027 }
3028 }
3029
3030 /* reject any command that we don't have a handler for */
3031 if (!(passthrough || cmd->execute_cmd ||
3032 (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB)))
3033 goto out_unsupported_cdb;
3034
3035 transport_set_supported_SAM_opcode(cmd);
3036 return ret;
3037
3038out_unsupported_cdb:
3039 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
3040 cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE;
3041 return -EINVAL;
3042out_invalid_cdb_field:
3043 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
3044 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
3045 return -EINVAL;
3046} 1900}
3047 1901
3048/* 1902/*
@@ -3052,8 +1906,6 @@ out_invalid_cdb_field:
3052static void transport_complete_task_attr(struct se_cmd *cmd) 1906static void transport_complete_task_attr(struct se_cmd *cmd)
3053{ 1907{
3054 struct se_device *dev = cmd->se_dev; 1908 struct se_device *dev = cmd->se_dev;
3055 struct se_cmd *cmd_p, *cmd_tmp;
3056 int new_active_tasks = 0;
3057 1909
3058 if (cmd->sam_task_attr == MSG_SIMPLE_TAG) { 1910 if (cmd->sam_task_attr == MSG_SIMPLE_TAG) {
3059 atomic_dec(&dev->simple_cmds); 1911 atomic_dec(&dev->simple_cmds);
@@ -3075,38 +1927,8 @@ static void transport_complete_task_attr(struct se_cmd *cmd)
3075 pr_debug("Incremented dev_cur_ordered_id: %u for ORDERED:" 1927 pr_debug("Incremented dev_cur_ordered_id: %u for ORDERED:"
3076 " %u\n", dev->dev_cur_ordered_id, cmd->se_ordered_id); 1928 " %u\n", dev->dev_cur_ordered_id, cmd->se_ordered_id);
3077 } 1929 }
3078 /*
3079 * Process all commands up to the last received
3080 * ORDERED task attribute which requires another blocking
3081 * boundary
3082 */
3083 spin_lock(&dev->delayed_cmd_lock);
3084 list_for_each_entry_safe(cmd_p, cmd_tmp,
3085 &dev->delayed_cmd_list, se_delayed_node) {
3086
3087 list_del(&cmd_p->se_delayed_node);
3088 spin_unlock(&dev->delayed_cmd_lock);
3089
3090 pr_debug("Calling add_tasks() for"
3091 " cmd_p: 0x%02x Task Attr: 0x%02x"
3092 " Dormant -> Active, se_ordered_id: %u\n",
3093 cmd_p->t_task_cdb[0],
3094 cmd_p->sam_task_attr, cmd_p->se_ordered_id);
3095 1930
3096 target_add_to_execute_list(cmd_p); 1931 target_restart_delayed_cmds(dev);
3097 new_active_tasks++;
3098
3099 spin_lock(&dev->delayed_cmd_lock);
3100 if (cmd_p->sam_task_attr == MSG_ORDERED_TAG)
3101 break;
3102 }
3103 spin_unlock(&dev->delayed_cmd_lock);
3104 /*
3105 * If new tasks have become active, wake up the transport thread
3106 * to do the processing of the Active tasks.
3107 */
3108 if (new_active_tasks != 0)
3109 wake_up_interruptible(&dev->dev_queue_obj.thread_wq);
3110} 1932}
3111 1933
3112static void transport_complete_qf(struct se_cmd *cmd) 1934static void transport_complete_qf(struct se_cmd *cmd)
@@ -3365,31 +2187,27 @@ int transport_generic_map_mem_to_cmd(
3365 if (!sgl || !sgl_count) 2187 if (!sgl || !sgl_count)
3366 return 0; 2188 return 0;
3367 2189
3368 if ((cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) || 2190 /*
3369 (cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB)) { 2191 * Reject SCSI data overflow with map_mem_to_cmd() as incoming
3370 /* 2192 * scatterlists already have been set to follow what the fabric
3371 * Reject SCSI data overflow with map_mem_to_cmd() as incoming 2193 * passes for the original expected data transfer length.
3372 * scatterlists already have been set to follow what the fabric 2194 */
3373 * passes for the original expected data transfer length. 2195 if (cmd->se_cmd_flags & SCF_OVERFLOW_BIT) {
3374 */ 2196 pr_warn("Rejecting SCSI DATA overflow for fabric using"
3375 if (cmd->se_cmd_flags & SCF_OVERFLOW_BIT) { 2197 " SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC\n");
3376 pr_warn("Rejecting SCSI DATA overflow for fabric using" 2198 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
3377 " SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC\n"); 2199 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
3378 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 2200 return -EINVAL;
3379 cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 2201 }
3380 return -EINVAL;
3381 }
3382 2202
3383 cmd->t_data_sg = sgl; 2203 cmd->t_data_sg = sgl;
3384 cmd->t_data_nents = sgl_count; 2204 cmd->t_data_nents = sgl_count;
3385 2205
3386 if (sgl_bidi && sgl_bidi_count) { 2206 if (sgl_bidi && sgl_bidi_count) {
3387 cmd->t_bidi_data_sg = sgl_bidi; 2207 cmd->t_bidi_data_sg = sgl_bidi;
3388 cmd->t_bidi_data_nents = sgl_bidi_count; 2208 cmd->t_bidi_data_nents = sgl_bidi_count;
3389 }
3390 cmd->se_cmd_flags |= SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC;
3391 } 2209 }
3392 2210 cmd->se_cmd_flags |= SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC;
3393 return 0; 2211 return 0;
3394} 2212}
3395EXPORT_SYMBOL(transport_generic_map_mem_to_cmd); 2213EXPORT_SYMBOL(transport_generic_map_mem_to_cmd);
@@ -3461,7 +2279,7 @@ transport_generic_get_mem(struct se_cmd *cmd)
3461 cmd->t_data_nents = nents; 2279 cmd->t_data_nents = nents;
3462 sg_init_table(cmd->t_data_sg, nents); 2280 sg_init_table(cmd->t_data_sg, nents);
3463 2281
3464 zero_flag = cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB ? 0 : __GFP_ZERO; 2282 zero_flag = cmd->se_cmd_flags & SCF_SCSI_DATA_CDB ? 0 : __GFP_ZERO;
3465 2283
3466 while (length) { 2284 while (length) {
3467 u32 page_len = min_t(u32, length, PAGE_SIZE); 2285 u32 page_len = min_t(u32, length, PAGE_SIZE);
@@ -3492,7 +2310,6 @@ out:
3492 */ 2310 */
3493int transport_generic_new_cmd(struct se_cmd *cmd) 2311int transport_generic_new_cmd(struct se_cmd *cmd)
3494{ 2312{
3495 struct se_device *dev = cmd->se_dev;
3496 int ret = 0; 2313 int ret = 0;
3497 2314
3498 /* 2315 /*
@@ -3508,8 +2325,7 @@ int transport_generic_new_cmd(struct se_cmd *cmd)
3508 } 2325 }
3509 2326
3510 /* Workaround for handling zero-length control CDBs */ 2327 /* Workaround for handling zero-length control CDBs */
3511 if ((cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB) && 2328 if (!(cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) && !cmd->data_length) {
3512 !cmd->data_length) {
3513 spin_lock_irq(&cmd->t_state_lock); 2329 spin_lock_irq(&cmd->t_state_lock);
3514 cmd->t_state = TRANSPORT_COMPLETE; 2330 cmd->t_state = TRANSPORT_COMPLETE;
3515 cmd->transport_state |= CMD_T_ACTIVE; 2331 cmd->transport_state |= CMD_T_ACTIVE;
@@ -3527,52 +2343,45 @@ int transport_generic_new_cmd(struct se_cmd *cmd)
3527 return 0; 2343 return 0;
3528 } 2344 }
3529 2345
3530 if (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) {
3531 struct se_dev_attrib *attr = &dev->se_sub_dev->se_dev_attrib;
3532
3533 if (transport_cmd_get_valid_sectors(cmd) < 0)
3534 return -EINVAL;
3535
3536 BUG_ON(cmd->data_length % attr->block_size);
3537 BUG_ON(DIV_ROUND_UP(cmd->data_length, attr->block_size) >
3538 attr->hw_max_sectors);
3539 }
3540
3541 atomic_inc(&cmd->t_fe_count); 2346 atomic_inc(&cmd->t_fe_count);
3542 2347
3543 /* 2348 /*
3544 * For WRITEs, let the fabric know its buffer is ready. 2349 * If this command is not a write we can execute it right here,
3545 * 2350 * for write buffers we need to notify the fabric driver first
3546 * The command will be added to the execution queue after its write 2351 * and let it call back once the write buffers are ready.
3547 * data has arrived.
3548 */ 2352 */
3549 if (cmd->data_direction == DMA_TO_DEVICE) { 2353 target_add_to_state_list(cmd);
3550 target_add_to_state_list(cmd); 2354 if (cmd->data_direction != DMA_TO_DEVICE) {
3551 return transport_generic_write_pending(cmd); 2355 target_execute_cmd(cmd);
2356 return 0;
3552 } 2357 }
3553 /* 2358
3554 * Everything else but a WRITE, add the command to the execution queue. 2359 spin_lock_irq(&cmd->t_state_lock);
3555 */ 2360 cmd->t_state = TRANSPORT_WRITE_PENDING;
3556 transport_execute_tasks(cmd); 2361 spin_unlock_irq(&cmd->t_state_lock);
3557 return 0; 2362
2363 transport_cmd_check_stop(cmd, false);
2364
2365 ret = cmd->se_tfo->write_pending(cmd);
2366 if (ret == -EAGAIN || ret == -ENOMEM)
2367 goto queue_full;
2368
2369 if (ret < 0)
2370 return ret;
2371 return 1;
3558 2372
3559out_fail: 2373out_fail:
3560 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 2374 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
3561 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 2375 cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
3562 return -EINVAL; 2376 return -EINVAL;
2377queue_full:
2378 pr_debug("Handling write_pending QUEUE__FULL: se_cmd: %p\n", cmd);
2379 cmd->t_state = TRANSPORT_COMPLETE_QF_WP;
2380 transport_handle_queue_full(cmd, cmd->se_dev);
2381 return 0;
3563} 2382}
3564EXPORT_SYMBOL(transport_generic_new_cmd); 2383EXPORT_SYMBOL(transport_generic_new_cmd);
3565 2384
3566/* transport_generic_process_write():
3567 *
3568 *
3569 */
3570void transport_generic_process_write(struct se_cmd *cmd)
3571{
3572 transport_execute_tasks(cmd);
3573}
3574EXPORT_SYMBOL(transport_generic_process_write);
3575
3576static void transport_write_pending_qf(struct se_cmd *cmd) 2385static void transport_write_pending_qf(struct se_cmd *cmd)
3577{ 2386{
3578 int ret; 2387 int ret;
@@ -3585,43 +2394,6 @@ static void transport_write_pending_qf(struct se_cmd *cmd)
3585 } 2394 }
3586} 2395}
3587 2396
3588static int transport_generic_write_pending(struct se_cmd *cmd)
3589{
3590 unsigned long flags;
3591 int ret;
3592
3593 spin_lock_irqsave(&cmd->t_state_lock, flags);
3594 cmd->t_state = TRANSPORT_WRITE_PENDING;
3595 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3596
3597 /*
3598 * Clear the se_cmd for WRITE_PENDING status in order to set
3599 * CMD_T_ACTIVE so that transport_generic_handle_data can be called
3600 * from HW target mode interrupt code. This is safe to be called
3601 * with transport_off=1 before the cmd->se_tfo->write_pending
3602 * because the se_cmd->se_lun pointer is not being cleared.
3603 */
3604 transport_cmd_check_stop(cmd, 1, 0);
3605
3606 /*
3607 * Call the fabric write_pending function here to let the
3608 * frontend know that WRITE buffers are ready.
3609 */
3610 ret = cmd->se_tfo->write_pending(cmd);
3611 if (ret == -EAGAIN || ret == -ENOMEM)
3612 goto queue_full;
3613 else if (ret < 0)
3614 return ret;
3615
3616 return 1;
3617
3618queue_full:
3619 pr_debug("Handling write_pending QUEUE__FULL: se_cmd: %p\n", cmd);
3620 cmd->t_state = TRANSPORT_COMPLETE_QF_WP;
3621 transport_handle_queue_full(cmd, cmd->se_dev);
3622 return 0;
3623}
3624
3625void transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks) 2397void transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks)
3626{ 2398{
3627 if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD)) { 2399 if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD)) {
@@ -3648,10 +2420,11 @@ EXPORT_SYMBOL(transport_generic_free_cmd);
3648 * @se_cmd: command descriptor to add 2420 * @se_cmd: command descriptor to add
3649 * @ack_kref: Signal that fabric will perform an ack target_put_sess_cmd() 2421 * @ack_kref: Signal that fabric will perform an ack target_put_sess_cmd()
3650 */ 2422 */
3651void target_get_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd, 2423static int target_get_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd,
3652 bool ack_kref) 2424 bool ack_kref)
3653{ 2425{
3654 unsigned long flags; 2426 unsigned long flags;
2427 int ret = 0;
3655 2428
3656 kref_init(&se_cmd->cmd_kref); 2429 kref_init(&se_cmd->cmd_kref);
3657 /* 2430 /*
@@ -3665,11 +2438,17 @@ void target_get_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd,
3665 } 2438 }
3666 2439
3667 spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); 2440 spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
2441 if (se_sess->sess_tearing_down) {
2442 ret = -ESHUTDOWN;
2443 goto out;
2444 }
3668 list_add_tail(&se_cmd->se_cmd_list, &se_sess->sess_cmd_list); 2445 list_add_tail(&se_cmd->se_cmd_list, &se_sess->sess_cmd_list);
3669 se_cmd->check_release = 1; 2446 se_cmd->check_release = 1;
2447
2448out:
3670 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); 2449 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
2450 return ret;
3671} 2451}
3672EXPORT_SYMBOL(target_get_sess_cmd);
3673 2452
3674static void target_release_cmd_kref(struct kref *kref) 2453static void target_release_cmd_kref(struct kref *kref)
3675{ 2454{
@@ -3704,28 +2483,27 @@ int target_put_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd)
3704} 2483}
3705EXPORT_SYMBOL(target_put_sess_cmd); 2484EXPORT_SYMBOL(target_put_sess_cmd);
3706 2485
3707/* target_splice_sess_cmd_list - Split active cmds into sess_wait_list 2486/* target_sess_cmd_list_set_waiting - Flag all commands in
3708 * @se_sess: session to split 2487 * sess_cmd_list to complete cmd_wait_comp. Set
2488 * sess_tearing_down so no more commands are queued.
2489 * @se_sess: session to flag
3709 */ 2490 */
3710void target_splice_sess_cmd_list(struct se_session *se_sess) 2491void target_sess_cmd_list_set_waiting(struct se_session *se_sess)
3711{ 2492{
3712 struct se_cmd *se_cmd; 2493 struct se_cmd *se_cmd;
3713 unsigned long flags; 2494 unsigned long flags;
3714 2495
3715 WARN_ON(!list_empty(&se_sess->sess_wait_list));
3716 INIT_LIST_HEAD(&se_sess->sess_wait_list);
3717
3718 spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); 2496 spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
3719 se_sess->sess_tearing_down = 1;
3720 2497
3721 list_splice_init(&se_sess->sess_cmd_list, &se_sess->sess_wait_list); 2498 WARN_ON(se_sess->sess_tearing_down);
2499 se_sess->sess_tearing_down = 1;
3722 2500
3723 list_for_each_entry(se_cmd, &se_sess->sess_wait_list, se_cmd_list) 2501 list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list)
3724 se_cmd->cmd_wait_set = 1; 2502 se_cmd->cmd_wait_set = 1;
3725 2503
3726 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); 2504 spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
3727} 2505}
3728EXPORT_SYMBOL(target_splice_sess_cmd_list); 2506EXPORT_SYMBOL(target_sess_cmd_list_set_waiting);
3729 2507
3730/* target_wait_for_sess_cmds - Wait for outstanding descriptors 2508/* target_wait_for_sess_cmds - Wait for outstanding descriptors
3731 * @se_sess: session to wait for active I/O 2509 * @se_sess: session to wait for active I/O
@@ -3739,7 +2517,7 @@ void target_wait_for_sess_cmds(
3739 bool rc = false; 2517 bool rc = false;
3740 2518
3741 list_for_each_entry_safe(se_cmd, tmp_cmd, 2519 list_for_each_entry_safe(se_cmd, tmp_cmd,
3742 &se_sess->sess_wait_list, se_cmd_list) { 2520 &se_sess->sess_cmd_list, se_cmd_list) {
3743 list_del(&se_cmd->se_cmd_list); 2521 list_del(&se_cmd->se_cmd_list);
3744 2522
3745 pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:" 2523 pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:"
@@ -3791,26 +2569,20 @@ static int transport_lun_wait_for_tasks(struct se_cmd *cmd, struct se_lun *lun)
3791 pr_debug("ConfigFS ITT[0x%08x] - CMD_T_STOP, skipping\n", 2569 pr_debug("ConfigFS ITT[0x%08x] - CMD_T_STOP, skipping\n",
3792 cmd->se_tfo->get_task_tag(cmd)); 2570 cmd->se_tfo->get_task_tag(cmd));
3793 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 2571 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3794 transport_cmd_check_stop(cmd, 1, 0); 2572 transport_cmd_check_stop(cmd, false);
3795 return -EPERM; 2573 return -EPERM;
3796 } 2574 }
3797 cmd->transport_state |= CMD_T_LUN_FE_STOP; 2575 cmd->transport_state |= CMD_T_LUN_FE_STOP;
3798 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 2576 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3799 2577
3800 wake_up_interruptible(&cmd->se_dev->dev_queue_obj.thread_wq);
3801
3802 // XXX: audit task_flags checks. 2578 // XXX: audit task_flags checks.
3803 spin_lock_irqsave(&cmd->t_state_lock, flags); 2579 spin_lock_irqsave(&cmd->t_state_lock, flags);
3804 if ((cmd->transport_state & CMD_T_BUSY) && 2580 if ((cmd->transport_state & CMD_T_BUSY) &&
3805 (cmd->transport_state & CMD_T_SENT)) { 2581 (cmd->transport_state & CMD_T_SENT)) {
3806 if (!target_stop_cmd(cmd, &flags)) 2582 if (!target_stop_cmd(cmd, &flags))
3807 ret++; 2583 ret++;
3808 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3809 } else {
3810 spin_unlock_irqrestore(&cmd->t_state_lock,
3811 flags);
3812 target_remove_from_execute_list(cmd);
3813 } 2584 }
2585 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3814 2586
3815 pr_debug("ConfigFS: cmd: %p stop tasks ret:" 2587 pr_debug("ConfigFS: cmd: %p stop tasks ret:"
3816 " %d\n", cmd, ret); 2588 " %d\n", cmd, ret);
@@ -3821,7 +2593,6 @@ static int transport_lun_wait_for_tasks(struct se_cmd *cmd, struct se_lun *lun)
3821 pr_debug("ConfigFS: ITT[0x%08x] - stopped cmd....\n", 2593 pr_debug("ConfigFS: ITT[0x%08x] - stopped cmd....\n",
3822 cmd->se_tfo->get_task_tag(cmd)); 2594 cmd->se_tfo->get_task_tag(cmd));
3823 } 2595 }
3824 transport_remove_cmd_from_queue(cmd);
3825 2596
3826 return 0; 2597 return 0;
3827} 2598}
@@ -3840,11 +2611,6 @@ static void __transport_clear_lun_from_sessions(struct se_lun *lun)
3840 struct se_cmd, se_lun_node); 2611 struct se_cmd, se_lun_node);
3841 list_del_init(&cmd->se_lun_node); 2612 list_del_init(&cmd->se_lun_node);
3842 2613
3843 /*
3844 * This will notify iscsi_target_transport.c:
3845 * transport_cmd_check_stop() that a LUN shutdown is in
3846 * progress for the iscsi_cmd_t.
3847 */
3848 spin_lock(&cmd->t_state_lock); 2614 spin_lock(&cmd->t_state_lock);
3849 pr_debug("SE_LUN[%d] - Setting cmd->transport" 2615 pr_debug("SE_LUN[%d] - Setting cmd->transport"
3850 "_lun_stop for ITT: 0x%08x\n", 2616 "_lun_stop for ITT: 0x%08x\n",
@@ -3911,7 +2677,7 @@ check_cond:
3911 2677
3912 spin_unlock_irqrestore(&cmd->t_state_lock, 2678 spin_unlock_irqrestore(&cmd->t_state_lock,
3913 cmd_flags); 2679 cmd_flags);
3914 transport_cmd_check_stop(cmd, 1, 0); 2680 transport_cmd_check_stop(cmd, false);
3915 complete(&cmd->transport_lun_fe_stop_comp); 2681 complete(&cmd->transport_lun_fe_stop_comp);
3916 spin_lock_irqsave(&lun->lun_cmd_lock, lun_flags); 2682 spin_lock_irqsave(&lun->lun_cmd_lock, lun_flags);
3917 continue; 2683 continue;
@@ -3967,10 +2733,7 @@ bool transport_wait_for_tasks(struct se_cmd *cmd)
3967 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 2733 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
3968 return false; 2734 return false;
3969 } 2735 }
3970 /* 2736
3971 * Only perform a possible wait_for_tasks if SCF_SUPPORTED_SAM_OPCODE
3972 * has been set in transport_set_supported_SAM_opcode().
3973 */
3974 if (!(cmd->se_cmd_flags & SCF_SUPPORTED_SAM_OPCODE) && 2737 if (!(cmd->se_cmd_flags & SCF_SUPPORTED_SAM_OPCODE) &&
3975 !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)) { 2738 !(cmd->se_cmd_flags & SCF_SCSI_TMR_CDB)) {
3976 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 2739 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
@@ -4028,8 +2791,6 @@ bool transport_wait_for_tasks(struct se_cmd *cmd)
4028 2791
4029 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 2792 spin_unlock_irqrestore(&cmd->t_state_lock, flags);
4030 2793
4031 wake_up_interruptible(&cmd->se_dev->dev_queue_obj.thread_wq);
4032
4033 wait_for_completion(&cmd->t_transport_stop_comp); 2794 wait_for_completion(&cmd->t_transport_stop_comp);
4034 2795
4035 spin_lock_irqsave(&cmd->t_state_lock, flags); 2796 spin_lock_irqsave(&cmd->t_state_lock, flags);
@@ -4212,6 +2973,15 @@ int transport_send_check_condition_and_sense(
4212 /* WRITE PROTECTED */ 2973 /* WRITE PROTECTED */
4213 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x27; 2974 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x27;
4214 break; 2975 break;
2976 case TCM_ADDRESS_OUT_OF_RANGE:
2977 /* CURRENT ERROR */
2978 buffer[offset] = 0x70;
2979 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
2980 /* ILLEGAL REQUEST */
2981 buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
2982 /* LOGICAL BLOCK ADDRESS OUT OF RANGE */
2983 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x21;
2984 break;
4215 case TCM_CHECK_CONDITION_UNIT_ATTENTION: 2985 case TCM_CHECK_CONDITION_UNIT_ATTENTION:
4216 /* CURRENT ERROR */ 2986 /* CURRENT ERROR */
4217 buffer[offset] = 0x70; 2987 buffer[offset] = 0x70;
@@ -4312,8 +3082,9 @@ void transport_send_task_abort(struct se_cmd *cmd)
4312 cmd->se_tfo->queue_status(cmd); 3082 cmd->se_tfo->queue_status(cmd);
4313} 3083}
4314 3084
4315static int transport_generic_do_tmr(struct se_cmd *cmd) 3085static void target_tmr_work(struct work_struct *work)
4316{ 3086{
3087 struct se_cmd *cmd = container_of(work, struct se_cmd, work);
4317 struct se_device *dev = cmd->se_dev; 3088 struct se_device *dev = cmd->se_dev;
4318 struct se_tmr_req *tmr = cmd->se_tmr_req; 3089 struct se_tmr_req *tmr = cmd->se_tmr_req;
4319 int ret; 3090 int ret;
@@ -4349,80 +3120,13 @@ static int transport_generic_do_tmr(struct se_cmd *cmd)
4349 cmd->se_tfo->queue_tm_rsp(cmd); 3120 cmd->se_tfo->queue_tm_rsp(cmd);
4350 3121
4351 transport_cmd_check_stop_to_fabric(cmd); 3122 transport_cmd_check_stop_to_fabric(cmd);
4352 return 0;
4353} 3123}
4354 3124
4355/* transport_processing_thread(): 3125int transport_generic_handle_tmr(
4356 * 3126 struct se_cmd *cmd)
4357 *
4358 */
4359static int transport_processing_thread(void *param)
4360{ 3127{
4361 int ret; 3128 INIT_WORK(&cmd->work, target_tmr_work);
4362 struct se_cmd *cmd; 3129 queue_work(cmd->se_dev->tmr_wq, &cmd->work);
4363 struct se_device *dev = param;
4364
4365 while (!kthread_should_stop()) {
4366 ret = wait_event_interruptible(dev->dev_queue_obj.thread_wq,
4367 atomic_read(&dev->dev_queue_obj.queue_cnt) ||
4368 kthread_should_stop());
4369 if (ret < 0)
4370 goto out;
4371
4372get_cmd:
4373 cmd = transport_get_cmd_from_queue(&dev->dev_queue_obj);
4374 if (!cmd)
4375 continue;
4376
4377 switch (cmd->t_state) {
4378 case TRANSPORT_NEW_CMD:
4379 BUG();
4380 break;
4381 case TRANSPORT_NEW_CMD_MAP:
4382 if (!cmd->se_tfo->new_cmd_map) {
4383 pr_err("cmd->se_tfo->new_cmd_map is"
4384 " NULL for TRANSPORT_NEW_CMD_MAP\n");
4385 BUG();
4386 }
4387 ret = cmd->se_tfo->new_cmd_map(cmd);
4388 if (ret < 0) {
4389 transport_generic_request_failure(cmd);
4390 break;
4391 }
4392 ret = transport_generic_new_cmd(cmd);
4393 if (ret < 0) {
4394 transport_generic_request_failure(cmd);
4395 break;
4396 }
4397 break;
4398 case TRANSPORT_PROCESS_WRITE:
4399 transport_generic_process_write(cmd);
4400 break;
4401 case TRANSPORT_PROCESS_TMR:
4402 transport_generic_do_tmr(cmd);
4403 break;
4404 case TRANSPORT_COMPLETE_QF_WP:
4405 transport_write_pending_qf(cmd);
4406 break;
4407 case TRANSPORT_COMPLETE_QF_OK:
4408 transport_complete_qf(cmd);
4409 break;
4410 default:
4411 pr_err("Unknown t_state: %d for ITT: 0x%08x "
4412 "i_state: %d on SE LUN: %u\n",
4413 cmd->t_state,
4414 cmd->se_tfo->get_task_tag(cmd),
4415 cmd->se_tfo->get_cmd_state(cmd),
4416 cmd->se_lun->unpacked_lun);
4417 BUG();
4418 }
4419
4420 goto get_cmd;
4421 }
4422
4423out:
4424 WARN_ON(!list_empty(&dev->state_list));
4425 WARN_ON(!list_empty(&dev->dev_queue_obj.qobj_list));
4426 dev->process_thread = NULL;
4427 return 0; 3130 return 0;
4428} 3131}
3132EXPORT_SYMBOL(transport_generic_handle_tmr);
diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
index f03fb9730f5b..b9cb5006177e 100644
--- a/drivers/target/tcm_fc/tfc_cmd.c
+++ b/drivers/target/tcm_fc/tfc_cmd.c
@@ -215,7 +215,7 @@ int ft_write_pending(struct se_cmd *se_cmd)
215 */ 215 */
216 if ((ep->xid <= lport->lro_xid) && 216 if ((ep->xid <= lport->lro_xid) &&
217 (fh->fh_r_ctl == FC_RCTL_DD_DATA_DESC)) { 217 (fh->fh_r_ctl == FC_RCTL_DD_DATA_DESC)) {
218 if ((se_cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) && 218 if ((se_cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) &&
219 lport->tt.ddp_target(lport, ep->xid, 219 lport->tt.ddp_target(lport, ep->xid,
220 se_cmd->t_data_sg, 220 se_cmd->t_data_sg,
221 se_cmd->t_data_nents)) 221 se_cmd->t_data_nents))
@@ -230,6 +230,8 @@ u32 ft_get_task_tag(struct se_cmd *se_cmd)
230{ 230{
231 struct ft_cmd *cmd = container_of(se_cmd, struct ft_cmd, se_cmd); 231 struct ft_cmd *cmd = container_of(se_cmd, struct ft_cmd, se_cmd);
232 232
233 if (cmd->aborted)
234 return ~0;
233 return fc_seq_exch(cmd->seq)->rxid; 235 return fc_seq_exch(cmd->seq)->rxid;
234} 236}
235 237
@@ -541,9 +543,11 @@ static void ft_send_work(struct work_struct *work)
541 * Use a single se_cmd->cmd_kref as we expect to release se_cmd 543 * Use a single se_cmd->cmd_kref as we expect to release se_cmd
542 * directly from ft_check_stop_free callback in response path. 544 * directly from ft_check_stop_free callback in response path.
543 */ 545 */
544 target_submit_cmd(&cmd->se_cmd, cmd->sess->se_sess, fcp->fc_cdb, 546 if (target_submit_cmd(&cmd->se_cmd, cmd->sess->se_sess, fcp->fc_cdb,
545 &cmd->ft_sense_buffer[0], scsilun_to_int(&fcp->fc_lun), 547 &cmd->ft_sense_buffer[0], scsilun_to_int(&fcp->fc_lun),
546 ntohl(fcp->fc_dl), task_attr, data_dir, 0); 548 ntohl(fcp->fc_dl), task_attr, data_dir, 0))
549 goto err;
550
547 pr_debug("r_ctl %x alloc target_submit_cmd\n", fh->fh_r_ctl); 551 pr_debug("r_ctl %x alloc target_submit_cmd\n", fh->fh_r_ctl);
548 return; 552 return;
549 553
diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
index 071a505f98fc..ad36ede1a1ea 100644
--- a/drivers/target/tcm_fc/tfc_io.c
+++ b/drivers/target/tcm_fc/tfc_io.c
@@ -183,6 +183,13 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
183 return ft_queue_status(se_cmd); 183 return ft_queue_status(se_cmd);
184} 184}
185 185
186static void ft_execute_work(struct work_struct *work)
187{
188 struct ft_cmd *cmd = container_of(work, struct ft_cmd, work);
189
190 target_execute_cmd(&cmd->se_cmd);
191}
192
186/* 193/*
187 * Receive write data frame. 194 * Receive write data frame.
188 */ 195 */
@@ -307,8 +314,10 @@ void ft_recv_write_data(struct ft_cmd *cmd, struct fc_frame *fp)
307 cmd->write_data_len += tlen; 314 cmd->write_data_len += tlen;
308 } 315 }
309last_frame: 316last_frame:
310 if (cmd->write_data_len == se_cmd->data_length) 317 if (cmd->write_data_len == se_cmd->data_length) {
311 transport_generic_handle_data(se_cmd); 318 INIT_WORK(&cmd->work, ft_execute_work);
319 queue_work(cmd->sess->tport->tpg->workqueue, &cmd->work);
320 }
312drop: 321drop:
313 fc_frame_free(fp); 322 fc_frame_free(fp);
314} 323}
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index cb99da920068..87901fa74dd7 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -58,7 +58,8 @@ static struct ft_tport *ft_tport_create(struct fc_lport *lport)
58 struct ft_tport *tport; 58 struct ft_tport *tport;
59 int i; 59 int i;
60 60
61 tport = rcu_dereference(lport->prov[FC_TYPE_FCP]); 61 tport = rcu_dereference_protected(lport->prov[FC_TYPE_FCP],
62 lockdep_is_held(&ft_lport_lock));
62 if (tport && tport->tpg) 63 if (tport && tport->tpg)
63 return tport; 64 return tport;
64 65
diff --git a/drivers/tty/hvc/hvc_opal.c b/drivers/tty/hvc/hvc_opal.c
index ced26c8ccd57..0d2ea0c224c3 100644
--- a/drivers/tty/hvc/hvc_opal.c
+++ b/drivers/tty/hvc/hvc_opal.c
@@ -401,7 +401,7 @@ out:
401} 401}
402 402
403#ifdef CONFIG_PPC_EARLY_DEBUG_OPAL_RAW 403#ifdef CONFIG_PPC_EARLY_DEBUG_OPAL_RAW
404void __init udbg_init_debug_opal(void) 404void __init udbg_init_debug_opal_raw(void)
405{ 405{
406 u32 index = CONFIG_PPC_EARLY_DEBUG_OPAL_VTERMNO; 406 u32 index = CONFIG_PPC_EARLY_DEBUG_OPAL_VTERMNO;
407 hvc_opal_privs[index] = &hvc_opal_boot_priv; 407 hvc_opal_privs[index] = &hvc_opal_boot_priv;
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 8fd398dffced..ee469274a3fe 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -500,6 +500,8 @@ retry:
500 goto retry; 500 goto retry;
501 } 501 }
502 if (!desc->reslength) { /* zero length read */ 502 if (!desc->reslength) { /* zero length read */
503 dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__);
504 clear_bit(WDM_READ, &desc->flags);
503 spin_unlock_irq(&desc->iuspin); 505 spin_unlock_irq(&desc->iuspin);
504 goto retry; 506 goto retry;
505 } 507 }
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 25a7422ee657..8fb484984c86 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -2324,12 +2324,16 @@ static unsigned hub_is_wusb(struct usb_hub *hub)
2324static int hub_port_reset(struct usb_hub *hub, int port1, 2324static int hub_port_reset(struct usb_hub *hub, int port1,
2325 struct usb_device *udev, unsigned int delay, bool warm); 2325 struct usb_device *udev, unsigned int delay, bool warm);
2326 2326
2327/* Is a USB 3.0 port in the Inactive state? */ 2327/* Is a USB 3.0 port in the Inactive or Complinance Mode state?
2328static bool hub_port_inactive(struct usb_hub *hub, u16 portstatus) 2328 * Port worm reset is required to recover
2329 */
2330static bool hub_port_warm_reset_required(struct usb_hub *hub, u16 portstatus)
2329{ 2331{
2330 return hub_is_superspeed(hub->hdev) && 2332 return hub_is_superspeed(hub->hdev) &&
2331 (portstatus & USB_PORT_STAT_LINK_STATE) == 2333 (((portstatus & USB_PORT_STAT_LINK_STATE) ==
2332 USB_SS_PORT_LS_SS_INACTIVE; 2334 USB_SS_PORT_LS_SS_INACTIVE) ||
2335 ((portstatus & USB_PORT_STAT_LINK_STATE) ==
2336 USB_SS_PORT_LS_COMP_MOD)) ;
2333} 2337}
2334 2338
2335static int hub_port_wait_reset(struct usb_hub *hub, int port1, 2339static int hub_port_wait_reset(struct usb_hub *hub, int port1,
@@ -2365,7 +2369,7 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2365 * 2369 *
2366 * See https://bugzilla.kernel.org/show_bug.cgi?id=41752 2370 * See https://bugzilla.kernel.org/show_bug.cgi?id=41752
2367 */ 2371 */
2368 if (hub_port_inactive(hub, portstatus)) { 2372 if (hub_port_warm_reset_required(hub, portstatus)) {
2369 int ret; 2373 int ret;
2370 2374
2371 if ((portchange & USB_PORT_STAT_C_CONNECTION)) 2375 if ((portchange & USB_PORT_STAT_C_CONNECTION))
@@ -4408,9 +4412,7 @@ static void hub_events(void)
4408 /* Warm reset a USB3 protocol port if it's in 4412 /* Warm reset a USB3 protocol port if it's in
4409 * SS.Inactive state. 4413 * SS.Inactive state.
4410 */ 4414 */
4411 if (hub_is_superspeed(hub->hdev) && 4415 if (hub_port_warm_reset_required(hub, portstatus)) {
4412 (portstatus & USB_PORT_STAT_LINK_STATE)
4413 == USB_SS_PORT_LS_SS_INACTIVE) {
4414 dev_dbg(hub_dev, "warm reset port %d\n", i); 4416 dev_dbg(hub_dev, "warm reset port %d\n", i);
4415 hub_port_reset(hub, i, NULL, 4417 hub_port_reset(hub, i, NULL,
4416 HUB_BH_RESET_TIME, true); 4418 HUB_BH_RESET_TIME, true);
diff --git a/drivers/usb/gadget/tcm_usb_gadget.c b/drivers/usb/gadget/tcm_usb_gadget.c
index c46439c8dd74..5444866e13ef 100644
--- a/drivers/usb/gadget/tcm_usb_gadget.c
+++ b/drivers/usb/gadget/tcm_usb_gadget.c
@@ -294,7 +294,7 @@ static int bot_send_write_request(struct usbg_cmd *cmd)
294 pr_err("%s(%d)\n", __func__, __LINE__); 294 pr_err("%s(%d)\n", __func__, __LINE__);
295 295
296 wait_for_completion(&cmd->write_complete); 296 wait_for_completion(&cmd->write_complete);
297 transport_generic_process_write(se_cmd); 297 target_execute_cmd(se_cmd);
298cleanup: 298cleanup:
299 return ret; 299 return ret;
300} 300}
@@ -725,7 +725,7 @@ static int uasp_send_write_request(struct usbg_cmd *cmd)
725 } 725 }
726 726
727 wait_for_completion(&cmd->write_complete); 727 wait_for_completion(&cmd->write_complete);
728 transport_generic_process_write(se_cmd); 728 target_execute_cmd(se_cmd);
729cleanup: 729cleanup:
730 return ret; 730 return ret;
731} 731}
@@ -1065,16 +1065,20 @@ static void usbg_cmd_work(struct work_struct *work)
1065 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo, 1065 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo,
1066 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE, 1066 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE,
1067 cmd->prio_attr, cmd->sense_iu.sense); 1067 cmd->prio_attr, cmd->sense_iu.sense);
1068 1068 goto out;
1069 transport_send_check_condition_and_sense(se_cmd,
1070 TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1071 usbg_cleanup_cmd(cmd);
1072 return;
1073 } 1069 }
1074 1070
1075 target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess, 1071 if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
1076 cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun, 1072 cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
1077 0, cmd->prio_attr, dir, TARGET_SCF_UNKNOWN_SIZE); 1073 0, cmd->prio_attr, dir, TARGET_SCF_UNKNOWN_SIZE) < 0)
1074 goto out;
1075
1076 return;
1077
1078out:
1079 transport_send_check_condition_and_sense(se_cmd,
1080 TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1081 usbg_cleanup_cmd(cmd);
1078} 1082}
1079 1083
1080static int usbg_submit_command(struct f_uas *fu, 1084static int usbg_submit_command(struct f_uas *fu,
@@ -1177,16 +1181,20 @@ static void bot_cmd_work(struct work_struct *work)
1177 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo, 1181 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo,
1178 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE, 1182 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE,
1179 cmd->prio_attr, cmd->sense_iu.sense); 1183 cmd->prio_attr, cmd->sense_iu.sense);
1180 1184 goto out;
1181 transport_send_check_condition_and_sense(se_cmd,
1182 TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1183 usbg_cleanup_cmd(cmd);
1184 return;
1185 } 1185 }
1186 1186
1187 target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess, 1187 if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
1188 cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun, 1188 cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
1189 cmd->data_len, cmd->prio_attr, dir, 0); 1189 cmd->data_len, cmd->prio_attr, dir, 0) < 0)
1190 goto out;
1191
1192 return;
1193
1194out:
1195 transport_send_check_condition_and_sense(se_cmd,
1196 TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1197 usbg_cleanup_cmd(cmd);
1190} 1198}
1191 1199
1192static int bot_submit_command(struct f_uas *fu, 1200static int bot_submit_command(struct f_uas *fu,
@@ -1400,19 +1408,6 @@ static u32 usbg_tpg_get_inst_index(struct se_portal_group *se_tpg)
1400 return 1; 1408 return 1;
1401} 1409}
1402 1410
1403static int usbg_new_cmd(struct se_cmd *se_cmd)
1404{
1405 struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1406 se_cmd);
1407 int ret;
1408
1409 ret = target_setup_cmd_from_cdb(se_cmd, cmd->cmd_buf);
1410 if (ret)
1411 return ret;
1412
1413 return transport_generic_map_mem_to_cmd(se_cmd, NULL, 0, NULL, 0);
1414}
1415
1416static void usbg_cmd_release(struct kref *ref) 1411static void usbg_cmd_release(struct kref *ref)
1417{ 1412{
1418 struct usbg_cmd *cmd = container_of(ref, struct usbg_cmd, 1413 struct usbg_cmd *cmd = container_of(ref, struct usbg_cmd,
@@ -1902,7 +1897,6 @@ static struct target_core_fabric_ops usbg_ops = {
1902 .tpg_alloc_fabric_acl = usbg_alloc_fabric_acl, 1897 .tpg_alloc_fabric_acl = usbg_alloc_fabric_acl,
1903 .tpg_release_fabric_acl = usbg_release_fabric_acl, 1898 .tpg_release_fabric_acl = usbg_release_fabric_acl,
1904 .tpg_get_inst_index = usbg_tpg_get_inst_index, 1899 .tpg_get_inst_index = usbg_tpg_get_inst_index,
1905 .new_cmd_map = usbg_new_cmd,
1906 .release_cmd = usbg_release_cmd, 1900 .release_cmd = usbg_release_cmd,
1907 .shutdown_session = usbg_shutdown_session, 1901 .shutdown_session = usbg_shutdown_session,
1908 .close_session = usbg_close_session, 1902 .close_session = usbg_close_session,
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
index 17cfb8a1131c..c30435499a02 100644
--- a/drivers/usb/host/ehci-omap.c
+++ b/drivers/usb/host/ehci-omap.c
@@ -281,14 +281,13 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
281 } 281 }
282 } 282 }
283 283
284 /* Hold PHYs in reset while initializing EHCI controller */
284 if (pdata->phy_reset) { 285 if (pdata->phy_reset) {
285 if (gpio_is_valid(pdata->reset_gpio_port[0])) 286 if (gpio_is_valid(pdata->reset_gpio_port[0]))
286 gpio_request_one(pdata->reset_gpio_port[0], 287 gpio_set_value_cansleep(pdata->reset_gpio_port[0], 0);
287 GPIOF_OUT_INIT_LOW, "USB1 PHY reset");
288 288
289 if (gpio_is_valid(pdata->reset_gpio_port[1])) 289 if (gpio_is_valid(pdata->reset_gpio_port[1]))
290 gpio_request_one(pdata->reset_gpio_port[1], 290 gpio_set_value_cansleep(pdata->reset_gpio_port[1], 0);
291 GPIOF_OUT_INIT_LOW, "USB2 PHY reset");
292 291
293 /* Hold the PHY in RESET for enough time till DIR is high */ 292 /* Hold the PHY in RESET for enough time till DIR is high */
294 udelay(10); 293 udelay(10);
@@ -330,6 +329,11 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
330 omap_ehci->hcs_params = readl(&omap_ehci->caps->hcs_params); 329 omap_ehci->hcs_params = readl(&omap_ehci->caps->hcs_params);
331 330
332 ehci_reset(omap_ehci); 331 ehci_reset(omap_ehci);
332 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
333 if (ret) {
334 dev_err(dev, "failed to add hcd with err %d\n", ret);
335 goto err_add_hcd;
336 }
333 337
334 if (pdata->phy_reset) { 338 if (pdata->phy_reset) {
335 /* Hold the PHY in RESET for enough time till 339 /* Hold the PHY in RESET for enough time till
@@ -344,12 +348,6 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
344 gpio_set_value_cansleep(pdata->reset_gpio_port[1], 1); 348 gpio_set_value_cansleep(pdata->reset_gpio_port[1], 1);
345 } 349 }
346 350
347 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
348 if (ret) {
349 dev_err(dev, "failed to add hcd with err %d\n", ret);
350 goto err_add_hcd;
351 }
352
353 /* root ports should always stay powered */ 351 /* root ports should always stay powered */
354 ehci_port_power(omap_ehci, 1); 352 ehci_port_power(omap_ehci, 1);
355 353
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index 2732ef660c5c..7b01094d7993 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -462,6 +462,42 @@ void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
462 } 462 }
463} 463}
464 464
465/* Updates Link Status for super Speed port */
466static void xhci_hub_report_link_state(u32 *status, u32 status_reg)
467{
468 u32 pls = status_reg & PORT_PLS_MASK;
469
470 /* resume state is a xHCI internal state.
471 * Do not report it to usb core.
472 */
473 if (pls == XDEV_RESUME)
474 return;
475
476 /* When the CAS bit is set then warm reset
477 * should be performed on port
478 */
479 if (status_reg & PORT_CAS) {
480 /* The CAS bit can be set while the port is
481 * in any link state.
482 * Only roothubs have CAS bit, so we
483 * pretend to be in compliance mode
484 * unless we're already in compliance
485 * or the inactive state.
486 */
487 if (pls != USB_SS_PORT_LS_COMP_MOD &&
488 pls != USB_SS_PORT_LS_SS_INACTIVE) {
489 pls = USB_SS_PORT_LS_COMP_MOD;
490 }
491 /* Return also connection bit -
492 * hub state machine resets port
493 * when this bit is set.
494 */
495 pls |= USB_PORT_STAT_CONNECTION;
496 }
497 /* update status field */
498 *status |= pls;
499}
500
465int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, 501int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
466 u16 wIndex, char *buf, u16 wLength) 502 u16 wIndex, char *buf, u16 wLength)
467{ 503{
@@ -606,13 +642,9 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
606 else 642 else
607 status |= USB_PORT_STAT_POWER; 643 status |= USB_PORT_STAT_POWER;
608 } 644 }
609 /* Port Link State */ 645 /* Update Port Link State for super speed ports*/
610 if (hcd->speed == HCD_USB3) { 646 if (hcd->speed == HCD_USB3) {
611 /* resume state is a xHCI internal state. 647 xhci_hub_report_link_state(&status, temp);
612 * Do not report it to usb core.
613 */
614 if ((temp & PORT_PLS_MASK) != XDEV_RESUME)
615 status |= (temp & PORT_PLS_MASK);
616 } 648 }
617 if (bus_state->port_c_suspend & (1 << wIndex)) 649 if (bus_state->port_c_suspend & (1 << wIndex))
618 status |= 1 << USB_PORT_FEAT_C_SUSPEND; 650 status |= 1 << USB_PORT_FEAT_C_SUSPEND;
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 23b4aefd1036..8275645889da 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -885,6 +885,17 @@ static void update_ring_for_set_deq_completion(struct xhci_hcd *xhci,
885 num_trbs_free_temp = ep_ring->num_trbs_free; 885 num_trbs_free_temp = ep_ring->num_trbs_free;
886 dequeue_temp = ep_ring->dequeue; 886 dequeue_temp = ep_ring->dequeue;
887 887
888 /* If we get two back-to-back stalls, and the first stalled transfer
889 * ends just before a link TRB, the dequeue pointer will be left on
890 * the link TRB by the code in the while loop. So we have to update
891 * the dequeue pointer one segment further, or we'll jump off
892 * the segment into la-la-land.
893 */
894 if (last_trb(xhci, ep_ring, ep_ring->deq_seg, ep_ring->dequeue)) {
895 ep_ring->deq_seg = ep_ring->deq_seg->next;
896 ep_ring->dequeue = ep_ring->deq_seg->trbs;
897 }
898
888 while (ep_ring->dequeue != dev->eps[ep_index].queued_deq_ptr) { 899 while (ep_ring->dequeue != dev->eps[ep_index].queued_deq_ptr) {
889 /* We have more usable TRBs */ 900 /* We have more usable TRBs */
890 ep_ring->num_trbs_free++; 901 ep_ring->num_trbs_free++;
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index de3d6e3e57be..55c0785810c9 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -341,7 +341,11 @@ struct xhci_op_regs {
341#define PORT_PLC (1 << 22) 341#define PORT_PLC (1 << 22)
342/* port configure error change - port failed to configure its link partner */ 342/* port configure error change - port failed to configure its link partner */
343#define PORT_CEC (1 << 23) 343#define PORT_CEC (1 << 23)
344/* bit 24 reserved */ 344/* Cold Attach Status - xHC can set this bit to report device attached during
345 * Sx state. Warm port reset should be perfomed to clear this bit and move port
346 * to connected state.
347 */
348#define PORT_CAS (1 << 24)
345/* wake on connect (enable) */ 349/* wake on connect (enable) */
346#define PORT_WKCONN_E (1 << 25) 350#define PORT_WKCONN_E (1 << 25)
347/* wake on disconnect (enable) */ 351/* wake on disconnect (enable) */
diff --git a/drivers/usb/serial/metro-usb.c b/drivers/usb/serial/metro-usb.c
index 81423f7361db..d47eb06fe463 100644
--- a/drivers/usb/serial/metro-usb.c
+++ b/drivers/usb/serial/metro-usb.c
@@ -222,14 +222,6 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
222 metro_priv->throttled = 0; 222 metro_priv->throttled = 0;
223 spin_unlock_irqrestore(&metro_priv->lock, flags); 223 spin_unlock_irqrestore(&metro_priv->lock, flags);
224 224
225 /*
226 * Force low_latency on so that our tty_push actually forces the data
227 * through, otherwise it is scheduled, and with high data rates (like
228 * with OHCI) data can get lost.
229 */
230 if (tty)
231 tty->low_latency = 1;
232
233 /* Clear the urb pipe. */ 225 /* Clear the urb pipe. */
234 usb_clear_halt(serial->dev, port->interrupt_in_urb->pipe); 226 usb_clear_halt(serial->dev, port->interrupt_in_urb->pipe);
235 227
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index adf8ce72be50..417ab1b0aa30 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -497,6 +497,15 @@ static void option_instat_callback(struct urb *urb);
497 497
498/* MediaTek products */ 498/* MediaTek products */
499#define MEDIATEK_VENDOR_ID 0x0e8d 499#define MEDIATEK_VENDOR_ID 0x0e8d
500#define MEDIATEK_PRODUCT_DC_1COM 0x00a0
501#define MEDIATEK_PRODUCT_DC_4COM 0x00a5
502#define MEDIATEK_PRODUCT_DC_5COM 0x00a4
503#define MEDIATEK_PRODUCT_7208_1COM 0x7101
504#define MEDIATEK_PRODUCT_7208_2COM 0x7102
505#define MEDIATEK_PRODUCT_FP_1COM 0x0003
506#define MEDIATEK_PRODUCT_FP_2COM 0x0023
507#define MEDIATEK_PRODUCT_FPDC_1COM 0x0043
508#define MEDIATEK_PRODUCT_FPDC_2COM 0x0033
500 509
501/* Cellient products */ 510/* Cellient products */
502#define CELLIENT_VENDOR_ID 0x2692 511#define CELLIENT_VENDOR_ID 0x2692
@@ -554,6 +563,10 @@ static const struct option_blacklist_info net_intf1_blacklist = {
554 .reserved = BIT(1), 563 .reserved = BIT(1),
555}; 564};
556 565
566static const struct option_blacklist_info net_intf2_blacklist = {
567 .reserved = BIT(2),
568};
569
557static const struct option_blacklist_info net_intf3_blacklist = { 570static const struct option_blacklist_info net_intf3_blacklist = {
558 .reserved = BIT(3), 571 .reserved = BIT(3),
559}; 572};
@@ -1099,6 +1112,8 @@ static const struct usb_device_id option_ids[] = {
1099 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, 1112 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) },
1100 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, 1113 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) },
1101 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, 1114 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) },
1115 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff),
1116 .driver_info = (kernel_ulong_t)&net_intf2_blacklist },
1102 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 1117 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff,
1103 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_k3765_z_blacklist }, 1118 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_k3765_z_blacklist },
1104 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) }, 1119 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
@@ -1240,6 +1255,17 @@ static const struct usb_device_id option_ids[] = {
1240 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) }, 1255 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) },
1241 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) }, 1256 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) },
1242 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) }, /* MediaTek MT6276M modem & app port */ 1257 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) }, /* MediaTek MT6276M modem & app port */
1258 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_1COM, 0x0a, 0x00, 0x00) },
1259 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x02, 0x01) },
1260 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x00, 0x00) },
1261 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x02, 0x01) },
1262 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x00, 0x00) },
1263 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_1COM, 0x02, 0x00, 0x00) },
1264 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_2COM, 0x02, 0x02, 0x01) },
1265 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_1COM, 0x0a, 0x00, 0x00) },
1266 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_2COM, 0x0a, 0x00, 0x00) },
1267 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_1COM, 0x0a, 0x00, 0x00) },
1268 { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_2COM, 0x0a, 0x00, 0x00) },
1243 { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, 1269 { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
1244 { } /* Terminating entry */ 1270 { } /* Terminating entry */
1245}; 1271};
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 5066eee10ccf..58bd9c27369d 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -32,6 +32,7 @@
32#include <linux/io.h> 32#include <linux/io.h>
33#include <linux/device.h> 33#include <linux/device.h>
34#include <linux/regulator/consumer.h> 34#include <linux/regulator/consumer.h>
35#include <linux/suspend.h>
35 36
36#include <video/omapdss.h> 37#include <video/omapdss.h>
37 38
@@ -201,6 +202,28 @@ int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *))
201#endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */ 202#endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
202 203
203/* PLATFORM DEVICE */ 204/* PLATFORM DEVICE */
205static int omap_dss_pm_notif(struct notifier_block *b, unsigned long v, void *d)
206{
207 DSSDBG("pm notif %lu\n", v);
208
209 switch (v) {
210 case PM_SUSPEND_PREPARE:
211 DSSDBG("suspending displays\n");
212 return dss_suspend_all_devices();
213
214 case PM_POST_SUSPEND:
215 DSSDBG("resuming displays\n");
216 return dss_resume_all_devices();
217
218 default:
219 return 0;
220 }
221}
222
223static struct notifier_block omap_dss_pm_notif_block = {
224 .notifier_call = omap_dss_pm_notif,
225};
226
204static int __init omap_dss_probe(struct platform_device *pdev) 227static int __init omap_dss_probe(struct platform_device *pdev)
205{ 228{
206 struct omap_dss_board_info *pdata = pdev->dev.platform_data; 229 struct omap_dss_board_info *pdata = pdev->dev.platform_data;
@@ -224,6 +247,8 @@ static int __init omap_dss_probe(struct platform_device *pdev)
224 else if (pdata->default_device) 247 else if (pdata->default_device)
225 core.default_display_name = pdata->default_device->name; 248 core.default_display_name = pdata->default_device->name;
226 249
250 register_pm_notifier(&omap_dss_pm_notif_block);
251
227 return 0; 252 return 0;
228 253
229err_debugfs: 254err_debugfs:
@@ -233,6 +258,8 @@ err_debugfs:
233 258
234static int omap_dss_remove(struct platform_device *pdev) 259static int omap_dss_remove(struct platform_device *pdev)
235{ 260{
261 unregister_pm_notifier(&omap_dss_pm_notif_block);
262
236 dss_uninitialize_debugfs(); 263 dss_uninitialize_debugfs();
237 264
238 dss_uninit_overlays(pdev); 265 dss_uninit_overlays(pdev);
@@ -247,25 +274,9 @@ static void omap_dss_shutdown(struct platform_device *pdev)
247 dss_disable_all_devices(); 274 dss_disable_all_devices();
248} 275}
249 276
250static int omap_dss_suspend(struct platform_device *pdev, pm_message_t state)
251{
252 DSSDBG("suspend %d\n", state.event);
253
254 return dss_suspend_all_devices();
255}
256
257static int omap_dss_resume(struct platform_device *pdev)
258{
259 DSSDBG("resume\n");
260
261 return dss_resume_all_devices();
262}
263
264static struct platform_driver omap_dss_driver = { 277static struct platform_driver omap_dss_driver = {
265 .remove = omap_dss_remove, 278 .remove = omap_dss_remove,
266 .shutdown = omap_dss_shutdown, 279 .shutdown = omap_dss_shutdown,
267 .suspend = omap_dss_suspend,
268 .resume = omap_dss_resume,
269 .driver = { 280 .driver = {
270 .name = "omapdss", 281 .name = "omapdss",
271 .owner = THIS_MODULE, 282 .owner = THIS_MODULE,
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 4749ac356469..397d4eee11bb 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -384,7 +384,7 @@ void dispc_runtime_put(void)
384 DSSDBG("dispc_runtime_put\n"); 384 DSSDBG("dispc_runtime_put\n");
385 385
386 r = pm_runtime_put_sync(&dispc.pdev->dev); 386 r = pm_runtime_put_sync(&dispc.pdev->dev);
387 WARN_ON(r < 0); 387 WARN_ON(r < 0 && r != -ENOSYS);
388} 388}
389 389
390static inline bool dispc_mgr_is_lcd(enum omap_channel channel) 390static inline bool dispc_mgr_is_lcd(enum omap_channel channel)
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index ca8382d346e9..14ce8cc079e3 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -1075,7 +1075,7 @@ void dsi_runtime_put(struct platform_device *dsidev)
1075 DSSDBG("dsi_runtime_put\n"); 1075 DSSDBG("dsi_runtime_put\n");
1076 1076
1077 r = pm_runtime_put_sync(&dsi->pdev->dev); 1077 r = pm_runtime_put_sync(&dsi->pdev->dev);
1078 WARN_ON(r < 0); 1078 WARN_ON(r < 0 && r != -ENOSYS);
1079} 1079}
1080 1080
1081/* source clock for DSI PLL. this could also be PCLKFREE */ 1081/* source clock for DSI PLL. this could also be PCLKFREE */
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 770632359a17..d2b57197b292 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -731,7 +731,7 @@ static void dss_runtime_put(void)
731 DSSDBG("dss_runtime_put\n"); 731 DSSDBG("dss_runtime_put\n");
732 732
733 r = pm_runtime_put_sync(&dss.pdev->dev); 733 r = pm_runtime_put_sync(&dss.pdev->dev);
734 WARN_ON(r < 0 && r != -EBUSY); 734 WARN_ON(r < 0 && r != -ENOSYS && r != -EBUSY);
735} 735}
736 736
737/* DEBUGFS */ 737/* DEBUGFS */
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 8195c7166d20..26a2430a7028 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -138,7 +138,7 @@ static void hdmi_runtime_put(void)
138 DSSDBG("hdmi_runtime_put\n"); 138 DSSDBG("hdmi_runtime_put\n");
139 139
140 r = pm_runtime_put_sync(&hdmi.pdev->dev); 140 r = pm_runtime_put_sync(&hdmi.pdev->dev);
141 WARN_ON(r < 0); 141 WARN_ON(r < 0 && r != -ENOSYS);
142} 142}
143 143
144static int __init hdmi_init_display(struct omap_dss_device *dssdev) 144static int __init hdmi_init_display(struct omap_dss_device *dssdev)
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 3d8c206e90e5..7985fa12b9b4 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -141,7 +141,7 @@ static void rfbi_runtime_put(void)
141 DSSDBG("rfbi_runtime_put\n"); 141 DSSDBG("rfbi_runtime_put\n");
142 142
143 r = pm_runtime_put_sync(&rfbi.pdev->dev); 143 r = pm_runtime_put_sync(&rfbi.pdev->dev);
144 WARN_ON(r < 0); 144 WARN_ON(r < 0 && r != -ENOSYS);
145} 145}
146 146
147void rfbi_bus_lock(void) 147void rfbi_bus_lock(void)
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 2b8973931ff4..3907c8b6ecbc 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -402,7 +402,7 @@ static void venc_runtime_put(void)
402 DSSDBG("venc_runtime_put\n"); 402 DSSDBG("venc_runtime_put\n");
403 403
404 r = pm_runtime_put_sync(&venc.pdev->dev); 404 r = pm_runtime_put_sync(&venc.pdev->dev);
405 WARN_ON(r < 0); 405 WARN_ON(r < 0 && r != -ENOSYS);
406} 406}
407 407
408static const struct venc_config *venc_timings_to_config( 408static const struct venc_config *venc_timings_to_config(
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index bfbc15ca38dd..0908e6044333 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -47,7 +47,7 @@ struct virtio_balloon
47 struct task_struct *thread; 47 struct task_struct *thread;
48 48
49 /* Waiting for host to ack the pages we released. */ 49 /* Waiting for host to ack the pages we released. */
50 struct completion acked; 50 wait_queue_head_t acked;
51 51
52 /* Number of balloon pages we've told the Host we're not using. */ 52 /* Number of balloon pages we've told the Host we're not using. */
53 unsigned int num_pages; 53 unsigned int num_pages;
@@ -89,29 +89,25 @@ static struct page *balloon_pfn_to_page(u32 pfn)
89 89
90static void balloon_ack(struct virtqueue *vq) 90static void balloon_ack(struct virtqueue *vq)
91{ 91{
92 struct virtio_balloon *vb; 92 struct virtio_balloon *vb = vq->vdev->priv;
93 unsigned int len;
94 93
95 vb = virtqueue_get_buf(vq, &len); 94 wake_up(&vb->acked);
96 if (vb)
97 complete(&vb->acked);
98} 95}
99 96
100static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq) 97static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
101{ 98{
102 struct scatterlist sg; 99 struct scatterlist sg;
100 unsigned int len;
103 101
104 sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns); 102 sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
105 103
106 init_completion(&vb->acked);
107
108 /* We should always be able to add one buffer to an empty queue. */ 104 /* We should always be able to add one buffer to an empty queue. */
109 if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0) 105 if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0)
110 BUG(); 106 BUG();
111 virtqueue_kick(vq); 107 virtqueue_kick(vq);
112 108
113 /* When host has read buffer, this completes via balloon_ack */ 109 /* When host has read buffer, this completes via balloon_ack */
114 wait_for_completion(&vb->acked); 110 wait_event(vb->acked, virtqueue_get_buf(vq, &len));
115} 111}
116 112
117static void set_page_pfns(u32 pfns[], struct page *page) 113static void set_page_pfns(u32 pfns[], struct page *page)
@@ -231,12 +227,8 @@ static void update_balloon_stats(struct virtio_balloon *vb)
231 */ 227 */
232static void stats_request(struct virtqueue *vq) 228static void stats_request(struct virtqueue *vq)
233{ 229{
234 struct virtio_balloon *vb; 230 struct virtio_balloon *vb = vq->vdev->priv;
235 unsigned int len;
236 231
237 vb = virtqueue_get_buf(vq, &len);
238 if (!vb)
239 return;
240 vb->need_stats_update = 1; 232 vb->need_stats_update = 1;
241 wake_up(&vb->config_change); 233 wake_up(&vb->config_change);
242} 234}
@@ -245,11 +237,14 @@ static void stats_handle_request(struct virtio_balloon *vb)
245{ 237{
246 struct virtqueue *vq; 238 struct virtqueue *vq;
247 struct scatterlist sg; 239 struct scatterlist sg;
240 unsigned int len;
248 241
249 vb->need_stats_update = 0; 242 vb->need_stats_update = 0;
250 update_balloon_stats(vb); 243 update_balloon_stats(vb);
251 244
252 vq = vb->stats_vq; 245 vq = vb->stats_vq;
246 if (!virtqueue_get_buf(vq, &len))
247 return;
253 sg_init_one(&sg, vb->stats, sizeof(vb->stats)); 248 sg_init_one(&sg, vb->stats, sizeof(vb->stats));
254 if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0) 249 if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0)
255 BUG(); 250 BUG();
@@ -358,6 +353,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
358 INIT_LIST_HEAD(&vb->pages); 353 INIT_LIST_HEAD(&vb->pages);
359 vb->num_pages = 0; 354 vb->num_pages = 0;
360 init_waitqueue_head(&vb->config_change); 355 init_waitqueue_head(&vb->config_change);
356 init_waitqueue_head(&vb->acked);
361 vb->vdev = vdev; 357 vb->vdev = vdev;
362 vb->need_stats_update = 0; 358 vb->need_stats_update = 0;
363 359