Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
413427b5
Commit
413427b5
authored
Jun 18, 2009
by
Russell King
Committed by
Russell King
Jun 18, 2009
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next-s3c' of
git://aeryn.fluff.org.uk/bjdooks/linux
into devel
parents
187f81b3
9f01efaa
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
3931 additions
and
6 deletions
+3931
-6
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+21
-0
MAINTAINERS
MAINTAINERS
+7
-0
arch/arm/Kconfig
arch/arm/Kconfig
+5
-1
arch/arm/common/vic.c
arch/arm/common/vic.c
+6
-2
arch/arm/configs/mini2440_defconfig
arch/arm/configs/mini2440_defconfig
+2097
-0
arch/arm/mach-s3c2410/usb-simtec.c
arch/arm/mach-s3c2410/usb-simtec.c
+0
-1
arch/arm/mach-s3c2440/Kconfig
arch/arm/mach-s3c2440/Kconfig
+10
-0
arch/arm/mach-s3c2440/Makefile
arch/arm/mach-s3c2440/Makefile
+1
-0
arch/arm/mach-s3c2440/mach-mini2440.c
arch/arm/mach-s3c2440/mach-mini2440.c
+703
-0
arch/arm/mach-s3c2442/Kconfig
arch/arm/mach-s3c2442/Kconfig
+12
-0
arch/arm/mach-s3c2442/Makefile
arch/arm/mach-s3c2442/Makefile
+2
-0
arch/arm/mach-s3c2442/include/mach/gta02.h
arch/arm/mach-s3c2442/include/mach/gta02.h
+84
-0
arch/arm/mach-s3c2442/mach-gta02.c
arch/arm/mach-s3c2442/mach-gta02.c
+646
-0
arch/arm/plat-s3c/Makefile
arch/arm/plat-s3c/Makefile
+1
-0
arch/arm/plat-s3c/dev-audio.c
arch/arm/plat-s3c/dev-audio.c
+68
-0
arch/arm/plat-s3c/include/plat/devs.h
arch/arm/plat-s3c/include/plat/devs.h
+4
-1
arch/arm/plat-s3c64xx/Makefile
arch/arm/plat-s3c64xx/Makefile
+1
-0
arch/arm/plat-s3c64xx/cpufreq.c
arch/arm/plat-s3c64xx/cpufreq.c
+262
-0
drivers/mmc/host/s3cmci.c
drivers/mmc/host/s3cmci.c
+1
-1
No files found.
Documentation/kernel-parameters.txt
View file @
413427b5
...
...
@@ -1362,6 +1362,27 @@ and is between 256 and 4096 characters. It is defined in the file
min_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory below this
physical address is ignored.
mini2440= [ARM,HW,KNL]
Format:[0..2][b][c][t]
Default: "0tb"
MINI2440 configuration specification:
0 - The attached screen is the 3.5" TFT
1 - The attached screen is the 7" TFT
2 - The VGA Shield is attached (1024x768)
Leaving out the screen size parameter will not load
the TFT driver, and the framebuffer will be left
unconfigured.
b - Enable backlight. The TFT backlight pin will be
linked to the kernel VESA blanking code and a GPIO
LED. This parameter is not necessary when using the
VGA shield.
c - Enable the s3c camera interface.
t - Reserved for enabling touchscreen support. The
touchscreen support is not enabled in the mainstream
kernel as of 2.6.30, a preliminary port can be found
in the "bleeding edge" mini2440 support kernel at
http://repo.or.cz/w/linux-2.6/mini2440.git
mminit_loglevel=
[KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
parameter allows control of the logging verbosity for
...
...
MAINTAINERS
View file @
413427b5
...
...
@@ -788,6 +788,13 @@ P: Michael Petchkovsky
M: mkpetch@internode.on.net
S: Maintained
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
P: Nelson Castillo
M: arhuaco@freaks-unidos.net
L: openmoko-kernel@lists.openmoko.org (subscribers-only)
W: http://wiki.openmoko.org/wiki/Neo_FreeRunner
S: Supported
ARM/TOSA MACHINE SUPPORT
P: Dmitry Eremin-Solenikov
M: dbaryshkov@gmail.com
...
...
arch/arm/Kconfig
View file @
413427b5
...
...
@@ -1241,7 +1241,7 @@ endmenu
menu "CPU Power Management"
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA)
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_PXA
|| ARCH_S3C64XX
)
source "drivers/cpufreq/Kconfig"
...
...
@@ -1272,6 +1272,10 @@ config CPU_FREQ_PXA
default y
select CPU_FREQ_DEFAULT_GOV_USERSPACE
config CPU_FREQ_S3C64XX
bool "CPUfreq support for Samsung S3C64XX CPUs"
depends on CPU_FREQ && CPU_S3C6410
endif
source "drivers/cpuidle/Kconfig"
...
...
arch/arm/common/vic.c
View file @
413427b5
...
...
@@ -229,14 +229,18 @@ static int vic_set_wake(unsigned int irq, unsigned int on)
{
struct
vic_device
*
v
=
vic_from_irq
(
irq
);
unsigned
int
off
=
irq
&
31
;
u32
bit
=
1
<<
off
;
if
(
!
v
)
return
-
EINVAL
;
if
(
!
(
bit
&
v
->
resume_sources
))
return
-
EINVAL
;
if
(
on
)
v
->
resume_irqs
|=
1
<<
off
;
v
->
resume_irqs
|=
bit
;
else
v
->
resume_irqs
&=
~
(
1
<<
off
)
;
v
->
resume_irqs
&=
~
bit
;
return
0
;
}
...
...
arch/arm/configs/mini2440_defconfig
0 → 100644
View file @
413427b5
This diff is collapsed.
Click to expand it.
arch/arm/mach-s3c2410/usb-simtec.c
View file @
413427b5
...
...
@@ -22,7 +22,6 @@
#include <linux/timer.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/gpio.h>
#include <linux/io.h>
#include <asm/mach/arch.h>
...
...
arch/arm/mach-s3c2440/Kconfig
View file @
413427b5
...
...
@@ -84,5 +84,15 @@ config MACH_AT2440EVB
help
Say Y here if you are using the AT2440EVB development board
config MACH_MINI2440
bool "MINI2440 development board"
select CPU_S3C2440
select EEPROM_AT24
select LEDS_TRIGGER_BACKLIGHT
select SND_S3C24XX_SOC_S3C24XX_UDA134X
help
Say Y here to select support for the MINI2440. Is a 10cm x 10cm board
available via various sources. It can come with a 3.5" or 7" touch LCD.
endmenu
arch/arm/mach-s3c2440/Makefile
View file @
413427b5
...
...
@@ -22,3 +22,4 @@ obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o
obj-$(CONFIG_ARCH_S3C2440)
+=
mach-smdk2440.o
obj-$(CONFIG_MACH_NEXCODER_2440)
+=
mach-nexcoder.o
obj-$(CONFIG_MACH_AT2440EVB)
+=
mach-at2440evb.o
obj-$(CONFIG_MACH_MINI2440)
+=
mach-mini2440.o
arch/arm/mach-s3c2440/mach-mini2440.c
0 → 100644
View file @
413427b5
This diff is collapsed.
Click to expand it.
arch/arm/mach-s3c2442/Kconfig
View file @
413427b5
...
...
@@ -24,6 +24,18 @@ config SMDK2440_CPU2442
depends on ARCH_S3C2440
select CPU_S3C2442
config MACH_NEO1973_GTA02
bool "Openmoko GTA02 / Freerunner phone"
select CPU_S3C2442
select MFD_PCF50633
select PCF50633_GPIO
select I2C
select POWER_SUPPLY
select MACH_NEO1973
select S3C2410_PWM
help
Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone
endmenu
arch/arm/mach-s3c2442/Makefile
View file @
413427b5
...
...
@@ -12,5 +12,7 @@ obj- :=
obj-$(CONFIG_CPU_S3C2442)
+=
s3c2442.o
obj-$(CONFIG_CPU_S3C2442)
+=
clock.o
obj-$(CONFIG_MACH_NEO1973_GTA02)
+=
mach-gta02.o
# Machine support
arch/arm/mach-s3c2442/include/mach/gta02.h
0 → 100644
View file @
413427b5
#ifndef _GTA02_H
#define _GTA02_H
#include <mach/regs-gpio.h>
/* Different hardware revisions, passed in ATAG_REVISION by u-boot */
#define GTA02v1_SYSTEM_REV 0x00000310
#define GTA02v2_SYSTEM_REV 0x00000320
#define GTA02v3_SYSTEM_REV 0x00000330
#define GTA02v4_SYSTEM_REV 0x00000340
#define GTA02v5_SYSTEM_REV 0x00000350
/* since A7 is basically same as A6, we use A6 PCB ID */
#define GTA02v6_SYSTEM_REV 0x00000360
#define GTA02_GPIO_n3DL_GSM S3C2410_GPA(13)
/* v1 + v2 + v3 only */
#define GTA02_GPIO_PWR_LED1 S3C2410_GPB(0)
#define GTA02_GPIO_PWR_LED2 S3C2410_GPB(1)
#define GTA02_GPIO_AUX_LED S3C2410_GPB(2)
#define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB(3)
#define GTA02_GPIO_MODEM_RST S3C2410_GPB(5)
#define GTA02_GPIO_BT_EN S3C2410_GPB(6)
#define GTA02_GPIO_MODEM_ON S3C2410_GPB(7)
#define GTA02_GPIO_EXTINT8 S3C2410_GPB(8)
#define GTA02_GPIO_USB_PULLUP S3C2410_GPB(9)
#define GTA02_GPIO_PIO5 S3C2410_GPC(5)
/* v3 + v4 only */
#define GTA02v3_GPIO_nG1_CS S3C2410_GPD(12)
/* v3 + v4 only */
#define GTA02v3_GPIO_nG2_CS S3C2410_GPD(13)
/* v3 + v4 only */
#define GTA02v5_GPIO_HDQ S3C2410_GPD(14)
/* v5 + */
#define GTA02_GPIO_nG1_INT S3C2410_GPF(0)
#define GTA02_GPIO_IO1 S3C2410_GPF(1)
#define GTA02_GPIO_PIO_2 S3C2410_GPF(2)
/* v2 + v3 + v4 only */
#define GTA02_GPIO_JACK_INSERT S3C2410_GPF(4)
#define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF(5)
/* v2 + v3 + v4 only */
#define GTA02_GPIO_AUX_KEY S3C2410_GPF(6)
#define GTA02_GPIO_HOLD_KEY S3C2410_GPF(7)
#define GTA02_GPIO_3D_IRQ S3C2410_GPG(4)
#define GTA02v2_GPIO_nG2_INT S3C2410_GPG(8)
/* v2 + v3 + v4 only */
#define GTA02v3_GPIO_nUSB_OC S3C2410_GPG(9)
/* v3 + v4 only */
#define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG(10)
/* v3 + v4 only */
#define GTA02v3_GPIO_nGSM_OC S3C2410_GPG(11)
/* v3 + v4 only */
#define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1
/* v2 + v3 + v4 only */
#define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2
#define GTA02_GPIO_HP_IN S3C2440_GPJ2
/* v2 + v3 + v4 only */
#define GTA02_GPIO_INT0 S3C2440_GPJ3
/* v2 + v3 + v4 only */
#define GTA02_GPIO_nGSM_EN S3C2440_GPJ4
#define GTA02_GPIO_3D_RESET S3C2440_GPJ5
#define GTA02_GPIO_nDL_GSM S3C2440_GPJ6
/* v4 + v5 only */
#define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7
#define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8
#define GTA02_GPIO_KEEPACT S3C2440_GPJ8
#define GTA02v1_GPIO_HP_IN S3C2440_GPJ10
#define GTA02_CHIP_PWD S3C2440_GPJ11
/* v2 + v3 + v4 only */
#define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12
/* v2 + v3 + v4 only */
#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0
#define GTA02_IRQ_MODEM IRQ_EINT1
#define GTA02_IRQ_PIO_2 IRQ_EINT2
/* v2 + v3 + v4 only */
#define GTA02_IRQ_nJACK_INSERT IRQ_EINT4
#define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5
#define GTA02_IRQ_AUX IRQ_EINT6
#define GTA02_IRQ_nHOLD IRQ_EINT7
#define GTA02_IRQ_PCF50633 IRQ_EINT9
#define GTA02_IRQ_3D IRQ_EINT12
#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16
/* v2 + v3 + v4 only */
#define GTA02v3_IRQ_nUSB_OC IRQ_EINT17
/* v3 + v4 only */
#define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18
/* v3 + v4 only */
#define GTA02v3_IRQ_nGSM_OC IRQ_EINT19
/* v3 + v4 only */
/* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */
#define GTA02_PCB_ID1_0 S3C2410_GPC(13)
#define GTA02_PCB_ID1_1 S3C2410_GPC(15)
#define GTA02_PCB_ID1_2 S3C2410_GPD(0)
#define GTA02_PCB_ID2_0 S3C2410_GPD(3)
#define GTA02_PCB_ID2_1 S3C2410_GPD(4)
int
gta02_get_pcb_revision
(
void
);
#endif
/* _GTA02_H */
arch/arm/mach-s3c2442/mach-gta02.c
0 → 100644
View file @
413427b5
This diff is collapsed.
Click to expand it.
arch/arm/plat-s3c/Makefile
View file @
413427b5
...
...
@@ -34,6 +34,7 @@ obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
obj-$(CONFIG_S3C_DEV_HSMMC1)
+=
dev-hsmmc1.o
obj-y
+=
dev-i2c0.o
obj-$(CONFIG_S3C_DEV_I2C1)
+=
dev-i2c1.o
obj-$(CONFIG_SND_S3C24XX_SOC)
+=
dev-audio.o
obj-$(CONFIG_S3C_DEV_FB)
+=
dev-fb.o
obj-$(CONFIG_S3C_DEV_USB_HOST)
+=
dev-usb.o
obj-$(CONFIG_S3C_DEV_USB_HSOTG)
+=
dev-usb-hsotg.o
arch/arm/plat-s3c/dev-audio.c
0 → 100644
View file @
413427b5
/* linux/arch/arm/plat-s3c/dev-audio.c
*
* Copyright 2009 Wolfson Microelectronics
* Mark Brown <broonie@opensource.wolfsonmicro.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/platform_device.h>
#include <mach/irqs.h>
#include <mach/map.h>
#include <plat/devs.h>
static
struct
resource
s3c64xx_iis0_resource
[]
=
{
[
0
]
=
{
.
start
=
S3C64XX_PA_IIS0
,
.
end
=
S3C64XX_PA_IIS0
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
};
struct
platform_device
s3c64xx_device_iis0
=
{
.
name
=
"s3c64xx-iis"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis0_resource
),
.
resource
=
s3c64xx_iis0_resource
,
};
EXPORT_SYMBOL
(
s3c64xx_device_iis0
);
static
struct
resource
s3c64xx_iis1_resource
[]
=
{
[
0
]
=
{
.
start
=
S3C64XX_PA_IIS1
,
.
end
=
S3C64XX_PA_IIS1
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
};
struct
platform_device
s3c64xx_device_iis1
=
{
.
name
=
"s3c64xx-iis"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis1_resource
),
.
resource
=
s3c64xx_iis1_resource
,
};
EXPORT_SYMBOL
(
s3c64xx_device_iis1
);
static
struct
resource
s3c64xx_iisv4_resource
[]
=
{
[
0
]
=
{
.
start
=
S3C64XX_PA_IISV4
,
.
end
=
S3C64XX_PA_IISV4
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
};
struct
platform_device
s3c64xx_device_iisv4
=
{
.
name
=
"s3c64xx-iis-v4"
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iisv4_resource
),
.
resource
=
s3c64xx_iisv4_resource
,
};
EXPORT_SYMBOL
(
s3c64xx_device_iisv4
);
arch/arm/plat-s3c/include/plat/devs.h
View file @
413427b5
...
...
@@ -24,13 +24,16 @@ extern struct platform_device *s3c24xx_uart_src[];
extern
struct
platform_device
s3c_device_timer
[];
extern
struct
platform_device
s3c64xx_device_iis0
;
extern
struct
platform_device
s3c64xx_device_iis1
;
extern
struct
platform_device
s3c64xx_device_iisv4
;
extern
struct
platform_device
s3c_device_fb
;
extern
struct
platform_device
s3c_device_usb
;
extern
struct
platform_device
s3c_device_lcd
;
extern
struct
platform_device
s3c_device_wdt
;
extern
struct
platform_device
s3c_device_i2c0
;
extern
struct
platform_device
s3c_device_i2c1
;
extern
struct
platform_device
s3c_device_iis
;
extern
struct
platform_device
s3c_device_rtc
;
extern
struct
platform_device
s3c_device_adc
;
extern
struct
platform_device
s3c_device_sdi
;
...
...
arch/arm/plat-s3c64xx/Makefile
View file @
413427b5
...
...
@@ -23,6 +23,7 @@ obj-y += gpiolib.o
obj-$(CONFIG_CPU_S3C6400_INIT)
+=
s3c6400-init.o
obj-$(CONFIG_CPU_S3C6400_CLOCK)
+=
s3c6400-clock.o
obj-$(CONFIG_CPU_FREQ_S3C64XX)
+=
cpufreq.o
# PM support
...
...
arch/arm/plat-s3c64xx/cpufreq.c
0 → 100644
View file @
413427b5
/* linux/arch/arm/plat-s3c64xx/cpufreq.c
*
* Copyright 2009 Wolfson Microelectronics plc
*
* S3C64xx CPUfreq Support
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/regulator/consumer.h>
static
struct
clk
*
armclk
;
static
struct
regulator
*
vddarm
;
#ifdef CONFIG_CPU_S3C6410
struct
s3c64xx_dvfs
{
unsigned
int
vddarm_min
;
unsigned
int
vddarm_max
;
};
static
struct
s3c64xx_dvfs
s3c64xx_dvfs_table
[]
=
{
[
0
]
=
{
1000000
,
1000000
},
[
1
]
=
{
1000000
,
1050000
},
[
2
]
=
{
1050000
,
1100000
},
[
3
]
=
{
1050000
,
1150000
},
[
4
]
=
{
1250000
,
1350000
},
};
static
struct
cpufreq_frequency_table
s3c64xx_freq_table
[]
=
{
{
0
,
66000
},
{
0
,
133000
},
{
1
,
222000
},
{
1
,
266000
},
{
2
,
333000
},
{
2
,
400000
},
{
3
,
532000
},
{
3
,
533000
},
{
4
,
667000
},
{
0
,
CPUFREQ_TABLE_END
},
};
#endif
static
int
s3c64xx_cpufreq_verify_speed
(
struct
cpufreq_policy
*
policy
)
{
if
(
policy
->
cpu
!=
0
)
return
-
EINVAL
;
return
cpufreq_frequency_table_verify
(
policy
,
s3c64xx_freq_table
);
}
static
unsigned
int
s3c64xx_cpufreq_get_speed
(
unsigned
int
cpu
)
{
if
(
cpu
!=
0
)
return
0
;
return
clk_get_rate
(
armclk
)
/
1000
;
}
static
int
s3c64xx_cpufreq_set_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
)
{
int
ret
;
unsigned
int
i
;
struct
cpufreq_freqs
freqs
;
struct
s3c64xx_dvfs
*
dvfs
;
ret
=
cpufreq_frequency_table_target
(
policy
,
s3c64xx_freq_table
,
target_freq
,
relation
,
&
i
);
if
(
ret
!=
0
)
return
ret
;
freqs
.
cpu
=
0
;
freqs
.
old
=
clk_get_rate
(
armclk
)
/
1000
;
freqs
.
new
=
s3c64xx_freq_table
[
i
].
frequency
;
freqs
.
flags
=
0
;
dvfs
=
&
s3c64xx_dvfs_table
[
s3c64xx_freq_table
[
i
].
index
];
if
(
freqs
.
old
==
freqs
.
new
)
return
0
;
pr_debug
(
"cpufreq: Transition %d-%dkHz
\n
"
,
freqs
.
old
,
freqs
.
new
);
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
#ifdef CONFIG_REGULATOR
if
(
vddarm
&&
freqs
.
new
>
freqs
.
old
)
{
ret
=
regulator_set_voltage
(
vddarm
,
dvfs
->
vddarm_min
,
dvfs
->
vddarm_max
);
if
(
ret
!=
0
)
{
pr_err
(
"cpufreq: Failed to set VDDARM for %dkHz: %d
\n
"
,
freqs
.
new
,
ret
);
goto
err
;
}
}
#endif
ret
=
clk_set_rate
(
armclk
,
freqs
.
new
*
1000
);
if
(
ret
<
0
)
{
pr_err
(
"cpufreq: Failed to set rate %dkHz: %d
\n
"
,
freqs
.
new
,
ret
);
goto
err
;
}
#ifdef CONFIG_REGULATOR
if
(
vddarm
&&
freqs
.
new
<
freqs
.
old
)
{
ret
=
regulator_set_voltage
(
vddarm
,
dvfs
->
vddarm_min
,
dvfs
->
vddarm_max
);
if
(
ret
!=
0
)
{
pr_err
(
"cpufreq: Failed to set VDDARM for %dkHz: %d
\n
"
,
freqs
.
new
,
ret
);
goto
err_clk
;
}
}
#endif
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_POSTCHANGE
);
pr_debug
(
"cpufreq: Set actual frequency %lukHz
\n
"
,
clk_get_rate
(
armclk
)
/
1000
);
return
0
;
err_clk:
if
(
clk_set_rate
(
armclk
,
freqs
.
old
*
1000
)
<
0
)
pr_err
(
"Failed to restore original clock rate
\n
"
);
err:
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_POSTCHANGE
);
return
ret
;
}
#ifdef CONFIG_REGULATOR
static
void
__init
s3c64xx_cpufreq_constrain_voltages
(
void
)
{
int
count
,
v
,
i
,
found
;
struct
cpufreq_frequency_table
*
freq
;
struct
s3c64xx_dvfs
*
dvfs
;
count
=
regulator_count_voltages
(
vddarm
);
if
(
count
<
0
)
{
pr_err
(
"cpufreq: Unable to check supported voltages
\n
"
);
return
;
}
freq
=
s3c64xx_freq_table
;
while
(
freq
->
frequency
!=
CPUFREQ_TABLE_END
)
{
if
(
freq
->
frequency
==
CPUFREQ_ENTRY_INVALID
)
continue
;
dvfs
=
&
s3c64xx_dvfs_table
[
freq
->
index
];
found
=
0
;
for
(
i
=
0
;
i
<
count
;
i
++
)
{
v
=
regulator_list_voltage
(
vddarm
,
i
);
if
(
v
>=
dvfs
->
vddarm_min
&&
v
<=
dvfs
->
vddarm_max
)
found
=
1
;
}
if
(
!
found
)
{
pr_debug
(
"cpufreq: %dkHz unsupported by regulator
\n
"
,
freq
->
frequency
);
freq
->
frequency
=
CPUFREQ_ENTRY_INVALID
;
}
freq
++
;
}
}
#endif
static
int
__init
s3c64xx_cpufreq_driver_init
(
struct
cpufreq_policy
*
policy
)
{
int
ret
;
struct
cpufreq_frequency_table
*
freq
;
if
(
policy
->
cpu
!=
0
)
return
-
EINVAL
;
if
(
s3c64xx_freq_table
==
NULL
)
{
pr_err
(
"cpufreq: No frequency information for this CPU
\n
"
);
return
-
ENODEV
;
}
armclk
=
clk_get
(
NULL
,
"armclk"
);
if
(
IS_ERR
(
armclk
))
{
pr_err
(
"cpufreq: Unable to obtain ARMCLK: %ld
\n
"
,
PTR_ERR
(
armclk
));
return
PTR_ERR
(
armclk
);
}
#ifdef CONFIG_REGULATOR
vddarm
=
regulator_get
(
NULL
,
"vddarm"
);
if
(
IS_ERR
(
vddarm
))
{
ret
=
PTR_ERR
(
vddarm
);
pr_err
(
"cpufreq: Failed to obtain VDDARM: %d
\n
"
,
ret
);
pr_err
(
"cpufreq: Only frequency scaling available
\n
"
);
vddarm
=
NULL
;
}
else
{
s3c64xx_cpufreq_constrain_voltages
();
}
#endif
freq
=
s3c64xx_freq_table
;
while
(
freq
->
frequency
!=
CPUFREQ_TABLE_END
)
{
unsigned
long
r
;
/* Check for frequencies we can generate */
r
=
clk_round_rate
(
armclk
,
freq
->
frequency
*
1000
);
r
/=
1000
;
if
(
r
!=
freq
->
frequency
)
freq
->
frequency
=
CPUFREQ_ENTRY_INVALID
;
/* If we have no regulator then assume startup
* frequency is the maximum we can support. */
if
(
!
vddarm
&&
freq
->
frequency
>
s3c64xx_cpufreq_get_speed
(
0
))
freq
->
frequency
=
CPUFREQ_ENTRY_INVALID
;
freq
++
;
}
policy
->
cur
=
clk_get_rate
(
armclk
)
/
1000
;
/* Pick a conservative guess in ns: we'll need ~1 I2C/SPI
* write plus clock reprogramming. */
policy
->
cpuinfo
.
transition_latency
=
2
*
1000
*
1000
;
ret
=
cpufreq_frequency_table_cpuinfo
(
policy
,
s3c64xx_freq_table
);
if
(
ret
!=
0
)
{
pr_err
(
"cpufreq: Failed to configure frequency table: %d
\n
"
,
ret
);
regulator_put
(
vddarm
);
clk_put
(
armclk
);
}
return
ret
;
}
static
struct
cpufreq_driver
s3c64xx_cpufreq_driver
=
{
.
owner
=
THIS_MODULE
,
.
flags
=
0
,
.
verify
=
s3c64xx_cpufreq_verify_speed
,
.
target
=
s3c64xx_cpufreq_set_target
,
.
get
=
s3c64xx_cpufreq_get_speed
,
.
init
=
s3c64xx_cpufreq_driver_init
,
.
name
=
"s3c"
,
};
static
int
__init
s3c64xx_cpufreq_init
(
void
)
{
return
cpufreq_register_driver
(
&
s3c64xx_cpufreq_driver
);
}
module_init
(
s3c64xx_cpufreq_init
);
drivers/mmc/host/s3cmci.c
View file @
413427b5
...
...
@@ -794,7 +794,7 @@ static void s3cmci_dma_setup(struct s3cmci_host *host,
host
->
mem
->
start
+
host
->
sdidata
);
if
(
!
setup_ok
)
{
s3c2410_dma_config
(
host
->
dma
,
4
,
0
);
s3c2410_dma_config
(
host
->
dma
,
4
);
s3c2410_dma_set_buffdone_fn
(
host
->
dma
,
s3cmci_dma_done_callback
);
s3c2410_dma_setflags
(
host
->
dma
,
S3C2410_DMAF_AUTOSTART
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment