-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: 6597/1: Add basic architecture support for VIA/WonderMedia 85xx …
…SoC's This adds support for the family of Systems-on-Chip produced initially by VIA and now its subsidiary WonderMedia that have recently become widespread in lower-end Chinese ARM-based tablets and netbooks. Support is included for both VT8500 and WM8505, selectable by a configuration switch at kernel build time. Included are basic machine initialization files, register and interrupt definitions, support for the on-chip interrupt controller, high-precision OS timer, GPIO lines, necessary macros for early debug, pulse-width-modulated outputs control, as well as platform device configurations for the specific drivers implemented elsewhere. Signed-off-by: Alexey Charkov <alchark@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Alexey Charkov
authored and
Russell King
committed
Jan 25, 2011
1 parent
1bae4ce
commit 21f47fb
Showing
34 changed files
with
2,356 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* linux/arch/arm/boot/compressed/head-vt8500.S | ||
* | ||
* Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> | ||
* | ||
* VIA VT8500 specific tweaks. This is merged into head.S by the linker. | ||
* | ||
*/ | ||
|
||
#include <linux/linkage.h> | ||
#include <asm/mach-types.h> | ||
|
||
.section ".start", "ax" | ||
|
||
__VT8500_start: | ||
@ Compare the SCC ID register against a list of known values | ||
ldr r1, .SCCID | ||
ldr r3, [r1] | ||
|
||
@ VT8500 override | ||
ldr r4, .VT8500SCC | ||
cmp r3, r4 | ||
ldreq r7, .ID_BV07 | ||
beq .Lendvt8500 | ||
|
||
@ WM8505 override | ||
ldr r4, .WM8505SCC | ||
cmp r3, r4 | ||
ldreq r7, .ID_8505 | ||
beq .Lendvt8500 | ||
|
||
@ Otherwise, leave the bootloader's machine id untouched | ||
|
||
.SCCID: | ||
.word 0xd8120000 | ||
.VT8500SCC: | ||
.word 0x34000102 | ||
.WM8505SCC: | ||
.word 0x34260103 | ||
|
||
.ID_BV07: | ||
.word MACH_TYPE_BV07 | ||
.ID_8505: | ||
.word MACH_TYPE_WM8505_7IN_NETBOOK | ||
|
||
.Lendvt8500: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
if ARCH_VT8500 | ||
|
||
config VTWM_VERSION_VT8500 | ||
bool | ||
|
||
config VTWM_VERSION_WM8505 | ||
bool | ||
|
||
config MACH_BV07 | ||
bool "Benign BV07-8500 Mini Netbook" | ||
depends on ARCH_VT8500 | ||
select VTWM_VERSION_VT8500 | ||
help | ||
Add support for the inexpensive 7-inch netbooks sold by many | ||
Chinese distributors under various names. Note that there are | ||
many hardware implementations in identical exterior, make sure | ||
that yours is indeed based on a VIA VT8500 chip. | ||
|
||
config MACH_WM8505_7IN_NETBOOK | ||
bool "WM8505 7-inch generic netbook" | ||
depends on ARCH_VT8500 | ||
select VTWM_VERSION_WM8505 | ||
help | ||
Add support for the inexpensive 7-inch netbooks sold by many | ||
Chinese distributors under various names. Note that there are | ||
many hardware implementations in identical exterior, make sure | ||
that yours is indeed based on a WonderMedia WM8505 chip. | ||
|
||
comment "LCD panel size" | ||
|
||
config WMT_PANEL_800X480 | ||
bool "7-inch with 800x480 resolution" | ||
depends on (FB_VT8500 || FB_WM8505) | ||
default y | ||
help | ||
These are found in most of the netbooks in generic cases, as | ||
well as in Eken M001 tablets and possibly elsewhere. | ||
|
||
To select this panel at runtime, say y here and append | ||
'panel=800x480' to your kernel command line. Otherwise, the | ||
largest one available will be used. | ||
|
||
config WMT_PANEL_800X600 | ||
bool "8-inch with 800x600 resolution" | ||
depends on (FB_VT8500 || FB_WM8505) | ||
help | ||
These are found in Eken M003 tablets and possibly elsewhere. | ||
|
||
To select this panel at runtime, say y here and append | ||
'panel=800x600' to your kernel command line. Otherwise, the | ||
largest one available will be used. | ||
|
||
config WMT_PANEL_1024X576 | ||
bool "10-inch with 1024x576 resolution" | ||
depends on (FB_VT8500 || FB_WM8505) | ||
help | ||
These are found in CherryPal netbooks and possibly elsewhere. | ||
|
||
To select this panel at runtime, say y here and append | ||
'panel=1024x576' to your kernel command line. Otherwise, the | ||
largest one available will be used. | ||
|
||
config WMT_PANEL_1024X600 | ||
bool "10-inch with 1024x600 resolution" | ||
depends on (FB_VT8500 || FB_WM8505) | ||
help | ||
These are found in Eken M006 tablets and possibly elsewhere. | ||
|
||
To select this panel at runtime, say y here and append | ||
'panel=1024x600' to your kernel command line. Otherwise, the | ||
largest one available will be used. | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
obj-y += devices.o gpio.o irq.o timer.o | ||
|
||
obj-$(CONFIG_VTWM_VERSION_VT8500) += devices-vt8500.o | ||
obj-$(CONFIG_VTWM_VERSION_WM8505) += devices-wm8505.o | ||
|
||
obj-$(CONFIG_MACH_BV07) += bv07.o | ||
obj-$(CONFIG_MACH_WM8505_7IN_NETBOOK) += wm8505_7in.o | ||
|
||
obj-$(CONFIG_HAVE_PWM) += pwm.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
zreladdr-y := 0x00008000 | ||
params_phys-y := 0x00000100 | ||
initrd_phys-y := 0x01000000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* | ||
* arch/arm/mach-vt8500/bv07.c | ||
* | ||
* Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
#include <linux/io.h> | ||
#include <linux/pm.h> | ||
|
||
#include <asm/mach-types.h> | ||
#include <asm/mach/arch.h> | ||
|
||
#include "devices.h" | ||
|
||
static void __iomem *pmc_hiber; | ||
|
||
static struct platform_device *devices[] __initdata = { | ||
&vt8500_device_uart0, | ||
&vt8500_device_lcdc, | ||
&vt8500_device_ehci, | ||
&vt8500_device_ge_rops, | ||
&vt8500_device_pwm, | ||
&vt8500_device_pwmbl, | ||
&vt8500_device_rtc, | ||
}; | ||
|
||
static void vt8500_power_off(void) | ||
{ | ||
local_irq_disable(); | ||
writew(5, pmc_hiber); | ||
asm("mcr%? p15, 0, %0, c7, c0, 4" : : "r" (0)); | ||
} | ||
|
||
void __init bv07_init(void) | ||
{ | ||
#ifdef CONFIG_FB_VT8500 | ||
void __iomem *gpio_mux_reg = ioremap(wmt_gpio_base + 0x200, 4); | ||
if (gpio_mux_reg) { | ||
writel(readl(gpio_mux_reg) | 1, gpio_mux_reg); | ||
iounmap(gpio_mux_reg); | ||
} else { | ||
printk(KERN_ERR "Could not remap the GPIO mux register, display may not work properly!\n"); | ||
} | ||
#endif | ||
pmc_hiber = ioremap(wmt_pmc_base + 0x12, 2); | ||
if (pmc_hiber) | ||
pm_power_off = &vt8500_power_off; | ||
else | ||
printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n"); | ||
|
||
vt8500_set_resources(); | ||
platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
vt8500_gpio_init(); | ||
} | ||
|
||
MACHINE_START(BV07, "Benign BV07 Mini Netbook") | ||
.boot_params = 0x00000100, | ||
.reserve = vt8500_reserve_mem, | ||
.map_io = vt8500_map_io, | ||
.init_irq = vt8500_init_irq, | ||
.timer = &vt8500_timer, | ||
.init_machine = bv07_init, | ||
MACHINE_END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* linux/arch/arm/mach-vt8500/devices-vt8500.c | ||
* | ||
* Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> | ||
* | ||
* This software is licensed under the terms of the GNU General Public | ||
* License version 2, as published by the Free Software Foundation, and | ||
* may be copied, distributed, and modified under those terms. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
*/ | ||
|
||
#include <linux/platform_device.h> | ||
|
||
#include <mach/vt8500_regs.h> | ||
#include <mach/vt8500_irqs.h> | ||
#include <mach/i8042.h> | ||
#include "devices.h" | ||
|
||
void __init vt8500_set_resources(void) | ||
{ | ||
struct resource tmp[3]; | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_LCDC_BASE, SZ_1K); | ||
tmp[1] = wmt_irq_res(IRQ_LCDC); | ||
wmt_res_add(&vt8500_device_lcdc, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_UART0_BASE, 0x1040); | ||
tmp[1] = wmt_irq_res(IRQ_UART0); | ||
wmt_res_add(&vt8500_device_uart0, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_UART1_BASE, 0x1040); | ||
tmp[1] = wmt_irq_res(IRQ_UART1); | ||
wmt_res_add(&vt8500_device_uart1, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_UART2_BASE, 0x1040); | ||
tmp[1] = wmt_irq_res(IRQ_UART2); | ||
wmt_res_add(&vt8500_device_uart2, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_UART3_BASE, 0x1040); | ||
tmp[1] = wmt_irq_res(IRQ_UART3); | ||
wmt_res_add(&vt8500_device_uart3, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_EHCI_BASE, SZ_512); | ||
tmp[1] = wmt_irq_res(IRQ_EHCI); | ||
wmt_res_add(&vt8500_device_ehci, tmp, 2); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_GEGEA_BASE, SZ_256); | ||
wmt_res_add(&vt8500_device_ge_rops, tmp, 1); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_PWM_BASE, 0x44); | ||
wmt_res_add(&vt8500_device_pwm, tmp, 1); | ||
|
||
tmp[0] = wmt_mmio_res(VT8500_RTC_BASE, 0x2c); | ||
tmp[1] = wmt_irq_res(IRQ_RTC); | ||
tmp[2] = wmt_irq_res(IRQ_RTCSM); | ||
wmt_res_add(&vt8500_device_rtc, tmp, 3); | ||
} | ||
|
||
static void __init vt8500_set_externs(void) | ||
{ | ||
/* Non-resource-aware stuff */ | ||
wmt_ic_base = VT8500_IC_BASE; | ||
wmt_gpio_base = VT8500_GPIO_BASE; | ||
wmt_pmc_base = VT8500_PMC_BASE; | ||
wmt_i8042_base = VT8500_PS2_BASE; | ||
|
||
wmt_nr_irqs = VT8500_NR_IRQS; | ||
wmt_timer_irq = IRQ_PMCOS0; | ||
wmt_gpio_ext_irq[0] = IRQ_EXT0; | ||
wmt_gpio_ext_irq[1] = IRQ_EXT1; | ||
wmt_gpio_ext_irq[2] = IRQ_EXT2; | ||
wmt_gpio_ext_irq[3] = IRQ_EXT3; | ||
wmt_gpio_ext_irq[4] = IRQ_EXT4; | ||
wmt_gpio_ext_irq[5] = IRQ_EXT5; | ||
wmt_gpio_ext_irq[6] = IRQ_EXT6; | ||
wmt_gpio_ext_irq[7] = IRQ_EXT7; | ||
wmt_i8042_kbd_irq = IRQ_PS2KBD; | ||
wmt_i8042_aux_irq = IRQ_PS2MOUSE; | ||
} | ||
|
||
void __init vt8500_map_io(void) | ||
{ | ||
iotable_init(wmt_io_desc, ARRAY_SIZE(wmt_io_desc)); | ||
|
||
/* Should be done before interrupts and timers are initialized */ | ||
vt8500_set_externs(); | ||
} |
Oops, something went wrong.