1a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere/* 2a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * linux/arch/arm/mach-s3c64xx/mach-smartq7.c 3a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * 4a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * Copyright (C) 2010 Maurus Cuelenaere 5a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * 6a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * This program is free software; you can redistribute it and/or modify 7a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * it under the terms of the GNU General Public License version 2 as 8a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * published by the Free Software Foundation. 9a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere * 10a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere */ 11a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 12a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/fb.h> 13a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/gpio.h> 14a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/gpio_keys.h> 15a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/init.h> 16a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/input.h> 17a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/leds.h> 18a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <linux/platform_device.h> 19a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 20774b51f8f8269cb9a2cdbe2ac2c0a2ff62250b01Jamie Iles#include <asm/hardware/vic.h> 21a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <asm/mach-types.h> 22a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <asm/mach/arch.h> 23a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 24a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <mach/map.h> 25a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <mach/regs-gpio.h> 26a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 27a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <plat/cpu.h> 28a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <plat/devs.h> 29a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <plat/fb.h> 30a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include <plat/gpio-cfg.h> 3149965e658674f40eb5cb72be6833eb49b1770961Ajay Kumar#include <plat/regs-fb-v4.h> 32a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 33b024043b6d0d3feecb1de350de9762a00a79eda1Kukjin Kim#include "common.h" 34a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere#include "mach-smartq.h" 35a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 36495c7b8e64811e8117eca472c6f90dccda039dc4Uwe Kleine-Königstatic struct gpio_led smartq7_leds[] = { 37a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 38a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .name = "smartq7:red", 39a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 40a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(8), 41a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 42a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 43a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .name = "smartq7:green", 44a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 45a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(9), 46a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 47a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 48a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 49a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct gpio_led_platform_data smartq7_led_data = { 50a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .num_leds = ARRAY_SIZE(smartq7_leds), 51a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .leds = smartq7_leds, 52a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 53a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 54a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct platform_device smartq7_leds_device = { 55a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .name = "leds-gpio", 56a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .id = -1, 57a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .dev.platform_data = &smartq7_led_data, 58a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 59a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 60a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere/* Labels according to the SmartQ manual */ 61a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct gpio_keys_button smartq7_buttons[] = { 62a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 63a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPL(14), 64a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_POWER, 65a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Power", 66a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 67a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 68a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 69a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 70a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 71a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(2), 72a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_FN, 73a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Function", 74a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 75a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 76a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 77a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 78a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 79a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(3), 80a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_KPMINUS, 81a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Minus", 82a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 83a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 84a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 85a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 86a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 87a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(4), 88a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_KPPLUS, 89a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Plus", 90a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 91a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 92a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 93a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 94a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 95a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(12), 96a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_ENTER, 97a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Enter", 98a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 99a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 100a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 101a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 102a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere { 103a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .gpio = S3C64XX_GPN(15), 104a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .code = KEY_ESC, 105a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .desc = "Cancel", 106a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .active_low = 1, 107a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .debounce_interval = 5, 108a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .type = EV_KEY, 109a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 110a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 111a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 112a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct gpio_keys_platform_data smartq7_buttons_data = { 113a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .buttons = smartq7_buttons, 114a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .nbuttons = ARRAY_SIZE(smartq7_buttons), 115a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 116a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 117a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct platform_device smartq7_buttons_device = { 118a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .name = "gpio-keys", 119a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .id = 0, 120a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .num_resources = 0, 121a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .dev = { 122a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .platform_data = &smartq7_buttons_data, 123a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere } 124a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 125a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 126a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct s3c_fb_pd_win smartq7_fb_win0 = { 127a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .win_mode = { 128a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .left_margin = 3, 129a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .right_margin = 5, 130a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .upper_margin = 1, 131a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .lower_margin = 20, 132a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .hsync_len = 10, 133a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .vsync_len = 3, 134a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .xres = 800, 135a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .yres = 480, 136daf695fca877068d7533a1b431b09210e5ad0b6bMaurus Cuelenaere .refresh = 80, 137a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere }, 138a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .max_bpp = 32, 139a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .default_bpp = 16, 140a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 141a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 142a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct s3c_fb_platdata smartq7_lcd_pdata __initdata = { 143a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .setup_gpio = s3c64xx_fb_gpio_setup_24bpp, 144a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .win[0] = &smartq7_fb_win0, 145a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB, 146a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC | 147a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere VIDCON1_INV_VCLK, 148a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 149a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 150a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic struct platform_device *smartq7_devices[] __initdata = { 151a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere &smartq7_leds_device, 152a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere &smartq7_buttons_device, 153a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere}; 154a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 155a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaerestatic void __init smartq7_machine_init(void) 156a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere{ 157a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere s3c_fb_set_platdata(&smartq7_lcd_pdata); 158a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 159a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere smartq_machine_init(); 160a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 161a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere platform_add_devices(smartq7_devices, ARRAY_SIZE(smartq7_devices)); 162a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere} 163a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere 164a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus CuelenaereMACHINE_START(SMARTQ7, "SmartQ 7") 165a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ 166170a59080dfb8b3115ccce8f90fbceeb242d895aNicolas Pitre .atag_offset = 0x100, 167a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .init_irq = s3c6410_init_irq, 168774b51f8f8269cb9a2cdbe2ac2c0a2ff62250b01Jamie Iles .handle_irq = vic_handle_irq, 169a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .map_io = smartq_map_io, 170a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .init_machine = smartq7_machine_init, 171a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus Cuelenaere .timer = &s3c24xx_timer, 172ff84ded26525adb4c0dcef3a4d590b0d08967293Kukjin Kim .restart = s3c64xx_restart, 173a2f7bffa29f18266bc7b55a2b47a5fa1274ed53fMaurus CuelenaereMACHINE_END 174