From: Mark Brown <broonie(a)linaro.org>
Since we only enable the PHY clock on init and the PHY init and shutdown
does not occur in atomitc context there is no need to prepare the clock
before it is enabled. Move the clk_prepare() operations to go along
with the enables, allowing the clock to be fully idle when not in use.
Signed-off-by: Mark Brown <broonie(a)linaro.org>
---
drivers/usb/phy/phy-nop.c | 22 +++-------------------
1 file changed, 3 insertions(+), 19 deletions(-)
diff --git a/drivers/usb/phy/phy-nop.c b/drivers/usb/phy/phy-nop.c
index f52b7f8..35838f4 100644
--- a/drivers/usb/phy/phy-nop.c
+++ b/drivers/usb/phy/phy-nop.c
@@ -80,7 +80,7 @@ static int nop_init(struct usb_phy *phy)
}
if (!IS_ERR(nop->clk))
- clk_enable(nop->clk);
+ clk_prepare_enable(nop->clk);
if (!IS_ERR(nop->reset)) {
/* De-assert RESET */
@@ -102,7 +102,7 @@ static void nop_shutdown(struct usb_phy *phy)
}
if (!IS_ERR(nop->clk))
- clk_disable(nop->clk);
+ clk_disable_unprepare(nop->clk);
if (!IS_ERR(nop->vcc)) {
if (regulator_disable(nop->vcc))
@@ -190,14 +190,6 @@ static int nop_usb_xceiv_probe(struct platform_device *pdev)
}
}
- if (!IS_ERR(nop->clk)) {
- err = clk_prepare(nop->clk);
- if (err) {
- dev_err(&pdev->dev, "Error preparing clock\n");
- return err;
- }
- }
-
nop->vcc = devm_regulator_get(&pdev->dev, "vcc");
if (IS_ERR(nop->vcc)) {
dev_dbg(&pdev->dev, "Error getting vcc regulator: %ld\n",
@@ -231,7 +223,7 @@ static int nop_usb_xceiv_probe(struct platform_device *pdev)
if (err) {
dev_err(&pdev->dev, "can't register transceiver, err: %d\n",
err);
- goto err_add;
+ return err;
}
platform_set_drvdata(pdev, nop);
@@ -239,20 +231,12 @@ static int nop_usb_xceiv_probe(struct platform_device *pdev)
ATOMIC_INIT_NOTIFIER_HEAD(&nop->phy.notifier);
return 0;
-
-err_add:
- if (!IS_ERR(nop->clk))
- clk_unprepare(nop->clk);
- return err;
}
static int nop_usb_xceiv_remove(struct platform_device *pdev)
{
struct nop_usb_xceiv *nop = platform_get_drvdata(pdev);
- if (!IS_ERR(nop->clk))
- clk_unprepare(nop->clk);
-
usb_remove_phy(&nop->phy);
return 0;
--
1.8.4.rc1
hi Nico,
For later ARMv8's big.LITTLE and for current ARM64 multi-core's power
management, actually we can use MCPM as well, so we want to confirm if
there have plan to support MCPM framework for ARM64 as well?
--
Thx,
Leo Yan
This patch series adds generic support for issuing device control
related ioctls and supports creating the ARM KVM-accelerated VGIC using
the device control API while maintaining backwards compatibility for
older kernels.
Christoffer Dall (4):
kvm: Update headers for device control api
kvm: Introduce kvm_arch_irqchip_create
kvm: Common device control API functions
arm: vgic device control api support
hw/intc/arm_gic_kvm.c | 23 ++++++++++++++++--
include/sysemu/kvm.h | 9 ++++++++
kvm-all.c | 50 +++++++++++++++++++++++++++++++++++++--
linux-headers/asm-arm/kvm.h | 8 +++++++
linux-headers/linux/kvm.h | 1 +
target-arm/kvm.c | 54 +++++++++++++++++++++++++++++++++++++------
target-arm/kvm_arm.h | 18 ++++++++++-----
target-i386/kvm.c | 5 ++++
target-ppc/kvm.c | 5 ++++
target-s390x/kvm.c | 5 ++++
trace-events | 1 +
11 files changed, 162 insertions(+), 17 deletions(-)
--
1.7.10.4
This patchset adds DT nodes for FIMD and DP controller for Exynos5420
based SMDK.
It moves all common properties of FIMD and DP controller DT node specific to
Exynos5 Socs like 5250 and 5420 to exynos5.dtsi file.
It also adds required PM domain DT nodes for exynos5420.
Is rebased on branch kgene's "for-next"
https://git.kernel.org/cgit/linux/kernel/git/kgene/linux-samsung.git/log/?h…
The DP PHY DT Node is based on Jingoo Han's inflight patchset at
http://comments.gmane.org/gmane.linux.drivers.video-input-infrastructure/66…
changes since v1:
- Addressed comments given by Tomasz Figa <tomasz.figa(a)gmail.com>
and Ajay kumar <ajaynumb(a)gmail.com>
Vikas Sajjan (6):
ARM: dts: Move display-timimg information inside FIMD DT node for
exynos5250
ARM: dts: Update FIMD DT node for Exynos5 SoCs
ARM: dts: Add FIMD DT node to exynos5420 DTS files
ARM: dts: Update DP controller DT Node for Exynos5 based SoCs
ARM: dts: Add DP controller DT node to exynos5420 SoC
ARM: dts: Add pin state information for DP HPD support to Exynos5420
Yadwinder Singh Brar (1):
ARM: dts: Add basic PM domains for EXYNOS5420
arch/arm/boot/dts/exynos5.dtsi | 21 +++++++++++
arch/arm/boot/dts/exynos5250-arndale.dts | 4 ++-
arch/arm/boot/dts/exynos5250-smdk5250.dts | 32 +++++++++--------
arch/arm/boot/dts/exynos5250.dtsi | 28 ++++++---------
arch/arm/boot/dts/exynos5420-pinctrl.dtsi | 7 ++++
arch/arm/boot/dts/exynos5420-smdk5420.dts | 31 ++++++++++++++++
arch/arm/boot/dts/exynos5420.dtsi | 55 +++++++++++++++++++++++++++++
7 files changed, 145 insertions(+), 33 deletions(-)
--
1.7.9.5
Hi Guys,
I was trying to run following on my thinkpad:
watch -n1 cat /sys/devices/system/cpu/cpu*/cpuidle/state*/usage
I can see lots of activities on State 1-4, but not much on state 0..
I thought we should enter this state as soon as we come out to
non-idle state.. And so this count must be changing quite rapidly.
Is this a bug?
--
viresh
Commit 89878baa73f0f1c679355006bd8632e5d78f96c2 introduced the flag
CPUIDLE_FLAG_TIMER_STOP where we specify a specific idle state stops the local
timer.
Commit a06df062a189a8d5588babb8bf0bb78672497798 introduced the initialization
of the timer broadcast framework depending of the flag presence.
If a system is booted with some cpus offline, by setting for example, maxcpus=1
in the kernel command line, and then they are set online, the timer broadcast
won't be setup automatically.
Fix this by adding the cpu hotplug notifier and enable/disable the timer
broadcast automatically. So no need to handle that at the arch specific driver
level like eg. intel_idle does.
Signed-off-by: Daniel Lezcano <daniel.lezcano(a)linaro.org>
---
drivers/cpuidle/driver.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
index 3ac499d..e976994 100644
--- a/drivers/cpuidle/driver.c
+++ b/drivers/cpuidle/driver.c
@@ -10,6 +10,7 @@
#include <linux/mutex.h>
#include <linux/module.h>
+#include <linux/cpu.h>
#include <linux/cpuidle.h>
#include <linux/cpumask.h>
#include <linux/clockchips.h>
@@ -147,6 +148,48 @@ static void cpuidle_setup_broadcast_timer(void *arg)
}
/**
+ * cpuidle_hotplug_notify: notifier callback when a cpu is onlined/offlined
+ * @n: the notifier block
+ * @action: an unsigned long giving the event related to the notification
+ * @hcpu: a void pointer but used as the cpu number which the event is related
+ *
+ * The kernel can boot with some cpus offline, we have to init the timer
+ * broadcast for these cpus when they are onlined. Also we have to disable
+ * the timer broadcast when the cpu is down.
+ *
+ * Returns NOTIFY_OK
+ */
+static int cpuidle_hotplug_notify(struct notifier_block *n,
+ unsigned long action, void *hcpu)
+{
+ int cpu = (unsigned long)hcpu;
+ struct cpuidle_driver *drv;
+
+ drv = __cpuidle_get_cpu_driver(cpu);
+ if (!drv || !drv->bctimer)
+ goto out;
+
+ switch (action & 0xf) {
+ case CPU_ONLINE:
+ smp_call_function_single(cpu, cpuidle_setup_broadcast_timer,
+ (void *)CLOCK_EVT_NOTIFY_BROADCAST_ON,
+ 1);
+ break;
+ case CPU_DEAD:
+ smp_call_function_single(cpu, cpuidle_setup_broadcast_timer,
+ (void *)CLOCK_EVT_NOTIFY_BROADCAST_OFF,
+ 1);
+ break;
+ }
+out:
+ return NOTIFY_OK;
+}
+
+static struct notifier_block cpuidle_hotplug_notifier = {
+ .notifier_call = cpuidle_hotplug_notify,
+};
+
+/**
* __cpuidle_driver_init - initialize the driver's internal data
* @drv: a valid pointer to a struct cpuidle_driver
*
@@ -262,6 +305,9 @@ int cpuidle_register_driver(struct cpuidle_driver *drv)
ret = __cpuidle_register_driver(drv);
spin_unlock(&cpuidle_driver_lock);
+ if (!ret)
+ ret = register_cpu_notifier(&cpuidle_hotplug_notifier);
+
return ret;
}
EXPORT_SYMBOL_GPL(cpuidle_register_driver);
@@ -276,6 +322,8 @@ EXPORT_SYMBOL_GPL(cpuidle_register_driver);
*/
void cpuidle_unregister_driver(struct cpuidle_driver *drv)
{
+ unregister_cpu_notifier(&cpuidle_hotplug_notifier);
+
spin_lock(&cpuidle_driver_lock);
__cpuidle_unregister_driver(drv);
spin_unlock(&cpuidle_driver_lock);
--
1.7.9.5
This patch series removes the use of the ASoC-level read and write
functions from the cq93vc driver as part of a wider push to remove them
completely and just use regmap for all register I/O. Since the driver
is essentially doing what regmap-mmio is doing this is done by adding a
MMIO regmap to the core device and using that. This is compile tested
only, I don't have any hardware to run on.
Since I anticipate doing more cleanups over the CODEC drivers during the
next release cycle it'd be good to merge via ASoC, though there
shouldn't be any overlap with the first patch.
Mark Brown (5):
mfd: davinci_voicecodec: Remove unused read and write functions
mfd: davinci_voicecodec: Provide a regmap for register I/O
ASoC: cq93vc: Use core I/O functions
ASoC: cq93vc: Don't use control data for core driver data
ASoC: cq93vc: Use regmap for I/O
drivers/mfd/davinci_voicecodec.c | 23 +++++++++++--------
include/linux/mfd/davinci_voicecodec.h | 3 +++
sound/soc/codecs/cq93vc.c | 42 +++++++++++-----------------------
3 files changed, 29 insertions(+), 39 deletions(-)
Update cmdline to contain "console=ttyAMA0" only
Enable devtmpfs filesystem
Enable voltage regulator support
Enable ext4 filesystem
Signed-off-by: Fathi Boudra <fathi.boudra(a)linaro.org>
---
arch/arm/configs/vexpress_defconfig | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/arm/configs/vexpress_defconfig b/arch/arm/configs/vexpress_defconfig
index f2de51f..8ddd187 100644
--- a/arch/arm/configs/vexpress_defconfig
+++ b/arch/arm/configs/vexpress_defconfig
@@ -30,7 +30,7 @@ CONFIG_HOTPLUG_CPU=y
CONFIG_AEABI=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="root=/dev/nfs nfsroot=10.1.69.3:/work/nfsroot ip=dhcp console=ttyAMA0 mem=128M"
+CONFIG_CMDLINE="console=ttyAMA0"
CONFIG_VFP=y
CONFIG_NEON=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
@@ -45,6 +45,7 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_IPV6 is not set
# CONFIG_WIRELESS is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
CONFIG_MTD=y
CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
@@ -75,6 +76,7 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_LEGACY_PTY_COUNT=16
# CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set
+CONFIG_REGULATOR=y
CONFIG_FB=y
CONFIG_FB_ARMCLCD=y
CONFIG_FRAMEBUFFER_CONSOLE=y
@@ -115,6 +117,7 @@ CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y
--
1.8.1.2