Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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