1 /* linux/arch/arm/mach-exynos4/dev-pd.c
3 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com
6 * EXYNOS4 - Power Domain support
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.
14 #include <linux/kernel.h>
15 #include <linux/platform_device.h>
16 #include <linux/delay.h>
18 #include <mach/regs-pmu.h>
22 static int exynos4_pd_enable(struct device
*dev
)
24 struct samsung_pd_info
*pdata
= dev
->platform_data
;
27 __raw_writel(S5P_INT_LOCAL_PWR_EN
, pdata
->base
);
31 while ((__raw_readl(pdata
->base
+ 0x4) & S5P_INT_LOCAL_PWR_EN
)
32 != S5P_INT_LOCAL_PWR_EN
) {
34 printk(KERN_ERR
"Power domain %s enable failed.\n",
45 static int exynos4_pd_disable(struct device
*dev
)
47 struct samsung_pd_info
*pdata
= dev
->platform_data
;
50 __raw_writel(0, pdata
->base
);
54 while (__raw_readl(pdata
->base
+ 0x4) & S5P_INT_LOCAL_PWR_EN
) {
56 printk(KERN_ERR
"Power domain %s disable failed.\n",
67 struct platform_device exynos4_device_pd
[] = {
72 .platform_data
= &(struct samsung_pd_info
) {
73 .enable
= exynos4_pd_enable
,
74 .disable
= exynos4_pd_disable
,
75 .base
= S5P_PMU_MFC_CONF
,
82 .platform_data
= &(struct samsung_pd_info
) {
83 .enable
= exynos4_pd_enable
,
84 .disable
= exynos4_pd_disable
,
85 .base
= S5P_PMU_G3D_CONF
,
92 .platform_data
= &(struct samsung_pd_info
) {
93 .enable
= exynos4_pd_enable
,
94 .disable
= exynos4_pd_disable
,
95 .base
= S5P_PMU_LCD0_CONF
,
102 .platform_data
= &(struct samsung_pd_info
) {
103 .enable
= exynos4_pd_enable
,
104 .disable
= exynos4_pd_disable
,
105 .base
= S5P_PMU_LCD1_CONF
,
109 .name
= "samsung-pd",
112 .platform_data
= &(struct samsung_pd_info
) {
113 .enable
= exynos4_pd_enable
,
114 .disable
= exynos4_pd_disable
,
115 .base
= S5P_PMU_TV_CONF
,
119 .name
= "samsung-pd",
122 .platform_data
= &(struct samsung_pd_info
) {
123 .enable
= exynos4_pd_enable
,
124 .disable
= exynos4_pd_disable
,
125 .base
= S5P_PMU_CAM_CONF
,
129 .name
= "samsung-pd",
132 .platform_data
= &(struct samsung_pd_info
) {
133 .enable
= exynos4_pd_enable
,
134 .disable
= exynos4_pd_disable
,
135 .base
= S5P_PMU_GPS_CONF
,