mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-17 16:15:18 +00:00
ARM: s3c: remove most s3c64xx board support
All traditional board files except for MACH_WLF_CRAGG_6410 were marked as unused, so remove them now. Cc: Kwangwoo Lee <kwangwoo.lee@gmail.com> Cc: Peter Korsgaard <jacmet@sunsite.dk> Cc: Darius Augulis <augulis.darius@gmail.com> Cc: Maurus Cuelenaere <mcuelenaere@gmail.com> Cc: Ben Dooks <ben-linux@fluff.org> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
1ea35b3557
commit
743c8fbb90
14 changed files with 0 additions and 3226 deletions
|
@ -54,17 +54,6 @@ config S3C64XX_SETUP_SDHCI
|
|||
Internal configuration for default SDHCI setup for S3C6400 and
|
||||
S3C6410 SoCs.
|
||||
|
||||
config S3C64XX_DEV_ONENAND1
|
||||
bool
|
||||
help
|
||||
Compile in platform device definition for OneNAND1 controller
|
||||
|
||||
config SAMSUNG_DEV_BACKLIGHT
|
||||
bool
|
||||
depends on SAMSUNG_DEV_PWM
|
||||
help
|
||||
Compile in platform device definition LCD backlight with PWM Timer
|
||||
|
||||
# platform specific device setup
|
||||
|
||||
config S3C64XX_SETUP_I2C0
|
||||
|
@ -113,201 +102,6 @@ config S3C64XX_SETUP_USB_PHY
|
|||
|
||||
# S36400 Macchine support
|
||||
|
||||
config MACH_SMDK6400
|
||||
bool "SMDK6400"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6400
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C_DEV_HSMMC1
|
||||
help
|
||||
Machine support for the Samsung SMDK6400
|
||||
|
||||
# S3C6410 machine support
|
||||
|
||||
config MACH_ANW6410
|
||||
bool "A&W6410"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C_DEV_FB
|
||||
help
|
||||
Machine support for the A&W6410
|
||||
|
||||
config MACH_MINI6410
|
||||
bool "MINI6410"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_NAND
|
||||
select S3C_DEV_USB_HOST
|
||||
select SAMSUNG_DEV_ADC
|
||||
select SAMSUNG_DEV_TS
|
||||
help
|
||||
Machine support for the FriendlyARM MINI6410
|
||||
|
||||
config MACH_REAL6410
|
||||
bool "REAL6410"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_NAND
|
||||
select S3C_DEV_USB_HOST
|
||||
select SAMSUNG_DEV_ADC
|
||||
select SAMSUNG_DEV_TS
|
||||
help
|
||||
Machine support for the CoreWind REAL6410
|
||||
|
||||
config MACH_SMDK6410
|
||||
bool "SMDK6410"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C64XX_SETUP_I2C1
|
||||
select S3C64XX_SETUP_IDE
|
||||
select S3C64XX_SETUP_KEYPAD
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C64XX_SETUP_USB_PHY
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_I2C1
|
||||
select S3C_DEV_RTC
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C_DEV_USB_HSOTG
|
||||
select S3C_DEV_WDT
|
||||
select SAMSUNG_DEV_ADC
|
||||
select SAMSUNG_DEV_BACKLIGHT
|
||||
select SAMSUNG_DEV_IDE
|
||||
select SAMSUNG_DEV_KEYPAD
|
||||
select SAMSUNG_DEV_PWM
|
||||
select SAMSUNG_DEV_TS
|
||||
help
|
||||
Machine support for the Samsung SMDK6410
|
||||
|
||||
# At least some of the SMDK6410s were shipped with the card detect
|
||||
# for the MMC/SD slots connected to the same input. This means that
|
||||
# either the boards need to be altered to have channel0 to an alternate
|
||||
# configuration or that only one slot can be used.
|
||||
|
||||
choice
|
||||
prompt "SMDK6410 MMC/SD slot setup"
|
||||
depends on MACH_SMDK6410
|
||||
|
||||
config SMDK6410_SD_CH0
|
||||
bool "Use channel 0 only"
|
||||
depends on MACH_SMDK6410
|
||||
help
|
||||
Select CON7 (channel 0) as the MMC/SD slot, as
|
||||
at least some SMDK6410 boards come with the
|
||||
resistors fitted so that the card detects for
|
||||
channels 0 and 1 are the same.
|
||||
|
||||
config SMDK6410_SD_CH1
|
||||
bool "Use channel 1 only"
|
||||
depends on MACH_SMDK6410
|
||||
help
|
||||
Select CON6 (channel 1) as the MMC/SD slot, as
|
||||
at least some SMDK6410 boards come with the
|
||||
resistors fitted so that the card detects for
|
||||
channels 0 and 1 are the same.
|
||||
|
||||
endchoice
|
||||
|
||||
config SMDK6410_WM1190_EV1
|
||||
bool "Support Wolfson Microelectronics 1190-EV1 PMIC card"
|
||||
depends on MACH_SMDK6410
|
||||
depends on I2C=y
|
||||
select MFD_WM8350_I2C
|
||||
select REGULATOR
|
||||
select REGULATOR_WM8350
|
||||
help
|
||||
The Wolfson Microelectronics 1190-EV1 is a WM835x based PMIC
|
||||
and audio daughtercard for the Samsung SMDK6410 reference
|
||||
platform. Enabling this option will build support for this
|
||||
module into the kernel. The presence of the module will be
|
||||
detected at runtime so the resulting kernel can be used
|
||||
with or without the 1190-EV1 fitted.
|
||||
|
||||
config SMDK6410_WM1192_EV1
|
||||
bool "Support Wolfson Microelectronics 1192-EV1 PMIC card"
|
||||
depends on MACH_SMDK6410
|
||||
depends on I2C=y
|
||||
select MFD_WM831X
|
||||
select MFD_WM831X_I2C
|
||||
select REGULATOR
|
||||
select REGULATOR_WM831X
|
||||
help
|
||||
The Wolfson Microelectronics 1192-EV1 is a WM831x based PMIC
|
||||
daughtercard for the Samsung SMDK6410 reference platform.
|
||||
Enabling this option will build support for this module into
|
||||
the kernel. The presence of the daughtercard will be
|
||||
detected at runtime so the resulting kernel can be used
|
||||
with or without the 1192-EV1 fitted.
|
||||
|
||||
config MACH_NCP
|
||||
bool "NCP"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_I2C1
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_I2C1
|
||||
help
|
||||
Machine support for the Samsung NCP
|
||||
|
||||
config MACH_HMT
|
||||
bool "Airgoo HMT"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_NAND
|
||||
select S3C_DEV_USB_HOST
|
||||
select SAMSUNG_DEV_PWM
|
||||
help
|
||||
Machine support for the Airgoo HMT
|
||||
|
||||
config MACH_SMARTQ
|
||||
bool
|
||||
select CPU_S3C6410
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C64XX_SETUP_USB_PHY
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_HSMMC2
|
||||
select S3C_DEV_HWMON
|
||||
select S3C_DEV_RTC
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C_DEV_USB_HSOTG
|
||||
select SAMSUNG_DEV_ADC
|
||||
select SAMSUNG_DEV_PWM
|
||||
select SAMSUNG_DEV_TS
|
||||
help
|
||||
Shared machine support for SmartQ 5/7
|
||||
|
||||
config MACH_SMARTQ5
|
||||
bool "SmartQ 5"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select MACH_SMARTQ
|
||||
help
|
||||
Machine support for the SmartQ 5
|
||||
|
||||
config MACH_SMARTQ7
|
||||
bool "SmartQ 7"
|
||||
depends on ATAGS && UNUSED_BOARD_FILES
|
||||
select MACH_SMARTQ
|
||||
help
|
||||
Machine support for the SmartQ 7
|
||||
|
||||
config MACH_WLF_CRAGG_6410
|
||||
bool "Wolfson Cragganmore 6410"
|
||||
depends on ATAGS
|
||||
|
|
|
@ -39,20 +39,7 @@ obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio-s3c64xx.o
|
|||
obj-$(CONFIG_S3C64XX_SETUP_SPI) += setup-spi-s3c64xx.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_USB_PHY) += setup-usb-phy-s3c64xx.o
|
||||
|
||||
obj-$(CONFIG_SAMSUNG_DEV_BACKLIGHT) += dev-backlight-s3c64xx.o
|
||||
|
||||
# Machine support
|
||||
|
||||
obj-$(CONFIG_MACH_ANW6410) += mach-anw6410.o
|
||||
obj-$(CONFIG_MACH_HMT) += mach-hmt.o
|
||||
obj-$(CONFIG_MACH_MINI6410) += mach-mini6410.o
|
||||
obj-$(CONFIG_MACH_NCP) += mach-ncp.o
|
||||
obj-$(CONFIG_MACH_REAL6410) += mach-real6410.o
|
||||
obj-$(CONFIG_MACH_SMARTQ) += mach-smartq.o
|
||||
obj-$(CONFIG_MACH_SMARTQ5) += mach-smartq5.o
|
||||
obj-$(CONFIG_MACH_SMARTQ7) += mach-smartq7.o
|
||||
obj-$(CONFIG_MACH_SMDK6400) += mach-smdk6400.o
|
||||
obj-$(CONFIG_MACH_SMDK6410) += mach-smdk6410.o
|
||||
obj-$(CONFIG_MACH_WLF_CRAGG_6410) += mach-crag6410.o mach-crag6410-module.o
|
||||
endif
|
||||
|
||||
|
|
|
@ -1,137 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright (c) 2011 Samsung Electronics Co., Ltd.
|
||||
// http://www.samsung.com
|
||||
//
|
||||
// Common infrastructure for PWM Backlight for Samsung boards
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
|
||||
#include "devs.h"
|
||||
#include "gpio-cfg.h"
|
||||
|
||||
#include "backlight-s3c64xx.h"
|
||||
|
||||
struct samsung_bl_drvdata {
|
||||
struct platform_pwm_backlight_data plat_data;
|
||||
struct samsung_bl_gpio_info *gpio_info;
|
||||
};
|
||||
|
||||
static int samsung_bl_init(struct device *dev)
|
||||
{
|
||||
int ret = 0;
|
||||
struct platform_pwm_backlight_data *pdata = dev->platform_data;
|
||||
struct samsung_bl_drvdata *drvdata = container_of(pdata,
|
||||
struct samsung_bl_drvdata, plat_data);
|
||||
struct samsung_bl_gpio_info *bl_gpio_info = drvdata->gpio_info;
|
||||
|
||||
ret = gpio_request(bl_gpio_info->no, "Backlight");
|
||||
if (ret) {
|
||||
printk(KERN_ERR "failed to request GPIO for LCD Backlight\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Configure GPIO pin with specific GPIO function for PWM timer */
|
||||
s3c_gpio_cfgpin(bl_gpio_info->no, bl_gpio_info->func);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void samsung_bl_exit(struct device *dev)
|
||||
{
|
||||
struct platform_pwm_backlight_data *pdata = dev->platform_data;
|
||||
struct samsung_bl_drvdata *drvdata = container_of(pdata,
|
||||
struct samsung_bl_drvdata, plat_data);
|
||||
struct samsung_bl_gpio_info *bl_gpio_info = drvdata->gpio_info;
|
||||
|
||||
s3c_gpio_cfgpin(bl_gpio_info->no, S3C_GPIO_OUTPUT);
|
||||
gpio_free(bl_gpio_info->no);
|
||||
}
|
||||
|
||||
/* Initialize few important fields of platform_pwm_backlight_data
|
||||
* structure with default values. These fields can be overridden by
|
||||
* board-specific values sent from machine file.
|
||||
* For ease of operation, these fields are initialized with values
|
||||
* used by most samsung boards.
|
||||
* Users has the option of sending info about other parameters
|
||||
* for their specific boards
|
||||
*/
|
||||
|
||||
static struct samsung_bl_drvdata samsung_dfl_bl_data __initdata = {
|
||||
.plat_data = {
|
||||
.max_brightness = 255,
|
||||
.dft_brightness = 255,
|
||||
.init = samsung_bl_init,
|
||||
.exit = samsung_bl_exit,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device samsung_dfl_bl_device __initdata = {
|
||||
.name = "pwm-backlight",
|
||||
};
|
||||
|
||||
/* samsung_bl_set - Set board specific data (if any) provided by user for
|
||||
* PWM Backlight control and register specific PWM and backlight device.
|
||||
* @gpio_info: structure containing GPIO info for PWM timer
|
||||
* @bl_data: structure containing Backlight control data
|
||||
*/
|
||||
void __init samsung_bl_set(struct samsung_bl_gpio_info *gpio_info,
|
||||
struct platform_pwm_backlight_data *bl_data)
|
||||
{
|
||||
int ret = 0;
|
||||
struct platform_device *samsung_bl_device;
|
||||
struct samsung_bl_drvdata *samsung_bl_drvdata;
|
||||
struct platform_pwm_backlight_data *samsung_bl_data;
|
||||
|
||||
samsung_bl_device = kmemdup(&samsung_dfl_bl_device,
|
||||
sizeof(struct platform_device), GFP_KERNEL);
|
||||
if (!samsung_bl_device)
|
||||
return;
|
||||
|
||||
samsung_bl_drvdata = kmemdup(&samsung_dfl_bl_data,
|
||||
sizeof(samsung_dfl_bl_data), GFP_KERNEL);
|
||||
if (!samsung_bl_drvdata)
|
||||
goto err_data;
|
||||
|
||||
samsung_bl_device->dev.platform_data = &samsung_bl_drvdata->plat_data;
|
||||
samsung_bl_drvdata->gpio_info = gpio_info;
|
||||
samsung_bl_data = &samsung_bl_drvdata->plat_data;
|
||||
|
||||
/* Copy board specific data provided by user */
|
||||
samsung_bl_device->dev.parent = &samsung_device_pwm.dev;
|
||||
|
||||
if (bl_data->max_brightness)
|
||||
samsung_bl_data->max_brightness = bl_data->max_brightness;
|
||||
if (bl_data->dft_brightness)
|
||||
samsung_bl_data->dft_brightness = bl_data->dft_brightness;
|
||||
if (bl_data->lth_brightness)
|
||||
samsung_bl_data->lth_brightness = bl_data->lth_brightness;
|
||||
if (bl_data->init)
|
||||
samsung_bl_data->init = bl_data->init;
|
||||
if (bl_data->notify)
|
||||
samsung_bl_data->notify = bl_data->notify;
|
||||
if (bl_data->notify_after)
|
||||
samsung_bl_data->notify_after = bl_data->notify_after;
|
||||
if (bl_data->exit)
|
||||
samsung_bl_data->exit = bl_data->exit;
|
||||
if (bl_data->check_fb)
|
||||
samsung_bl_data->check_fb = bl_data->check_fb;
|
||||
|
||||
/* Register the Backlight dev */
|
||||
ret = platform_device_register(samsung_bl_device);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "failed to register backlight device: %d\n", ret);
|
||||
goto err_plat_reg2;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
err_plat_reg2:
|
||||
kfree(samsung_bl_data);
|
||||
err_data:
|
||||
kfree(samsung_bl_device);
|
||||
}
|
|
@ -1,230 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright 2008 Openmoko, Inc.
|
||||
// Copyright 2008 Simtec Electronics
|
||||
// Ben Dooks <ben@simtec.co.uk>
|
||||
// http://armlinux.simtec.co.uk/
|
||||
// Copyright 2009 Kwangwoo Lee
|
||||
// Kwangwoo Lee <kwangwoo.lee@gmail.com>
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dm9000.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
#include <video/samsung_fimd.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include "map.h"
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "fb.h"
|
||||
|
||||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
#include "irqs.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "regs-modem-s3c64xx.h"
|
||||
|
||||
/* DM9000 */
|
||||
#define ANW6410_PA_DM9000 (0x18000000)
|
||||
|
||||
/* A hardware buffer to control external devices is mapped at 0x30000000.
|
||||
* It can not be read. So current status must be kept in anw6410_extdev_status.
|
||||
*/
|
||||
#define ANW6410_VA_EXTDEV S3C_ADDR(0x02000000)
|
||||
#define ANW6410_PA_EXTDEV (0x30000000)
|
||||
|
||||
#define ANW6410_EN_DM9000 (1<<11)
|
||||
#define ANW6410_EN_LCD (1<<14)
|
||||
|
||||
static __u32 anw6410_extdev_status;
|
||||
|
||||
static struct s3c2410_uartcfg anw6410_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = 0x3c5,
|
||||
.ulcon = 0x03,
|
||||
.ufcon = 0x51,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = 0x3c5,
|
||||
.ulcon = 0x03,
|
||||
.ufcon = 0x51,
|
||||
},
|
||||
};
|
||||
|
||||
/* framebuffer and LCD setup. */
|
||||
static void __init anw6410_lcd_mode_set(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
/* set the LCD type */
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the LCD bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
/* GPF1 = LCD panel power
|
||||
* GPF4 = LCD backlight control
|
||||
*/
|
||||
static void anw6410_lcd_power_set(struct plat_lcd_data *pd,
|
||||
unsigned int power)
|
||||
{
|
||||
if (power) {
|
||||
anw6410_extdev_status |= (ANW6410_EN_LCD << 16);
|
||||
__raw_writel(anw6410_extdev_status, ANW6410_VA_EXTDEV);
|
||||
|
||||
gpio_direction_output(S3C64XX_GPF(1), 1);
|
||||
gpio_direction_output(S3C64XX_GPF(4), 1);
|
||||
} else {
|
||||
anw6410_extdev_status &= ~(ANW6410_EN_LCD << 16);
|
||||
__raw_writel(anw6410_extdev_status, ANW6410_VA_EXTDEV);
|
||||
|
||||
gpio_direction_output(S3C64XX_GPF(1), 0);
|
||||
gpio_direction_output(S3C64XX_GPF(4), 0);
|
||||
}
|
||||
}
|
||||
|
||||
static struct plat_lcd_data anw6410_lcd_power_data = {
|
||||
.set_power = anw6410_lcd_power_set,
|
||||
};
|
||||
|
||||
static struct platform_device anw6410_lcd_powerdev = {
|
||||
.name = "platform-lcd",
|
||||
.dev.parent = &s3c_device_fb.dev,
|
||||
.dev.platform_data = &anw6410_lcd_power_data,
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win anw6410_fb_win0 = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode anw6410_lcd_timing = {
|
||||
.left_margin = 8,
|
||||
.right_margin = 13,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
|
||||
static struct s3c_fb_platdata anw6410_lcd_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &anw6410_lcd_timing,
|
||||
.win[0] = &anw6410_fb_win0,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
};
|
||||
|
||||
/* DM9000AEP 10/100 ethernet controller */
|
||||
static void __init anw6410_dm9000_enable(void)
|
||||
{
|
||||
anw6410_extdev_status |= (ANW6410_EN_DM9000 << 16);
|
||||
__raw_writel(anw6410_extdev_status, ANW6410_VA_EXTDEV);
|
||||
}
|
||||
|
||||
static struct resource anw6410_dm9000_resource[] = {
|
||||
[0] = DEFINE_RES_MEM(ANW6410_PA_DM9000, 4),
|
||||
[1] = DEFINE_RES_MEM(ANW6410_PA_DM9000 + 4, 501),
|
||||
[2] = DEFINE_RES_NAMED(IRQ_EINT(15), 1, NULL, IORESOURCE_IRQ \
|
||||
| IRQF_TRIGGER_HIGH),
|
||||
};
|
||||
|
||||
static struct dm9000_plat_data anw6410_dm9000_pdata = {
|
||||
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
|
||||
/* dev_addr can be set to provide hwaddr. */
|
||||
};
|
||||
|
||||
static struct platform_device anw6410_device_eth = {
|
||||
.name = "dm9000",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(anw6410_dm9000_resource),
|
||||
.resource = anw6410_dm9000_resource,
|
||||
.dev = {
|
||||
.platform_data = &anw6410_dm9000_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct map_desc anw6410_iodesc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)ANW6410_VA_EXTDEV,
|
||||
.pfn = __phys_to_pfn(ANW6410_PA_EXTDEV),
|
||||
.length = SZ_64K,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *anw6410_devices[] __initdata = {
|
||||
&s3c_device_fb,
|
||||
&anw6410_lcd_powerdev,
|
||||
&anw6410_device_eth,
|
||||
};
|
||||
|
||||
static void __init anw6410_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(anw6410_iodesc, ARRAY_SIZE(anw6410_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(anw6410_uartcfgs, ARRAY_SIZE(anw6410_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
|
||||
anw6410_lcd_mode_set();
|
||||
}
|
||||
|
||||
static void __init anw6410_machine_init(void)
|
||||
{
|
||||
s3c_fb_set_platdata(&anw6410_lcd_pdata);
|
||||
|
||||
gpio_request(S3C64XX_GPF(1), "panel power");
|
||||
gpio_request(S3C64XX_GPF(4), "LCD backlight");
|
||||
|
||||
anw6410_dm9000_enable();
|
||||
|
||||
platform_add_devices(anw6410_devices, ARRAY_SIZE(anw6410_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(ANW6410, "A&W6410")
|
||||
/* Maintainer: Kwangwoo Lee <kwangwoo.lee@gmail.com> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = anw6410_map_io,
|
||||
.init_machine = anw6410_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,282 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// mach-hmt.c - Platform code for Airgoo HMT
|
||||
//
|
||||
// Copyright 2009 Peter Korsgaard <jacmet@sunsite.dk>
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/pwm.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include <video/samsung_fimd.h>
|
||||
#include "map.h"
|
||||
#include "irqs.h"
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "gpio-samsung.h"
|
||||
#include "fb.h"
|
||||
#include <linux/platform_data/mtd-nand-s3c2410.h>
|
||||
|
||||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
|
||||
#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
|
||||
|
||||
static struct s3c2410_uartcfg hmt_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pwm_lookup hmt_pwm_lookup[] = {
|
||||
PWM_LOOKUP("samsung-pwm", 1, "pwm-backlight.0", NULL,
|
||||
1000000000 / (100 * 256 * 20), PWM_POLARITY_NORMAL),
|
||||
};
|
||||
|
||||
static int hmt_bl_init(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPB(4), "lcd backlight enable");
|
||||
if (!ret)
|
||||
ret = gpio_direction_output(S3C64XX_GPB(4), 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hmt_bl_notify(struct device *dev, int brightness)
|
||||
{
|
||||
/*
|
||||
* translate from CIELUV/CIELAB L*->brightness, E.G. from
|
||||
* perceived luminance to light output. Assumes range 0..25600
|
||||
*/
|
||||
if (brightness < 0x800) {
|
||||
/* Y = Yn * L / 903.3 */
|
||||
brightness = (100*256 * brightness + 231245/2) / 231245;
|
||||
} else {
|
||||
/* Y = Yn * ((L + 16) / 116 )^3 */
|
||||
int t = (brightness*4 + 16*1024 + 58)/116;
|
||||
brightness = 25 * ((t * t * t + 0x100000/2) / 0x100000);
|
||||
}
|
||||
|
||||
gpio_set_value(S3C64XX_GPB(4), brightness);
|
||||
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void hmt_bl_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(S3C64XX_GPB(4));
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data hmt_backlight_data = {
|
||||
.max_brightness = 100 * 256,
|
||||
.dft_brightness = 40 * 256,
|
||||
.init = hmt_bl_init,
|
||||
.notify = hmt_bl_notify,
|
||||
.exit = hmt_bl_exit,
|
||||
|
||||
};
|
||||
|
||||
static struct platform_device hmt_backlight_device = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &samsung_device_pwm.dev,
|
||||
.platform_data = &hmt_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win hmt_fb_win0 = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode hmt_lcd_timing = {
|
||||
.left_margin = 8,
|
||||
.right_margin = 13,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
|
||||
static struct s3c_fb_platdata hmt_lcd_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &hmt_lcd_timing,
|
||||
.win[0] = &hmt_fb_win0,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
};
|
||||
|
||||
static struct mtd_partition hmt_nand_part[] = {
|
||||
[0] = {
|
||||
.name = "uboot",
|
||||
.size = SZ_512K,
|
||||
.offset = 0,
|
||||
},
|
||||
[1] = {
|
||||
.name = "uboot-env1",
|
||||
.size = SZ_256K,
|
||||
.offset = SZ_512K,
|
||||
},
|
||||
[2] = {
|
||||
.name = "uboot-env2",
|
||||
.size = SZ_256K,
|
||||
.offset = SZ_512K + SZ_256K,
|
||||
},
|
||||
[3] = {
|
||||
.name = "kernel",
|
||||
.size = SZ_2M,
|
||||
.offset = SZ_1M,
|
||||
},
|
||||
[4] = {
|
||||
.name = "rootfs",
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = SZ_1M + SZ_2M,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_nand_set hmt_nand_sets[] = {
|
||||
[0] = {
|
||||
.name = "nand",
|
||||
.nr_chips = 1,
|
||||
.nr_partitions = ARRAY_SIZE(hmt_nand_part),
|
||||
.partitions = hmt_nand_part,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_platform_nand hmt_nand_info = {
|
||||
.tacls = 25,
|
||||
.twrph0 = 55,
|
||||
.twrph1 = 40,
|
||||
.nr_sets = ARRAY_SIZE(hmt_nand_sets),
|
||||
.sets = hmt_nand_sets,
|
||||
.engine_type = NAND_ECC_ENGINE_TYPE_SOFT,
|
||||
};
|
||||
|
||||
static struct gpio_led hmt_leds[] = {
|
||||
{ /* left function keys */
|
||||
.name = "left:blue",
|
||||
.gpio = S3C64XX_GPO(12),
|
||||
.default_trigger = "default-on",
|
||||
},
|
||||
{ /* right function keys - red */
|
||||
.name = "right:red",
|
||||
.gpio = S3C64XX_GPO(13),
|
||||
},
|
||||
{ /* right function keys - green */
|
||||
.name = "right:green",
|
||||
.gpio = S3C64XX_GPO(14),
|
||||
},
|
||||
{ /* right function keys - blue */
|
||||
.name = "right:blue",
|
||||
.gpio = S3C64XX_GPO(15),
|
||||
.default_trigger = "default-on",
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data hmt_led_data = {
|
||||
.num_leds = ARRAY_SIZE(hmt_leds),
|
||||
.leds = hmt_leds,
|
||||
};
|
||||
|
||||
static struct platform_device hmt_leds_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev.platform_data = &hmt_led_data,
|
||||
};
|
||||
|
||||
static struct map_desc hmt_iodesc[] = {};
|
||||
|
||||
static struct platform_device *hmt_devices[] __initdata = {
|
||||
&s3c_device_i2c0,
|
||||
&s3c_device_nand,
|
||||
&s3c_device_fb,
|
||||
&s3c_device_ohci,
|
||||
&samsung_device_pwm,
|
||||
&hmt_backlight_device,
|
||||
&hmt_leds_device,
|
||||
};
|
||||
|
||||
static void __init hmt_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(hmt_iodesc, ARRAY_SIZE(hmt_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(hmt_uartcfgs, ARRAY_SIZE(hmt_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
}
|
||||
|
||||
static void __init hmt_machine_init(void)
|
||||
{
|
||||
s3c_i2c0_set_platdata(NULL);
|
||||
s3c_fb_set_platdata(&hmt_lcd_pdata);
|
||||
s3c_nand_set_platdata(&hmt_nand_info);
|
||||
|
||||
gpio_request(S3C64XX_GPC(7), "usb power");
|
||||
gpio_direction_output(S3C64XX_GPC(7), 0);
|
||||
gpio_request(S3C64XX_GPM(0), "usb power");
|
||||
gpio_direction_output(S3C64XX_GPM(0), 1);
|
||||
gpio_request(S3C64XX_GPK(7), "usb power");
|
||||
gpio_direction_output(S3C64XX_GPK(7), 1);
|
||||
gpio_request(S3C64XX_GPF(13), "usb power");
|
||||
gpio_direction_output(S3C64XX_GPF(13), 1);
|
||||
|
||||
pwm_add_table(hmt_pwm_lookup, ARRAY_SIZE(hmt_pwm_lookup));
|
||||
platform_add_devices(hmt_devices, ARRAY_SIZE(hmt_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(HMT, "Airgoo-HMT")
|
||||
/* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = hmt_map_io,
|
||||
.init_machine = hmt_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,365 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright 2010 Darius Augulis <augulis.darius@gmail.com>
|
||||
// Copyright 2008 Openmoko, Inc.
|
||||
// Copyright 2008 Simtec Electronics
|
||||
// Ben Dooks <ben@simtec.co.uk>
|
||||
// http://armlinux.simtec.co.uk/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/dm9000.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "map.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include <linux/soc/samsung/s3c-adc.h>
|
||||
#include "cpu.h"
|
||||
#include "devs.h"
|
||||
#include "fb.h"
|
||||
#include <linux/platform_data/mtd-nand-s3c2410.h>
|
||||
#include <linux/platform_data/mmc-sdhci-s3c.h>
|
||||
#include "sdhci.h"
|
||||
#include <linux/platform_data/touchscreen-s3c2410.h>
|
||||
#include "irqs.h"
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
#include <video/samsung_fimd.h>
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "regs-modem-s3c64xx.h"
|
||||
#include "regs-srom-s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB)
|
||||
#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
|
||||
|
||||
static struct s3c2410_uartcfg mini6410_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[3] = {
|
||||
.hwport = 3,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
/* DM9000AEP 10/100 ethernet controller */
|
||||
|
||||
static struct resource mini6410_dm9k_resource[] = {
|
||||
[0] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN1, 2),
|
||||
[1] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN1 + 4, 2),
|
||||
[2] = DEFINE_RES_NAMED(S3C_EINT(7), 1, NULL, IORESOURCE_IRQ \
|
||||
| IORESOURCE_IRQ_HIGHLEVEL),
|
||||
};
|
||||
|
||||
static struct dm9000_plat_data mini6410_dm9k_pdata = {
|
||||
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
|
||||
};
|
||||
|
||||
static struct platform_device mini6410_device_eth = {
|
||||
.name = "dm9000",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(mini6410_dm9k_resource),
|
||||
.resource = mini6410_dm9k_resource,
|
||||
.dev = {
|
||||
.platform_data = &mini6410_dm9k_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mtd_partition mini6410_nand_part[] = {
|
||||
[0] = {
|
||||
.name = "uboot",
|
||||
.size = SZ_1M,
|
||||
.offset = 0,
|
||||
},
|
||||
[1] = {
|
||||
.name = "kernel",
|
||||
.size = SZ_2M,
|
||||
.offset = SZ_1M,
|
||||
},
|
||||
[2] = {
|
||||
.name = "rootfs",
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = SZ_1M + SZ_2M,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_nand_set mini6410_nand_sets[] = {
|
||||
[0] = {
|
||||
.name = "nand",
|
||||
.nr_chips = 1,
|
||||
.nr_partitions = ARRAY_SIZE(mini6410_nand_part),
|
||||
.partitions = mini6410_nand_part,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_platform_nand mini6410_nand_info = {
|
||||
.tacls = 25,
|
||||
.twrph0 = 55,
|
||||
.twrph1 = 40,
|
||||
.nr_sets = ARRAY_SIZE(mini6410_nand_sets),
|
||||
.sets = mini6410_nand_sets,
|
||||
.engine_type = NAND_ECC_ENGINE_TYPE_SOFT,
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win mini6410_lcd_type0_fb_win = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 480,
|
||||
.yres = 272,
|
||||
};
|
||||
|
||||
static struct fb_videomode mini6410_lcd_type0_timing = {
|
||||
/* 4.3" 480x272 */
|
||||
.left_margin = 3,
|
||||
.right_margin = 2,
|
||||
.upper_margin = 1,
|
||||
.lower_margin = 1,
|
||||
.hsync_len = 40,
|
||||
.vsync_len = 1,
|
||||
.xres = 480,
|
||||
.yres = 272,
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win mini6410_lcd_type1_fb_win = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode mini6410_lcd_type1_timing = {
|
||||
/* 7.0" 800x480 */
|
||||
.left_margin = 8,
|
||||
.right_margin = 13,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct s3c_fb_platdata mini6410_lcd_pdata[] __initdata = {
|
||||
{
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &mini6410_lcd_type0_timing,
|
||||
.win[0] = &mini6410_lcd_type0_fb_win,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
}, {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &mini6410_lcd_type1_timing,
|
||||
.win[0] = &mini6410_lcd_type1_fb_win,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
static void mini6410_lcd_power_set(struct plat_lcd_data *pd,
|
||||
unsigned int power)
|
||||
{
|
||||
if (power)
|
||||
gpio_direction_output(S3C64XX_GPE(0), 1);
|
||||
else
|
||||
gpio_direction_output(S3C64XX_GPE(0), 0);
|
||||
}
|
||||
|
||||
static struct plat_lcd_data mini6410_lcd_power_data = {
|
||||
.set_power = mini6410_lcd_power_set,
|
||||
};
|
||||
|
||||
static struct platform_device mini6410_lcd_powerdev = {
|
||||
.name = "platform-lcd",
|
||||
.dev.parent = &s3c_device_fb.dev,
|
||||
.dev.platform_data = &mini6410_lcd_power_data,
|
||||
};
|
||||
|
||||
static struct s3c_sdhci_platdata mini6410_hsmmc1_pdata = {
|
||||
.max_width = 4,
|
||||
.cd_type = S3C_SDHCI_CD_GPIO,
|
||||
.ext_cd_gpio = S3C64XX_GPN(10),
|
||||
.ext_cd_gpio_invert = true,
|
||||
};
|
||||
|
||||
static struct platform_device *mini6410_devices[] __initdata = {
|
||||
&mini6410_device_eth,
|
||||
&s3c_device_hsmmc0,
|
||||
&s3c_device_hsmmc1,
|
||||
&s3c_device_ohci,
|
||||
&s3c_device_nand,
|
||||
&s3c_device_fb,
|
||||
&mini6410_lcd_powerdev,
|
||||
&s3c_device_adc,
|
||||
};
|
||||
|
||||
static void __init mini6410_map_io(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
s3c64xx_init_io(NULL, 0);
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(mini6410_uartcfgs, ARRAY_SIZE(mini6410_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
|
||||
/* set the LCD type */
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the LCD bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
/*
|
||||
* mini6410_features string
|
||||
*
|
||||
* 0-9 LCD configuration
|
||||
*
|
||||
*/
|
||||
static char mini6410_features_str[12] __initdata = "0";
|
||||
|
||||
static int __init mini6410_features_setup(char *str)
|
||||
{
|
||||
if (str)
|
||||
strscpy(mini6410_features_str, str,
|
||||
sizeof(mini6410_features_str));
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("mini6410=", mini6410_features_setup);
|
||||
|
||||
#define FEATURE_SCREEN (1 << 0)
|
||||
|
||||
struct mini6410_features_t {
|
||||
int done;
|
||||
int lcd_index;
|
||||
};
|
||||
|
||||
static void mini6410_parse_features(
|
||||
struct mini6410_features_t *features,
|
||||
const char *features_str)
|
||||
{
|
||||
const char *fp = features_str;
|
||||
|
||||
features->done = 0;
|
||||
features->lcd_index = 0;
|
||||
|
||||
while (*fp) {
|
||||
char f = *fp++;
|
||||
|
||||
switch (f) {
|
||||
case '0'...'9': /* tft screen */
|
||||
if (features->done & FEATURE_SCREEN) {
|
||||
printk(KERN_INFO "MINI6410: '%c' ignored, "
|
||||
"screen type already set\n", f);
|
||||
} else {
|
||||
int li = f - '0';
|
||||
if (li >= ARRAY_SIZE(mini6410_lcd_pdata))
|
||||
printk(KERN_INFO "MINI6410: '%c' out "
|
||||
"of range LCD mode\n", f);
|
||||
else {
|
||||
features->lcd_index = li;
|
||||
}
|
||||
}
|
||||
features->done |= FEATURE_SCREEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void __init mini6410_machine_init(void)
|
||||
{
|
||||
u32 cs1;
|
||||
struct mini6410_features_t features = { 0 };
|
||||
|
||||
printk(KERN_INFO "MINI6410: Option string mini6410=%s\n",
|
||||
mini6410_features_str);
|
||||
|
||||
/* Parse the feature string */
|
||||
mini6410_parse_features(&features, mini6410_features_str);
|
||||
|
||||
printk(KERN_INFO "MINI6410: selected LCD display is %dx%d\n",
|
||||
mini6410_lcd_pdata[features.lcd_index].win[0]->xres,
|
||||
mini6410_lcd_pdata[features.lcd_index].win[0]->yres);
|
||||
|
||||
s3c_nand_set_platdata(&mini6410_nand_info);
|
||||
s3c_fb_set_platdata(&mini6410_lcd_pdata[features.lcd_index]);
|
||||
s3c_sdhci1_set_platdata(&mini6410_hsmmc1_pdata);
|
||||
s3c64xx_ts_set_platdata(NULL);
|
||||
|
||||
/* configure nCS1 width to 16 bits */
|
||||
|
||||
cs1 = __raw_readl(S3C64XX_SROM_BW) &
|
||||
~(S3C64XX_SROM_BW__CS_MASK << S3C64XX_SROM_BW__NCS1__SHIFT);
|
||||
cs1 |= ((1 << S3C64XX_SROM_BW__DATAWIDTH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__WAITENABLE__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__BYTEENABLE__SHIFT)) <<
|
||||
S3C64XX_SROM_BW__NCS1__SHIFT;
|
||||
__raw_writel(cs1, S3C64XX_SROM_BW);
|
||||
|
||||
/* set timing for nCS1 suitable for ethernet chip */
|
||||
|
||||
__raw_writel((0 << S3C64XX_SROM_BCX__PMC__SHIFT) |
|
||||
(6 << S3C64XX_SROM_BCX__TACP__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCAH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BCX__TCOH__SHIFT) |
|
||||
(13 << S3C64XX_SROM_BCX__TACC__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCOS__SHIFT) |
|
||||
(0 << S3C64XX_SROM_BCX__TACS__SHIFT), S3C64XX_SROM_BC1);
|
||||
|
||||
gpio_request(S3C64XX_GPF(15), "LCD power");
|
||||
gpio_request(S3C64XX_GPE(0), "LCD power");
|
||||
|
||||
platform_add_devices(mini6410_devices, ARRAY_SIZE(mini6410_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(MINI6410, "MINI6410")
|
||||
/* Maintainer: Darius Augulis <augulis.darius@gmail.com> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = mini6410_map_io,
|
||||
.init_machine = mini6410_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,100 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright (C) 2008-2009 Samsung Electronics
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
#include <video/samsung_fimd.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include "irqs.h"
|
||||
#include "map.h"
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "fb.h"
|
||||
|
||||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE
|
||||
#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
|
||||
|
||||
static struct s3c2410_uartcfg ncp_uartcfgs[] __initdata = {
|
||||
/* REVISIT: NCP uses only serial 1, 2 */
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *ncp_devices[] __initdata = {
|
||||
&s3c_device_hsmmc1,
|
||||
&s3c_device_i2c0,
|
||||
};
|
||||
|
||||
static struct map_desc ncp_iodesc[] __initdata = {};
|
||||
|
||||
static void __init ncp_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(ncp_iodesc, ARRAY_SIZE(ncp_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(ncp_uartcfgs, ARRAY_SIZE(ncp_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
}
|
||||
|
||||
static void __init ncp_machine_init(void)
|
||||
{
|
||||
s3c_i2c0_set_platdata(NULL);
|
||||
|
||||
platform_add_devices(ncp_devices, ARRAY_SIZE(ncp_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(NCP, "NCP")
|
||||
/* Maintainer: Samsung Electronics */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = ncp_map_io,
|
||||
.init_machine = ncp_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,333 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright 2010 Darius Augulis <augulis.darius@gmail.com>
|
||||
// Copyright 2008 Openmoko, Inc.
|
||||
// Copyright 2008 Simtec Electronics
|
||||
// Ben Dooks <ben@simtec.co.uk>
|
||||
// http://armlinux.simtec.co.uk/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/dm9000.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "map.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
#include "irqs.h"
|
||||
|
||||
#include <linux/soc/samsung/s3c-adc.h>
|
||||
#include "cpu.h"
|
||||
#include "devs.h"
|
||||
#include "fb.h"
|
||||
#include <linux/platform_data/mtd-nand-s3c2410.h>
|
||||
#include <linux/platform_data/touchscreen-s3c2410.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
#include <video/samsung_fimd.h>
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "regs-modem-s3c64xx.h"
|
||||
#include "regs-srom-s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB)
|
||||
#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
|
||||
|
||||
static struct s3c2410_uartcfg real6410_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[3] = {
|
||||
.hwport = 3,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
/* DM9000AEP 10/100 ethernet controller */
|
||||
|
||||
static struct resource real6410_dm9k_resource[] = {
|
||||
[0] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN1, 2),
|
||||
[1] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN1 + 4, 2),
|
||||
[2] = DEFINE_RES_NAMED(S3C_EINT(7), 1, NULL, IORESOURCE_IRQ \
|
||||
| IORESOURCE_IRQ_HIGHLEVEL),
|
||||
};
|
||||
|
||||
static struct dm9000_plat_data real6410_dm9k_pdata = {
|
||||
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
|
||||
};
|
||||
|
||||
static struct platform_device real6410_device_eth = {
|
||||
.name = "dm9000",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(real6410_dm9k_resource),
|
||||
.resource = real6410_dm9k_resource,
|
||||
.dev = {
|
||||
.platform_data = &real6410_dm9k_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win real6410_lcd_type0_fb_win = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 480,
|
||||
.yres = 272,
|
||||
};
|
||||
|
||||
static struct fb_videomode real6410_lcd_type0_timing = {
|
||||
/* 4.3" 480x272 */
|
||||
.left_margin = 3,
|
||||
.right_margin = 2,
|
||||
.upper_margin = 1,
|
||||
.lower_margin = 1,
|
||||
.hsync_len = 40,
|
||||
.vsync_len = 1,
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win real6410_lcd_type1_fb_win = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode real6410_lcd_type1_timing = {
|
||||
/* 7.0" 800x480 */
|
||||
.left_margin = 8,
|
||||
.right_margin = 13,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct s3c_fb_platdata real6410_lcd_pdata[] __initdata = {
|
||||
{
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &real6410_lcd_type0_timing,
|
||||
.win[0] = &real6410_lcd_type0_fb_win,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
}, {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &real6410_lcd_type1_timing,
|
||||
.win[0] = &real6410_lcd_type1_fb_win,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
static struct mtd_partition real6410_nand_part[] = {
|
||||
[0] = {
|
||||
.name = "uboot",
|
||||
.size = SZ_1M,
|
||||
.offset = 0,
|
||||
},
|
||||
[1] = {
|
||||
.name = "kernel",
|
||||
.size = SZ_2M,
|
||||
.offset = SZ_1M,
|
||||
},
|
||||
[2] = {
|
||||
.name = "rootfs",
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = SZ_1M + SZ_2M,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_nand_set real6410_nand_sets[] = {
|
||||
[0] = {
|
||||
.name = "nand",
|
||||
.nr_chips = 1,
|
||||
.nr_partitions = ARRAY_SIZE(real6410_nand_part),
|
||||
.partitions = real6410_nand_part,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_platform_nand real6410_nand_info = {
|
||||
.tacls = 25,
|
||||
.twrph0 = 55,
|
||||
.twrph1 = 40,
|
||||
.nr_sets = ARRAY_SIZE(real6410_nand_sets),
|
||||
.sets = real6410_nand_sets,
|
||||
.engine_type = NAND_ECC_ENGINE_TYPE_SOFT,
|
||||
};
|
||||
|
||||
static struct platform_device *real6410_devices[] __initdata = {
|
||||
&real6410_device_eth,
|
||||
&s3c_device_hsmmc0,
|
||||
&s3c_device_hsmmc1,
|
||||
&s3c_device_fb,
|
||||
&s3c_device_nand,
|
||||
&s3c_device_adc,
|
||||
&s3c_device_ohci,
|
||||
};
|
||||
|
||||
static void __init real6410_map_io(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
s3c64xx_init_io(NULL, 0);
|
||||
s3c24xx_init_clocks(12000000);
|
||||
s3c24xx_init_uarts(real6410_uartcfgs, ARRAY_SIZE(real6410_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
|
||||
/* set the LCD type */
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the LCD bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
/*
|
||||
* real6410_features string
|
||||
*
|
||||
* 0-9 LCD configuration
|
||||
*
|
||||
*/
|
||||
static char real6410_features_str[12] __initdata = "0";
|
||||
|
||||
static int __init real6410_features_setup(char *str)
|
||||
{
|
||||
if (str)
|
||||
strlcpy(real6410_features_str, str,
|
||||
sizeof(real6410_features_str));
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("real6410=", real6410_features_setup);
|
||||
|
||||
#define FEATURE_SCREEN (1 << 0)
|
||||
|
||||
struct real6410_features_t {
|
||||
int done;
|
||||
int lcd_index;
|
||||
};
|
||||
|
||||
static void real6410_parse_features(
|
||||
struct real6410_features_t *features,
|
||||
const char *features_str)
|
||||
{
|
||||
const char *fp = features_str;
|
||||
|
||||
features->done = 0;
|
||||
features->lcd_index = 0;
|
||||
|
||||
while (*fp) {
|
||||
char f = *fp++;
|
||||
|
||||
switch (f) {
|
||||
case '0'...'9': /* tft screen */
|
||||
if (features->done & FEATURE_SCREEN) {
|
||||
printk(KERN_INFO "REAL6410: '%c' ignored, "
|
||||
"screen type already set\n", f);
|
||||
} else {
|
||||
int li = f - '0';
|
||||
if (li >= ARRAY_SIZE(real6410_lcd_pdata))
|
||||
printk(KERN_INFO "REAL6410: '%c' out "
|
||||
"of range LCD mode\n", f);
|
||||
else {
|
||||
features->lcd_index = li;
|
||||
}
|
||||
}
|
||||
features->done |= FEATURE_SCREEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void __init real6410_machine_init(void)
|
||||
{
|
||||
u32 cs1;
|
||||
struct real6410_features_t features = { 0 };
|
||||
|
||||
printk(KERN_INFO "REAL6410: Option string real6410=%s\n",
|
||||
real6410_features_str);
|
||||
|
||||
/* Parse the feature string */
|
||||
real6410_parse_features(&features, real6410_features_str);
|
||||
|
||||
printk(KERN_INFO "REAL6410: selected LCD display is %dx%d\n",
|
||||
real6410_lcd_pdata[features.lcd_index].win[0]->xres,
|
||||
real6410_lcd_pdata[features.lcd_index].win[0]->yres);
|
||||
|
||||
s3c_fb_set_platdata(&real6410_lcd_pdata[features.lcd_index]);
|
||||
s3c_nand_set_platdata(&real6410_nand_info);
|
||||
s3c64xx_ts_set_platdata(NULL);
|
||||
|
||||
/* configure nCS1 width to 16 bits */
|
||||
|
||||
cs1 = __raw_readl(S3C64XX_SROM_BW) &
|
||||
~(S3C64XX_SROM_BW__CS_MASK << S3C64XX_SROM_BW__NCS1__SHIFT);
|
||||
cs1 |= ((1 << S3C64XX_SROM_BW__DATAWIDTH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__WAITENABLE__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__BYTEENABLE__SHIFT)) <<
|
||||
S3C64XX_SROM_BW__NCS1__SHIFT;
|
||||
__raw_writel(cs1, S3C64XX_SROM_BW);
|
||||
|
||||
/* set timing for nCS1 suitable for ethernet chip */
|
||||
|
||||
__raw_writel((0 << S3C64XX_SROM_BCX__PMC__SHIFT) |
|
||||
(6 << S3C64XX_SROM_BCX__TACP__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCAH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BCX__TCOH__SHIFT) |
|
||||
(13 << S3C64XX_SROM_BCX__TACC__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCOS__SHIFT) |
|
||||
(0 << S3C64XX_SROM_BCX__TACS__SHIFT), S3C64XX_SROM_BC1);
|
||||
|
||||
gpio_request(S3C64XX_GPF(15), "LCD power");
|
||||
|
||||
platform_add_devices(real6410_devices, ARRAY_SIZE(real6410_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(REAL6410, "REAL6410")
|
||||
/* Maintainer: Darius Augulis <augulis.darius@gmail.com> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = real6410_map_io,
|
||||
.init_machine = real6410_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,424 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright (C) 2010 Maurus Cuelenaere
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pwm.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/spi/spi_gpio.h>
|
||||
#include <linux/platform_data/s3c-hsotg.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "map.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include "cpu.h"
|
||||
#include "devs.h"
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "gpio-cfg.h"
|
||||
#include <linux/platform_data/hwmon-s3c.h>
|
||||
#include <linux/platform_data/usb-ohci-s3c2410.h>
|
||||
#include "sdhci.h"
|
||||
#include <linux/platform_data/touchscreen-s3c2410.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "mach-smartq.h"
|
||||
#include "regs-modem-s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
|
||||
#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
|
||||
|
||||
static struct s3c2410_uartcfg smartq_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
static void smartq_usb_host_powercontrol(int port, int to)
|
||||
{
|
||||
pr_debug("%s(%d, %d)\n", __func__, port, to);
|
||||
|
||||
if (port == 0) {
|
||||
gpio_set_value(S3C64XX_GPL(0), to);
|
||||
gpio_set_value(S3C64XX_GPL(1), to);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t smartq_usb_host_ocirq(int irq, void *pw)
|
||||
{
|
||||
struct s3c2410_hcd_info *info = pw;
|
||||
|
||||
if (gpio_get_value(S3C64XX_GPL(10)) == 0) {
|
||||
pr_debug("%s: over-current irq (oc detected)\n", __func__);
|
||||
s3c2410_usb_report_oc(info, 3);
|
||||
} else {
|
||||
pr_debug("%s: over-current irq (oc cleared)\n", __func__);
|
||||
s3c2410_usb_report_oc(info, 0);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void smartq_usb_host_enableoc(struct s3c2410_hcd_info *info, int on)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* This isn't present on a SmartQ 5 board */
|
||||
if (machine_is_smartq5())
|
||||
return;
|
||||
|
||||
if (on) {
|
||||
ret = request_irq(gpio_to_irq(S3C64XX_GPL(10)),
|
||||
smartq_usb_host_ocirq,
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"USB host overcurrent", info);
|
||||
if (ret != 0)
|
||||
pr_err("failed to request usb oc irq: %d\n", ret);
|
||||
} else {
|
||||
free_irq(gpio_to_irq(S3C64XX_GPL(10)), info);
|
||||
}
|
||||
}
|
||||
|
||||
static struct s3c2410_hcd_info smartq_usb_host_info = {
|
||||
.port[0] = {
|
||||
.flags = S3C_HCDFLG_USED
|
||||
},
|
||||
.port[1] = {
|
||||
.flags = 0
|
||||
},
|
||||
|
||||
.power_control = smartq_usb_host_powercontrol,
|
||||
.enable_oc = smartq_usb_host_enableoc,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table smartq_usb_otg_vbus_gpiod_table = {
|
||||
.dev_id = "gpio-vbus",
|
||||
.table = {
|
||||
GPIO_LOOKUP("GPL", 9, "vbus", GPIO_ACTIVE_LOW),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smartq_usb_otg_vbus_dev = {
|
||||
.name = "gpio-vbus",
|
||||
};
|
||||
|
||||
static struct pwm_lookup smartq_pwm_lookup[] = {
|
||||
PWM_LOOKUP("samsung-pwm", 1, "pwm-backlight.0", NULL,
|
||||
1000000000 / (1000 * 20), PWM_POLARITY_NORMAL),
|
||||
};
|
||||
|
||||
static int smartq_bl_init(struct device *dev)
|
||||
{
|
||||
s3c_gpio_cfgpin(S3C64XX_GPF(15), S3C_GPIO_SFN(2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data smartq_backlight_data = {
|
||||
.max_brightness = 1000,
|
||||
.dft_brightness = 600,
|
||||
.init = smartq_bl_init,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_backlight_device = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &samsung_device_pwm.dev,
|
||||
.platform_data = &smartq_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_ts_mach_info smartq_touchscreen_pdata __initdata = {
|
||||
.delay = 65535,
|
||||
.presc = 99,
|
||||
.oversampling_shift = 4,
|
||||
};
|
||||
|
||||
static struct s3c_sdhci_platdata smartq_internal_hsmmc_pdata = {
|
||||
.max_width = 4,
|
||||
.cd_type = S3C_SDHCI_CD_PERMANENT,
|
||||
};
|
||||
|
||||
static struct s3c_hwmon_pdata smartq_hwmon_pdata __initdata = {
|
||||
/* Battery voltage (?-4.2V) */
|
||||
.in[0] = &(struct s3c_hwmon_chcfg) {
|
||||
.name = "smartq:battery-voltage",
|
||||
.mult = 3300,
|
||||
.div = 2048,
|
||||
},
|
||||
/* Reference voltage (1.2V) */
|
||||
.in[1] = &(struct s3c_hwmon_chcfg) {
|
||||
.name = "smartq:reference-voltage",
|
||||
.mult = 3300,
|
||||
.div = 4096,
|
||||
},
|
||||
};
|
||||
|
||||
static struct dwc2_hsotg_plat smartq_hsotg_pdata;
|
||||
|
||||
static int __init smartq_lcd_setup_gpio(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPM(3), "LCD power");
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* turn power off */
|
||||
gpio_direction_output(S3C64XX_GPM(3), 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* GPM0 -> CS */
|
||||
static struct spi_gpio_platform_data smartq_lcd_control = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_lcd_control_device = {
|
||||
.name = "spi_gpio",
|
||||
.id = 1,
|
||||
.dev.platform_data = &smartq_lcd_control,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table smartq_lcd_control_gpiod_table = {
|
||||
.dev_id = "spi_gpio",
|
||||
.table = {
|
||||
GPIO_LOOKUP("GPIOM", 1,
|
||||
"sck", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("GPIOM", 2,
|
||||
"mosi", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("GPIOM", 3,
|
||||
"miso", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("GPIOM", 0,
|
||||
"cs", GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static void smartq_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
|
||||
{
|
||||
gpio_direction_output(S3C64XX_GPM(3), power);
|
||||
}
|
||||
|
||||
static struct plat_lcd_data smartq_lcd_power_data = {
|
||||
.set_power = smartq_lcd_power_set,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_lcd_power_device = {
|
||||
.name = "platform-lcd",
|
||||
.dev.parent = &s3c_device_fb.dev,
|
||||
.dev.platform_data = &smartq_lcd_power_data,
|
||||
};
|
||||
|
||||
static struct i2c_board_info smartq_i2c_devs[] __initdata = {
|
||||
{ I2C_BOARD_INFO("wm8987", 0x1a), },
|
||||
};
|
||||
|
||||
static struct platform_device *smartq_devices[] __initdata = {
|
||||
&s3c_device_hsmmc1, /* Init iNAND first, ... */
|
||||
&s3c_device_hsmmc0, /* ... then the external SD card */
|
||||
&s3c_device_hsmmc2,
|
||||
&s3c_device_adc,
|
||||
&s3c_device_fb,
|
||||
&s3c_device_hwmon,
|
||||
&s3c_device_i2c0,
|
||||
&s3c_device_ohci,
|
||||
&s3c_device_rtc,
|
||||
&samsung_device_pwm,
|
||||
&s3c_device_usb_hsotg,
|
||||
&s3c64xx_device_iis0,
|
||||
&smartq_backlight_device,
|
||||
&smartq_lcd_control_device,
|
||||
&smartq_lcd_power_device,
|
||||
&smartq_usb_otg_vbus_dev,
|
||||
};
|
||||
|
||||
static void __init smartq_lcd_mode_set(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
/* set the LCD type */
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the LCD bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
static void smartq_power_off(void)
|
||||
{
|
||||
gpio_direction_output(S3C64XX_GPK(15), 1);
|
||||
}
|
||||
|
||||
static int __init smartq_power_off_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(15), "Power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK15\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* leave power on */
|
||||
gpio_direction_output(S3C64XX_GPK(15), 0);
|
||||
|
||||
pm_power_off = smartq_power_off;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init smartq_usb_host_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPL(0), "USB power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL0\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_request(S3C64XX_GPL(1), "USB host power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL1\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!machine_is_smartq5()) {
|
||||
/* This isn't present on a SmartQ 5 board */
|
||||
ret = gpio_request(S3C64XX_GPL(10), "USB host overcurrent");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL10\n", __func__);
|
||||
goto err2;
|
||||
}
|
||||
}
|
||||
|
||||
/* turn power off */
|
||||
gpio_direction_output(S3C64XX_GPL(0), 0);
|
||||
gpio_direction_output(S3C64XX_GPL(1), 0);
|
||||
if (!machine_is_smartq5())
|
||||
gpio_direction_input(S3C64XX_GPL(10));
|
||||
|
||||
s3c_device_ohci.dev.platform_data = &smartq_usb_host_info;
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(S3C64XX_GPL(1));
|
||||
err:
|
||||
gpio_free(S3C64XX_GPL(0));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init smartq_wifi_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(1), "wifi control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK1\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(2), "wifi reset");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK2\n", __func__);
|
||||
gpio_free(S3C64XX_GPK(1));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* turn power on */
|
||||
gpio_direction_output(S3C64XX_GPK(1), 1);
|
||||
|
||||
/* reset device */
|
||||
gpio_direction_output(S3C64XX_GPK(2), 0);
|
||||
mdelay(100);
|
||||
gpio_set_value(S3C64XX_GPK(2), 1);
|
||||
gpio_direction_input(S3C64XX_GPK(2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct map_desc smartq_iodesc[] __initdata = {};
|
||||
void __init smartq_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(smartq_iodesc, ARRAY_SIZE(smartq_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c64xx_set_xusbxti_freq(12000000);
|
||||
s3c24xx_init_uarts(smartq_uartcfgs, ARRAY_SIZE(smartq_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
|
||||
smartq_lcd_mode_set();
|
||||
}
|
||||
|
||||
static struct gpiod_lookup_table smartq_audio_gpios = {
|
||||
.dev_id = "smartq-audio",
|
||||
.table = {
|
||||
GPIO_LOOKUP("GPL", 12, "headphone detect", 0),
|
||||
GPIO_LOOKUP("GPK", 12, "amplifiers shutdown", 0),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
void __init smartq_machine_init(void)
|
||||
{
|
||||
s3c_i2c0_set_platdata(NULL);
|
||||
dwc2_hsotg_set_platdata(&smartq_hsotg_pdata);
|
||||
s3c_hwmon_set_platdata(&smartq_hwmon_pdata);
|
||||
s3c_sdhci1_set_platdata(&smartq_internal_hsmmc_pdata);
|
||||
s3c_sdhci2_set_platdata(&smartq_internal_hsmmc_pdata);
|
||||
s3c64xx_ts_set_platdata(&smartq_touchscreen_pdata);
|
||||
|
||||
i2c_register_board_info(0, smartq_i2c_devs,
|
||||
ARRAY_SIZE(smartq_i2c_devs));
|
||||
|
||||
WARN_ON(smartq_lcd_setup_gpio());
|
||||
WARN_ON(smartq_power_off_init());
|
||||
WARN_ON(smartq_usb_host_init());
|
||||
WARN_ON(smartq_wifi_init());
|
||||
|
||||
pwm_add_table(smartq_pwm_lookup, ARRAY_SIZE(smartq_pwm_lookup));
|
||||
gpiod_add_lookup_table(&smartq_lcd_control_gpiod_table);
|
||||
gpiod_add_lookup_table(&smartq_usb_otg_vbus_gpiod_table);
|
||||
platform_add_devices(smartq_devices, ARRAY_SIZE(smartq_devices));
|
||||
|
||||
gpiod_add_lookup_table(&smartq_audio_gpios);
|
||||
platform_device_register_simple("smartq-audio", -1, NULL, 0);
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* linux/arch/arm/mach-s3c64xx/mach-smartq.h
|
||||
*
|
||||
* Copyright (C) 2010 Maurus Cuelenaere
|
||||
*/
|
||||
|
||||
#ifndef __MACH_SMARTQ_H
|
||||
#define __MACH_SMARTQ_H __FILE__
|
||||
|
||||
#include <linux/init.h>
|
||||
|
||||
extern void __init smartq_map_io(void);
|
||||
extern void __init smartq_machine_init(void);
|
||||
|
||||
#endif /* __MACH_SMARTQ_H */
|
|
@ -1,154 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright (C) 2010 Maurus Cuelenaere
|
||||
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <video/samsung_fimd.h>
|
||||
#include "irqs.h"
|
||||
#include "map.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include "cpu.h"
|
||||
#include "devs.h"
|
||||
#include "fb.h"
|
||||
#include "gpio-cfg.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "mach-smartq.h"
|
||||
|
||||
static struct gpio_led smartq5_leds[] = {
|
||||
{
|
||||
.name = "smartq5:green",
|
||||
.active_low = 1,
|
||||
.gpio = S3C64XX_GPN(8),
|
||||
},
|
||||
{
|
||||
.name = "smartq5:red",
|
||||
.active_low = 1,
|
||||
.gpio = S3C64XX_GPN(9),
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data smartq5_led_data = {
|
||||
.num_leds = ARRAY_SIZE(smartq5_leds),
|
||||
.leds = smartq5_leds,
|
||||
};
|
||||
|
||||
static struct platform_device smartq5_leds_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev.platform_data = &smartq5_led_data,
|
||||
};
|
||||
|
||||
/* Labels according to the SmartQ manual */
|
||||
static struct gpio_keys_button smartq5_buttons[] = {
|
||||
{
|
||||
.gpio = S3C64XX_GPL(14),
|
||||
.code = KEY_POWER,
|
||||
.desc = "Power",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(2),
|
||||
.code = KEY_KPMINUS,
|
||||
.desc = "Minus",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(12),
|
||||
.code = KEY_KPPLUS,
|
||||
.desc = "Plus",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(15),
|
||||
.code = KEY_ENTER,
|
||||
.desc = "Move",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data smartq5_buttons_data = {
|
||||
.buttons = smartq5_buttons,
|
||||
.nbuttons = ARRAY_SIZE(smartq5_buttons),
|
||||
};
|
||||
|
||||
static struct platform_device smartq5_buttons_device = {
|
||||
.name = "gpio-keys",
|
||||
.id = 0,
|
||||
.num_resources = 0,
|
||||
.dev = {
|
||||
.platform_data = &smartq5_buttons_data,
|
||||
}
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win smartq5_fb_win0 = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode smartq5_lcd_timing = {
|
||||
.left_margin = 216,
|
||||
.right_margin = 40,
|
||||
.upper_margin = 35,
|
||||
.lower_margin = 10,
|
||||
.hsync_len = 1,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.refresh = 80,
|
||||
};
|
||||
|
||||
static struct s3c_fb_platdata smartq5_lcd_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &smartq5_lcd_timing,
|
||||
.win[0] = &smartq5_fb_win0,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
|
||||
VIDCON1_INV_VDEN,
|
||||
};
|
||||
|
||||
static struct platform_device *smartq5_devices[] __initdata = {
|
||||
&smartq5_leds_device,
|
||||
&smartq5_buttons_device,
|
||||
};
|
||||
|
||||
static void __init smartq5_machine_init(void)
|
||||
{
|
||||
s3c_fb_set_platdata(&smartq5_lcd_pdata);
|
||||
|
||||
smartq_machine_init();
|
||||
|
||||
platform_add_devices(smartq5_devices, ARRAY_SIZE(smartq5_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(SMARTQ5, "SmartQ 5")
|
||||
/* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = smartq_map_io,
|
||||
.init_machine = smartq5_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,170 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright (C) 2010 Maurus Cuelenaere
|
||||
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <video/samsung_fimd.h>
|
||||
#include "irqs.h"
|
||||
#include "map.h"
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include "cpu.h"
|
||||
#include "devs.h"
|
||||
#include "fb.h"
|
||||
#include "gpio-cfg.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
#include "mach-smartq.h"
|
||||
|
||||
static struct gpio_led smartq7_leds[] = {
|
||||
{
|
||||
.name = "smartq7:red",
|
||||
.active_low = 1,
|
||||
.gpio = S3C64XX_GPN(8),
|
||||
},
|
||||
{
|
||||
.name = "smartq7:green",
|
||||
.active_low = 1,
|
||||
.gpio = S3C64XX_GPN(9),
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data smartq7_led_data = {
|
||||
.num_leds = ARRAY_SIZE(smartq7_leds),
|
||||
.leds = smartq7_leds,
|
||||
};
|
||||
|
||||
static struct platform_device smartq7_leds_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev.platform_data = &smartq7_led_data,
|
||||
};
|
||||
|
||||
/* Labels according to the SmartQ manual */
|
||||
static struct gpio_keys_button smartq7_buttons[] = {
|
||||
{
|
||||
.gpio = S3C64XX_GPL(14),
|
||||
.code = KEY_POWER,
|
||||
.desc = "Power",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(2),
|
||||
.code = KEY_FN,
|
||||
.desc = "Function",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(3),
|
||||
.code = KEY_KPMINUS,
|
||||
.desc = "Minus",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(4),
|
||||
.code = KEY_KPPLUS,
|
||||
.desc = "Plus",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(12),
|
||||
.code = KEY_ENTER,
|
||||
.desc = "Enter",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
{
|
||||
.gpio = S3C64XX_GPN(15),
|
||||
.code = KEY_ESC,
|
||||
.desc = "Cancel",
|
||||
.active_low = 1,
|
||||
.debounce_interval = 5,
|
||||
.type = EV_KEY,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data smartq7_buttons_data = {
|
||||
.buttons = smartq7_buttons,
|
||||
.nbuttons = ARRAY_SIZE(smartq7_buttons),
|
||||
};
|
||||
|
||||
static struct platform_device smartq7_buttons_device = {
|
||||
.name = "gpio-keys",
|
||||
.id = 0,
|
||||
.num_resources = 0,
|
||||
.dev = {
|
||||
.platform_data = &smartq7_buttons_data,
|
||||
}
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win smartq7_fb_win0 = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
static struct fb_videomode smartq7_lcd_timing = {
|
||||
.left_margin = 3,
|
||||
.right_margin = 5,
|
||||
.upper_margin = 1,
|
||||
.lower_margin = 20,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 3,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.refresh = 80,
|
||||
};
|
||||
|
||||
static struct s3c_fb_platdata smartq7_lcd_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &smartq7_lcd_timing,
|
||||
.win[0] = &smartq7_fb_win0,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
|
||||
VIDCON1_INV_VCLK,
|
||||
};
|
||||
|
||||
static struct platform_device *smartq7_devices[] __initdata = {
|
||||
&smartq7_leds_device,
|
||||
&smartq7_buttons_device,
|
||||
};
|
||||
|
||||
static void __init smartq7_machine_init(void)
|
||||
{
|
||||
s3c_fb_set_platdata(&smartq7_lcd_pdata);
|
||||
|
||||
smartq_machine_init();
|
||||
|
||||
platform_add_devices(smartq7_devices, ARRAY_SIZE(smartq7_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(SMARTQ7, "SmartQ 7")
|
||||
/* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = smartq_map_io,
|
||||
.init_machine = smartq7_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,90 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright 2008 Simtec Electronics
|
||||
// Ben Dooks <ben@simtec.co.uk>
|
||||
// http://armlinux.simtec.co.uk/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include "irqs.h"
|
||||
#include "map.h"
|
||||
|
||||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "gpio-samsung.h"
|
||||
|
||||
#include "s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
|
||||
#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
|
||||
|
||||
static struct s3c2410_uartcfg smdk6400_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = 0x3c5,
|
||||
.ulcon = 0x03,
|
||||
.ufcon = 0x51,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = 0x3c5,
|
||||
.ulcon = 0x03,
|
||||
.ufcon = 0x51,
|
||||
},
|
||||
};
|
||||
|
||||
static struct map_desc smdk6400_iodesc[] = {};
|
||||
|
||||
static void __init smdk6400_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(smdk6400_iodesc, ARRAY_SIZE(smdk6400_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(smdk6400_uartcfgs, ARRAY_SIZE(smdk6400_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
}
|
||||
|
||||
static struct platform_device *smdk6400_devices[] __initdata = {
|
||||
&s3c_device_hsmmc1,
|
||||
&s3c_device_i2c0,
|
||||
};
|
||||
|
||||
static struct i2c_board_info i2c_devs[] __initdata = {
|
||||
{ I2C_BOARD_INFO("wm8753", 0x1A), },
|
||||
{ I2C_BOARD_INFO("24c08", 0x50), },
|
||||
};
|
||||
|
||||
static void __init smdk6400_machine_init(void)
|
||||
{
|
||||
i2c_register_board_info(0, i2c_devs, ARRAY_SIZE(i2c_devs));
|
||||
platform_add_devices(smdk6400_devices, ARRAY_SIZE(smdk6400_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(SMDK6400, "SMDK6400")
|
||||
/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6400_init_irq,
|
||||
.map_io = smdk6400_map_io,
|
||||
.init_machine = smdk6400_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
|
@ -1,706 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
//
|
||||
// Copyright 2008 Openmoko, Inc.
|
||||
// Copyright 2008 Simtec Electronics
|
||||
// Ben Dooks <ben@simtec.co.uk>
|
||||
// http://armlinux.simtec.co.uk/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/pwm.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/platform_data/s3c-hsotg.h>
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1190_EV1
|
||||
#include <linux/mfd/wm8350/core.h>
|
||||
#include <linux/mfd/wm8350/pmic.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1192_EV1
|
||||
#include <linux/mfd/wm831x/core.h>
|
||||
#include <linux/mfd/wm831x/pdata.h>
|
||||
#endif
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
#include <video/samsung_fimd.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include "irqs.h"
|
||||
#include "map.h"
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "regs-gpio.h"
|
||||
#include "gpio-samsung.h"
|
||||
#include <linux/platform_data/ata-samsung_cf.h>
|
||||
#include <linux/platform_data/i2c-s3c2410.h>
|
||||
#include "fb.h"
|
||||
#include "gpio-cfg.h"
|
||||
|
||||
#include "devs.h"
|
||||
#include "cpu.h"
|
||||
#include <linux/soc/samsung/s3c-adc.h>
|
||||
#include <linux/platform_data/touchscreen-s3c2410.h>
|
||||
#include "keypad.h"
|
||||
|
||||
#include "backlight-s3c64xx.h"
|
||||
#include "s3c64xx.h"
|
||||
#include "regs-modem-s3c64xx.h"
|
||||
#include "regs-srom-s3c64xx.h"
|
||||
#include "regs-sys-s3c64xx.h"
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
|
||||
#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
|
||||
|
||||
static struct s3c2410_uartcfg smdk6410_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[3] = {
|
||||
.hwport = 3,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
/* framebuffer and LCD setup. */
|
||||
|
||||
/* GPF15 = LCD backlight control
|
||||
* GPF13 => Panel power
|
||||
* GPN5 = LCD nRESET signal
|
||||
* PWM_TOUT1 => backlight brightness
|
||||
*/
|
||||
|
||||
static void smdk6410_lcd_power_set(struct plat_lcd_data *pd,
|
||||
unsigned int power)
|
||||
{
|
||||
if (power) {
|
||||
gpio_direction_output(S3C64XX_GPF(13), 1);
|
||||
|
||||
/* fire nRESET on power up */
|
||||
gpio_direction_output(S3C64XX_GPN(5), 0);
|
||||
msleep(10);
|
||||
gpio_direction_output(S3C64XX_GPN(5), 1);
|
||||
msleep(1);
|
||||
} else {
|
||||
gpio_direction_output(S3C64XX_GPF(13), 0);
|
||||
}
|
||||
}
|
||||
|
||||
static struct plat_lcd_data smdk6410_lcd_power_data = {
|
||||
.set_power = smdk6410_lcd_power_set,
|
||||
};
|
||||
|
||||
static struct platform_device smdk6410_lcd_powerdev = {
|
||||
.name = "platform-lcd",
|
||||
.dev.parent = &s3c_device_fb.dev,
|
||||
.dev.platform_data = &smdk6410_lcd_power_data,
|
||||
};
|
||||
|
||||
static struct s3c_fb_pd_win smdk6410_fb_win0 = {
|
||||
.max_bpp = 32,
|
||||
.default_bpp = 16,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.virtual_y = 480 * 2,
|
||||
.virtual_x = 800,
|
||||
};
|
||||
|
||||
static struct fb_videomode smdk6410_lcd_timing = {
|
||||
.left_margin = 8,
|
||||
.right_margin = 13,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 1,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
};
|
||||
|
||||
/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
|
||||
static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
||||
.vtiming = &smdk6410_lcd_timing,
|
||||
.win[0] = &smdk6410_fb_win0,
|
||||
.vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||
};
|
||||
|
||||
/*
|
||||
* Configuring Ethernet on SMDK6410
|
||||
*
|
||||
* Both CS8900A and LAN9115 chips share one chip select mediated by CFG6.
|
||||
* The constant address below corresponds to nCS1
|
||||
*
|
||||
* 1) Set CFGB2 p3 ON others off, no other CFGB selects "ethernet"
|
||||
* 2) CFG6 needs to be switched to "LAN9115" side
|
||||
*/
|
||||
|
||||
static struct resource smdk6410_smsc911x_resources[] = {
|
||||
[0] = DEFINE_RES_MEM(S3C64XX_PA_XM0CSN1, SZ_64K),
|
||||
[1] = DEFINE_RES_NAMED(S3C_EINT(10), 1, NULL, IORESOURCE_IRQ \
|
||||
| IRQ_TYPE_LEVEL_LOW),
|
||||
};
|
||||
|
||||
static struct smsc911x_platform_config smdk6410_smsc911x_pdata = {
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_32BIT | SMSC911X_FORCE_INTERNAL_PHY,
|
||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
};
|
||||
|
||||
|
||||
static struct platform_device smdk6410_smsc911x = {
|
||||
.name = "smsc911x",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(smdk6410_smsc911x_resources),
|
||||
.resource = &smdk6410_smsc911x_resources[0],
|
||||
.dev = {
|
||||
.platform_data = &smdk6410_smsc911x_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
static struct regulator_consumer_supply smdk6410_b_pwr_5v_consumers[] = {
|
||||
REGULATOR_SUPPLY("PVDD", "0-001b"),
|
||||
REGULATOR_SUPPLY("AVDD", "0-001b"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data __maybe_unused smdk6410_b_pwr_5v_data = {
|
||||
.constraints = {
|
||||
.always_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(smdk6410_b_pwr_5v_consumers),
|
||||
.consumer_supplies = smdk6410_b_pwr_5v_consumers,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config smdk6410_b_pwr_5v_pdata = {
|
||||
.supply_name = "B_PWR_5V",
|
||||
.microvolts = 5000000,
|
||||
.init_data = &smdk6410_b_pwr_5v_data,
|
||||
};
|
||||
|
||||
static struct platform_device smdk6410_b_pwr_5v = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &smdk6410_b_pwr_5v_pdata,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct s3c_ide_platdata smdk6410_ide_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_ide_setup_gpio,
|
||||
};
|
||||
|
||||
static uint32_t smdk6410_keymap[] __initdata = {
|
||||
/* KEY(row, col, keycode) */
|
||||
KEY(0, 3, KEY_1), KEY(0, 4, KEY_2), KEY(0, 5, KEY_3),
|
||||
KEY(0, 6, KEY_4), KEY(0, 7, KEY_5),
|
||||
KEY(1, 3, KEY_A), KEY(1, 4, KEY_B), KEY(1, 5, KEY_C),
|
||||
KEY(1, 6, KEY_D), KEY(1, 7, KEY_E)
|
||||
};
|
||||
|
||||
static struct matrix_keymap_data smdk6410_keymap_data __initdata = {
|
||||
.keymap = smdk6410_keymap,
|
||||
.keymap_size = ARRAY_SIZE(smdk6410_keymap),
|
||||
};
|
||||
|
||||
static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = {
|
||||
.keymap_data = &smdk6410_keymap_data,
|
||||
.rows = 2,
|
||||
.cols = 8,
|
||||
};
|
||||
|
||||
static struct map_desc smdk6410_iodesc[] = {};
|
||||
|
||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||
#ifdef CONFIG_SMDK6410_SD_CH0
|
||||
&s3c_device_hsmmc0,
|
||||
#endif
|
||||
#ifdef CONFIG_SMDK6410_SD_CH1
|
||||
&s3c_device_hsmmc1,
|
||||
#endif
|
||||
&s3c_device_i2c0,
|
||||
&s3c_device_i2c1,
|
||||
&s3c_device_fb,
|
||||
&s3c_device_ohci,
|
||||
&samsung_device_pwm,
|
||||
&s3c_device_usb_hsotg,
|
||||
&s3c64xx_device_iisv4,
|
||||
&samsung_device_keypad,
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
&smdk6410_b_pwr_5v,
|
||||
#endif
|
||||
&smdk6410_lcd_powerdev,
|
||||
|
||||
&smdk6410_smsc911x,
|
||||
&s3c_device_adc,
|
||||
&s3c_device_cfcon,
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_wdt,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
/* ARM core */
|
||||
static struct regulator_consumer_supply smdk6410_vddarm_consumers[] = {
|
||||
REGULATOR_SUPPLY("vddarm", NULL),
|
||||
};
|
||||
|
||||
/* VDDARM, BUCK1 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddarm = {
|
||||
.constraints = {
|
||||
.name = "PVDD_ARM",
|
||||
.min_uV = 1000000,
|
||||
.max_uV = 1300000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(smdk6410_vddarm_consumers),
|
||||
.consumer_supplies = smdk6410_vddarm_consumers,
|
||||
};
|
||||
|
||||
/* VDD_INT, BUCK2 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddint = {
|
||||
.constraints = {
|
||||
.name = "PVDD_INT",
|
||||
.min_uV = 1000000,
|
||||
.max_uV = 1200000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_HI, LDO3 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddhi = {
|
||||
.constraints = {
|
||||
.name = "PVDD_HI",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_PLL, LDO2 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddpll = {
|
||||
.constraints = {
|
||||
.name = "PVDD_PLL",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_UH_MMC, LDO5 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vdduh_mmc = {
|
||||
.constraints = {
|
||||
.name = "PVDD_UH+PVDD_MMC",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VCCM3BT, LDO8 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vccmc3bt = {
|
||||
.constraints = {
|
||||
.name = "PVCCM3BT",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VCCM2MTV, LDO11 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vccm2mtv = {
|
||||
.constraints = {
|
||||
.name = "PVCCM2MTV",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_LCD, LDO12 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddlcd = {
|
||||
.constraints = {
|
||||
.name = "PVDD_LCD",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_OTGI, LDO9 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddotgi = {
|
||||
.constraints = {
|
||||
.name = "PVDD_OTGI",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_OTG, LDO14 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddotg = {
|
||||
.constraints = {
|
||||
.name = "PVDD_OTG",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_ALIVE, LDO15 on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddalive = {
|
||||
.constraints = {
|
||||
.name = "PVDD_ALIVE",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* VDD_AUDIO, VLDO_AUDIO on J5 */
|
||||
static struct regulator_init_data __maybe_unused smdk6410_vddaudio = {
|
||||
.constraints = {
|
||||
.name = "PVDD_AUDIO",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1190_EV1
|
||||
/* S3C64xx internal logic & PLL */
|
||||
static struct regulator_init_data __maybe_unused wm8350_dcdc1_data = {
|
||||
.constraints = {
|
||||
.name = "PVDD_INT+PVDD_PLL",
|
||||
.min_uV = 1200000,
|
||||
.max_uV = 1200000,
|
||||
.always_on = 1,
|
||||
.apply_uV = 1,
|
||||
},
|
||||
};
|
||||
|
||||
/* Memory */
|
||||
static struct regulator_init_data __maybe_unused wm8350_dcdc3_data = {
|
||||
.constraints = {
|
||||
.name = "PVDD_MEM",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.always_on = 1,
|
||||
.state_mem = {
|
||||
.uV = 1800000,
|
||||
.mode = REGULATOR_MODE_NORMAL,
|
||||
.enabled = 1,
|
||||
},
|
||||
.initial_state = PM_SUSPEND_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
/* USB, EXT, PCM, ADC/DAC, USB, MMC */
|
||||
static struct regulator_consumer_supply wm8350_dcdc4_consumers[] = {
|
||||
REGULATOR_SUPPLY("DVDD", "0-001b"),
|
||||
};
|
||||
|
||||
static struct regulator_init_data __maybe_unused wm8350_dcdc4_data = {
|
||||
.constraints = {
|
||||
.name = "PVDD_HI+PVDD_EXT+PVDD_SYS+PVCCM2MTV",
|
||||
.min_uV = 3000000,
|
||||
.max_uV = 3000000,
|
||||
.always_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(wm8350_dcdc4_consumers),
|
||||
.consumer_supplies = wm8350_dcdc4_consumers,
|
||||
};
|
||||
|
||||
/* OTGi/1190-EV1 HPVDD & AVDD */
|
||||
static struct regulator_init_data __maybe_unused wm8350_ldo4_data = {
|
||||
.constraints = {
|
||||
.name = "PVDD_OTGI+HPVDD+AVDD",
|
||||
.min_uV = 1200000,
|
||||
.max_uV = 1200000,
|
||||
.apply_uV = 1,
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct {
|
||||
int regulator;
|
||||
struct regulator_init_data *initdata;
|
||||
} wm1190_regulators[] = {
|
||||
{ WM8350_DCDC_1, &wm8350_dcdc1_data },
|
||||
{ WM8350_DCDC_3, &wm8350_dcdc3_data },
|
||||
{ WM8350_DCDC_4, &wm8350_dcdc4_data },
|
||||
{ WM8350_DCDC_6, &smdk6410_vddarm },
|
||||
{ WM8350_LDO_1, &smdk6410_vddalive },
|
||||
{ WM8350_LDO_2, &smdk6410_vddotg },
|
||||
{ WM8350_LDO_3, &smdk6410_vddlcd },
|
||||
{ WM8350_LDO_4, &wm8350_ldo4_data },
|
||||
};
|
||||
|
||||
static int __init smdk6410_wm8350_init(struct wm8350 *wm8350)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Configure the IRQ line */
|
||||
s3c_gpio_setpull(S3C64XX_GPN(12), S3C_GPIO_PULL_UP);
|
||||
|
||||
/* Instantiate the regulators */
|
||||
for (i = 0; i < ARRAY_SIZE(wm1190_regulators); i++)
|
||||
wm8350_register_regulator(wm8350,
|
||||
wm1190_regulators[i].regulator,
|
||||
wm1190_regulators[i].initdata);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct wm8350_platform_data __initdata smdk6410_wm8350_pdata = {
|
||||
.init = smdk6410_wm8350_init,
|
||||
.irq_high = 1,
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1192_EV1
|
||||
static struct gpio_led wm1192_pmic_leds[] = {
|
||||
{
|
||||
.name = "PMIC:red:power",
|
||||
.gpio = GPIO_BOARD_START + 3,
|
||||
.default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data wm1192_pmic_led = {
|
||||
.num_leds = ARRAY_SIZE(wm1192_pmic_leds),
|
||||
.leds = wm1192_pmic_leds,
|
||||
};
|
||||
|
||||
static struct platform_device wm1192_pmic_led_dev = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &wm1192_pmic_led,
|
||||
},
|
||||
};
|
||||
|
||||
static int wm1192_pre_init(struct wm831x *wm831x)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Configure the IRQ line */
|
||||
s3c_gpio_setpull(S3C64XX_GPN(12), S3C_GPIO_PULL_UP);
|
||||
|
||||
ret = platform_device_register(&wm1192_pmic_led_dev);
|
||||
if (ret != 0)
|
||||
dev_err(wm831x->dev, "Failed to add PMIC LED: %d\n", ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct wm831x_backlight_pdata wm1192_backlight_pdata = {
|
||||
.isink = 1,
|
||||
.max_uA = 27554,
|
||||
};
|
||||
|
||||
static struct regulator_init_data __maybe_unused wm1192_dcdc3 = {
|
||||
.constraints = {
|
||||
.name = "PVDD_MEM+PVDD_GPS",
|
||||
.always_on = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply wm1192_ldo1_consumers[] = {
|
||||
REGULATOR_SUPPLY("DVDD", "0-001b"), /* WM8580 */
|
||||
};
|
||||
|
||||
static struct regulator_init_data __maybe_unused wm1192_ldo1 = {
|
||||
.constraints = {
|
||||
.name = "PVDD_LCD+PVDD_EXT",
|
||||
.always_on = 1,
|
||||
},
|
||||
.consumer_supplies = wm1192_ldo1_consumers,
|
||||
.num_consumer_supplies = ARRAY_SIZE(wm1192_ldo1_consumers),
|
||||
};
|
||||
|
||||
static struct wm831x_status_pdata wm1192_led7_pdata = {
|
||||
.name = "LED7:green:",
|
||||
};
|
||||
|
||||
static struct wm831x_status_pdata wm1192_led8_pdata = {
|
||||
.name = "LED8:green:",
|
||||
};
|
||||
|
||||
static struct wm831x_pdata smdk6410_wm1192_pdata = {
|
||||
.pre_init = wm1192_pre_init,
|
||||
|
||||
.backlight = &wm1192_backlight_pdata,
|
||||
.dcdc = {
|
||||
&smdk6410_vddarm, /* DCDC1 */
|
||||
&smdk6410_vddint, /* DCDC2 */
|
||||
&wm1192_dcdc3,
|
||||
},
|
||||
.gpio_base = GPIO_BOARD_START,
|
||||
.ldo = {
|
||||
&wm1192_ldo1, /* LDO1 */
|
||||
&smdk6410_vdduh_mmc, /* LDO2 */
|
||||
NULL, /* LDO3 NC */
|
||||
&smdk6410_vddotgi, /* LDO4 */
|
||||
&smdk6410_vddotg, /* LDO5 */
|
||||
&smdk6410_vddhi, /* LDO6 */
|
||||
&smdk6410_vddaudio, /* LDO7 */
|
||||
&smdk6410_vccm2mtv, /* LDO8 */
|
||||
&smdk6410_vddpll, /* LDO9 */
|
||||
&smdk6410_vccmc3bt, /* LDO10 */
|
||||
&smdk6410_vddalive, /* LDO11 */
|
||||
},
|
||||
.status = {
|
||||
&wm1192_led7_pdata,
|
||||
&wm1192_led8_pdata,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct i2c_board_info i2c_devs0[] __initdata = {
|
||||
{ I2C_BOARD_INFO("24c08", 0x50), },
|
||||
{ I2C_BOARD_INFO("wm8580", 0x1b), },
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1192_EV1
|
||||
{ I2C_BOARD_INFO("wm8312", 0x34),
|
||||
.platform_data = &smdk6410_wm1192_pdata,
|
||||
.irq = S3C_EINT(12),
|
||||
},
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMDK6410_WM1190_EV1
|
||||
{ I2C_BOARD_INFO("wm8350", 0x1a),
|
||||
.platform_data = &smdk6410_wm8350_pdata,
|
||||
.irq = S3C_EINT(12),
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct i2c_board_info i2c_devs1[] __initdata = {
|
||||
{ I2C_BOARD_INFO("24c128", 0x57), }, /* Samsung S524AD0XD1 */
|
||||
};
|
||||
|
||||
/* LCD Backlight data */
|
||||
static struct samsung_bl_gpio_info smdk6410_bl_gpio_info = {
|
||||
.no = S3C64XX_GPF(15),
|
||||
.func = S3C_GPIO_SFN(2),
|
||||
};
|
||||
|
||||
static struct pwm_lookup smdk6410_pwm_lookup[] = {
|
||||
PWM_LOOKUP("samsung-pwm", 1, "pwm-backlight.0", NULL, 78770,
|
||||
PWM_POLARITY_NORMAL),
|
||||
};
|
||||
|
||||
static struct platform_pwm_backlight_data smdk6410_bl_data = {
|
||||
/* Intentionally blank */
|
||||
};
|
||||
|
||||
static struct dwc2_hsotg_plat smdk6410_hsotg_pdata;
|
||||
|
||||
static void __init smdk6410_map_io(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
s3c64xx_init_io(smdk6410_iodesc, ARRAY_SIZE(smdk6410_iodesc));
|
||||
s3c64xx_set_xtal_freq(12000000);
|
||||
s3c24xx_init_uarts(smdk6410_uartcfgs, ARRAY_SIZE(smdk6410_uartcfgs));
|
||||
s3c64xx_set_timer_source(S3C64XX_PWM3, S3C64XX_PWM4);
|
||||
|
||||
/* set the LCD type */
|
||||
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the lcd bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
static void __init smdk6410_machine_init(void)
|
||||
{
|
||||
u32 cs1;
|
||||
|
||||
s3c_i2c0_set_platdata(NULL);
|
||||
s3c_i2c1_set_platdata(NULL);
|
||||
s3c_fb_set_platdata(&smdk6410_lcd_pdata);
|
||||
dwc2_hsotg_set_platdata(&smdk6410_hsotg_pdata);
|
||||
|
||||
samsung_keypad_set_platdata(&smdk6410_keypad_data);
|
||||
|
||||
s3c64xx_ts_set_platdata(NULL);
|
||||
|
||||
/* configure nCS1 width to 16 bits */
|
||||
|
||||
cs1 = __raw_readl(S3C64XX_SROM_BW) &
|
||||
~(S3C64XX_SROM_BW__CS_MASK << S3C64XX_SROM_BW__NCS1__SHIFT);
|
||||
cs1 |= ((1 << S3C64XX_SROM_BW__DATAWIDTH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__WAITENABLE__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BW__BYTEENABLE__SHIFT)) <<
|
||||
S3C64XX_SROM_BW__NCS1__SHIFT;
|
||||
__raw_writel(cs1, S3C64XX_SROM_BW);
|
||||
|
||||
/* set timing for nCS1 suitable for ethernet chip */
|
||||
|
||||
__raw_writel((0 << S3C64XX_SROM_BCX__PMC__SHIFT) |
|
||||
(6 << S3C64XX_SROM_BCX__TACP__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCAH__SHIFT) |
|
||||
(1 << S3C64XX_SROM_BCX__TCOH__SHIFT) |
|
||||
(0xe << S3C64XX_SROM_BCX__TACC__SHIFT) |
|
||||
(4 << S3C64XX_SROM_BCX__TCOS__SHIFT) |
|
||||
(0 << S3C64XX_SROM_BCX__TACS__SHIFT), S3C64XX_SROM_BC1);
|
||||
|
||||
gpio_request(S3C64XX_GPN(5), "LCD power");
|
||||
gpio_request(S3C64XX_GPF(13), "LCD power");
|
||||
|
||||
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
|
||||
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
|
||||
|
||||
s3c_ide_set_platdata(&smdk6410_ide_pdata);
|
||||
|
||||
platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));
|
||||
|
||||
pwm_add_table(smdk6410_pwm_lookup, ARRAY_SIZE(smdk6410_pwm_lookup));
|
||||
samsung_bl_set(&smdk6410_bl_gpio_info, &smdk6410_bl_data);
|
||||
}
|
||||
|
||||
MACHINE_START(SMDK6410, "SMDK6410")
|
||||
/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
|
||||
.atag_offset = 0x100,
|
||||
.nr_irqs = S3C64XX_NR_IRQS,
|
||||
.init_irq = s3c6410_init_irq,
|
||||
.map_io = smdk6410_map_io,
|
||||
.init_machine = smdk6410_machine_init,
|
||||
.init_time = s3c64xx_timer_init,
|
||||
MACHINE_END
|
Loading…
Reference in a new issue