^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * ezx.c - Common code for the EZX platform.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2005-2006 Harald Welte <laforge@openezx.org>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * 2007-2008 Daniel Ribeiro <drwyrm@gmail.com>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * 2007-2008 Stefan Schmidt <stefan@datenfreihafen.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/pwm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/pwm_backlight.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/regulator/machine.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/regulator/fixed.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/input.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <linux/gpio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include <linux/gpio/machine.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include <linux/gpio_keys.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include <linux/leds-lp3944.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include <linux/platform_data/i2c-pxa.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #include <asm/setup.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #include <asm/mach-types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #include <asm/mach/arch.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #include "pxa27x.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #include <linux/platform_data/video-pxafb.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #include <linux/platform_data/usb-ohci-pxa27x.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #include <mach/hardware.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #include <linux/platform_data/keypad-pxa27x.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #include <linux/platform_data/media/camera-pxa.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #include "devices.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #include "generic.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define EZX_NR_IRQS (IRQ_BOARD_START + 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define GPIO12_A780_FLIP_LID 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define GPIO15_A1200_FLIP_LID 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define GPIO15_A910_FLIP_LID 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define GPIO12_E680_LOCK_SWITCH 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define GPIO15_E6_LOCK_SWITCH 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define GPIO50_nCAM_EN 50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define GPIO19_GEN1_CAM_RST 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define GPIO28_GEN2_CAM_RST 28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) static struct pwm_lookup ezx_pwm_lookup[] __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) PWM_LOOKUP("pxa27x-pwm.0", 0, "pwm-backlight.0", NULL, 78700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) PWM_POLARITY_NORMAL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) static struct platform_pwm_backlight_data ezx_backlight_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .max_brightness = 1023,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) .dft_brightness = 1023,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) static struct platform_device ezx_backlight_device = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .name = "pwm-backlight",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .parent = &pxa27x_device_pwm0.dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .platform_data = &ezx_backlight_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) static struct pxafb_mode_info mode_ezx_old = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .pixclock = 150000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) .xres = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) .yres = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) .bpp = 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) .hsync_len = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) .left_margin = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .right_margin = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .vsync_len = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) .upper_margin = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) .lower_margin = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .sync = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) static struct pxafb_mach_info ezx_fb_info_1 __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) .modes = &mode_ezx_old,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) .lcd_conn = LCD_COLOR_TFT_16BPP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) static struct pxafb_mode_info mode_72r89803y01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .pixclock = 192308,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .xres = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) .yres = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) .bpp = 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) .depth = 18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) .hsync_len = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) .left_margin = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) .right_margin = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .vsync_len = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .upper_margin = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .lower_margin = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .sync = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) static struct pxafb_mach_info ezx_fb_info_2 __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) .modes = &mode_72r89803y01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) .lcd_conn = LCD_COLOR_TFT_18BPP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) static struct platform_device *ezx_devices[] __initdata __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) &ezx_backlight_device,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) static unsigned long ezx_pin_config[] __initdata __maybe_unused = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) /* PWM backlight */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) GPIO16_PWM0_OUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /* BTUART */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) GPIO42_BTUART_RXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) GPIO43_BTUART_TXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) GPIO44_BTUART_CTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) GPIO45_BTUART_RTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) /* I2C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) GPIO117_I2C_SCL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) GPIO118_I2C_SDA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* PCAP SSP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) GPIO29_SSP1_SCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) GPIO25_SSP1_TXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) GPIO26_SSP1_RXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) GPIO24_GPIO, /* pcap chip select */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) GPIO1_GPIO | WAKEUP_ON_EDGE_RISE, /* pcap interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) GPIO4_GPIO | MFP_LPM_DRIVE_HIGH, /* WDI_AP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) GPIO55_GPIO | MFP_LPM_DRIVE_HIGH, /* SYS_RESTART */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /* MMC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) GPIO32_MMC_CLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) GPIO92_MMC_DAT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) GPIO109_MMC_DAT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) GPIO110_MMC_DAT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) GPIO111_MMC_DAT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) GPIO112_MMC_CMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) GPIO11_GPIO, /* mmc detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) /* usb to external transceiver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) GPIO34_USB_P2_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) GPIO35_USB_P2_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) GPIO36_USB_P2_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) GPIO39_USB_P2_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) GPIO40_USB_P2_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) GPIO53_USB_P2_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* usb to Neptune GSM chip */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) GPIO30_USB_P3_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) GPIO31_USB_P3_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) GPIO90_USB_P3_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) GPIO91_USB_P3_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) GPIO56_USB_P3_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) GPIO113_USB_P3_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) static unsigned long gen1_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /* flip / lockswitch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* bluetooth (bcm2035) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) GPIO14_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) GPIO48_GPIO, /* RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) GPIO28_GPIO, /* WAKEUP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) /* Neptune handshake */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) GPIO57_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) GPIO82_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) GPIO99_GPIO | MFP_LPM_DRIVE_HIGH, /* TC_MM_EN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /* sound */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) GPIO52_SSP3_SCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) GPIO83_SSP3_SFRM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) GPIO81_SSP3_TXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) GPIO89_SSP3_RXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /* ssp2 pins to in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) GPIO22_GPIO, /* SSP2_SCLK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) GPIO37_GPIO, /* SSP2_SFRM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) GPIO38_GPIO, /* SSP2_TXD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) GPIO88_GPIO, /* SSP2_RXD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* camera */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) GPIO23_CIF_MCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) GPIO54_CIF_PCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) GPIO85_CIF_LV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) GPIO84_CIF_FV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) GPIO27_CIF_DD_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) GPIO114_CIF_DD_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) GPIO51_CIF_DD_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) GPIO115_CIF_DD_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) GPIO95_CIF_DD_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) GPIO94_CIF_DD_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) GPIO17_CIF_DD_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) GPIO108_CIF_DD_7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) GPIO50_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_EN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) GPIO19_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_RST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) /* EMU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) GPIO120_GPIO, /* EMU_MUX1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) GPIO119_GPIO, /* EMU_MUX2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) GPIO86_GPIO, /* SNP_INT_CTL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) GPIO87_GPIO, /* SNP_INT_IN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #if defined(CONFIG_MACH_EZX_A1200) || defined(CONFIG_MACH_EZX_A910) || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) static unsigned long gen2_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /* flip / lockswitch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) /* EOC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) /* bluetooth (bcm2045) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) GPIO13_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) GPIO37_GPIO, /* RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) GPIO57_GPIO, /* WAKEUP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /* Neptune handshake */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) GPIO96_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) GPIO3_GPIO | WAKEUP_ON_EDGE_FALL, /* WDI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) GPIO41_GPIO, /* BP_FLASH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) /* sound */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) GPIO52_SSP3_SCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) GPIO83_SSP3_SFRM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) GPIO81_SSP3_TXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) GPIO82_SSP3_RXD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /* ssp2 pins to in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) GPIO22_GPIO, /* SSP2_SCLK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) GPIO14_GPIO, /* SSP2_SFRM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) GPIO38_GPIO, /* SSP2_TXD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) GPIO88_GPIO, /* SSP2_RXD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) /* camera */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) GPIO23_CIF_MCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) GPIO54_CIF_PCLK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) GPIO85_CIF_LV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) GPIO84_CIF_FV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) GPIO27_CIF_DD_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) GPIO114_CIF_DD_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) GPIO51_CIF_DD_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) GPIO115_CIF_DD_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) GPIO95_CIF_DD_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) GPIO48_CIF_DD_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) GPIO93_CIF_DD_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) GPIO12_CIF_DD_7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) GPIO50_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_EN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) GPIO28_GPIO | MFP_LPM_DRIVE_HIGH, /* CAM_RST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) GPIO17_GPIO, /* CAM_FLASH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #ifdef CONFIG_MACH_EZX_A780
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) static unsigned long a780_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) GPIO107_KP_MKOUT_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) /* attenuate sound */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) GPIO96_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #ifdef CONFIG_MACH_EZX_E680
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) static unsigned long e680_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) GPIO96_KP_DKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) GPIO97_KP_DKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) GPIO98_KP_DKIN_5 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) /* MIDI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) GPIO79_GPIO, /* VA_SEL_BUL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) GPIO80_GPIO, /* FLT_SEL_BUL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) GPIO78_GPIO, /* MIDI_RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) GPIO33_GPIO, /* MIDI_CS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) GPIO15_GPIO, /* MIDI_IRQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) GPIO49_GPIO, /* MIDI_NPWE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) GPIO18_GPIO, /* MIDI_RDY */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) /* leds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) GPIO46_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) GPIO47_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) #ifdef CONFIG_MACH_EZX_A1200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) static unsigned long a1200_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) GPIO107_KP_MKOUT_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) GPIO108_KP_MKOUT_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #ifdef CONFIG_MACH_EZX_A910
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) static unsigned long a910_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) GPIO107_KP_MKOUT_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) GPIO108_KP_MKOUT_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) /* WLAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) GPIO89_GPIO, /* RESET */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) GPIO33_GPIO, /* WAKEUP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) GPIO94_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) /* MMC CS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) GPIO20_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) #ifdef CONFIG_MACH_EZX_E2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) static unsigned long e2_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) GPIO107_KP_MKOUT_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) GPIO108_KP_MKOUT_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #ifdef CONFIG_MACH_EZX_E6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) static unsigned long e6_pin_config[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) /* keypad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) GPIO98_KP_MKIN_4 | WAKEUP_ON_LEVEL_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) GPIO103_KP_MKOUT_0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) GPIO104_KP_MKOUT_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) GPIO105_KP_MKOUT_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) GPIO106_KP_MKOUT_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) GPIO107_KP_MKOUT_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) GPIO108_KP_MKOUT_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) /* KEYPAD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #ifdef CONFIG_MACH_EZX_A780
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) static const unsigned int a780_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) KEY(0, 0, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) KEY(0, 1, KEY_BACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) KEY(0, 2, KEY_END),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) KEY(0, 3, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) KEY(0, 4, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) KEY(1, 0, KEY_NUMERIC_1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) KEY(1, 1, KEY_NUMERIC_2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) KEY(1, 2, KEY_NUMERIC_3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) KEY(1, 3, KEY_SELECT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) KEY(1, 4, KEY_KPENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) KEY(2, 0, KEY_NUMERIC_4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) KEY(2, 1, KEY_NUMERIC_5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) KEY(2, 2, KEY_NUMERIC_6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) KEY(2, 3, KEY_RECORD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) KEY(2, 4, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) KEY(3, 0, KEY_NUMERIC_7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) KEY(3, 1, KEY_NUMERIC_8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) KEY(3, 2, KEY_NUMERIC_9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) KEY(3, 3, KEY_HOME),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) KEY(3, 4, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) KEY(4, 0, KEY_NUMERIC_STAR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) KEY(4, 1, KEY_NUMERIC_0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) KEY(4, 2, KEY_NUMERIC_POUND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) KEY(4, 3, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) KEY(4, 4, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) static struct matrix_keymap_data a780_matrix_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) .keymap = a780_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) .keymap_size = ARRAY_SIZE(a780_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) static struct pxa27x_keypad_platform_data a780_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) .matrix_key_rows = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) .matrix_key_cols = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .matrix_keymap_data = &a780_matrix_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) .direct_key_map = { KEY_CAMERA },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) .direct_key_num = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) #endif /* CONFIG_MACH_EZX_A780 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) #ifdef CONFIG_MACH_EZX_E680
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) static const unsigned int e680_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) KEY(0, 0, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) KEY(0, 1, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) KEY(0, 2, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) KEY(0, 3, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) KEY(1, 0, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) KEY(1, 1, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) KEY(1, 2, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) KEY(1, 3, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) KEY(2, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) KEY(2, 1, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) KEY(2, 2, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) KEY(2, 3, KEY_KPENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) static struct matrix_keymap_data e680_matrix_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) .keymap = e680_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) .keymap_size = ARRAY_SIZE(e680_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) static struct pxa27x_keypad_platform_data e680_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) .matrix_key_rows = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) .matrix_key_cols = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) .matrix_keymap_data = &e680_matrix_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) .direct_key_map = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) KEY_CAMERA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) KEY_RESERVED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) KEY_RESERVED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) KEY_F1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) KEY_CANCEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) KEY_F2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) .direct_key_num = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) #endif /* CONFIG_MACH_EZX_E680 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) #ifdef CONFIG_MACH_EZX_A1200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) static const unsigned int a1200_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) KEY(0, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) KEY(0, 1, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) KEY(0, 2, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) KEY(0, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) KEY(0, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) KEY(0, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) KEY(1, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) KEY(1, 1, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) KEY(1, 2, KEY_CAMERA),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) KEY(1, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) KEY(1, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) KEY(1, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) KEY(2, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) KEY(2, 1, KEY_KPENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) KEY(2, 2, KEY_RECORD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) KEY(2, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) KEY(2, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) KEY(2, 5, KEY_SELECT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) KEY(3, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) KEY(3, 1, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) KEY(3, 2, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) KEY(3, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) KEY(3, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) KEY(3, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) KEY(4, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) KEY(4, 1, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) KEY(4, 2, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) KEY(4, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) KEY(4, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) KEY(4, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) static struct matrix_keymap_data a1200_matrix_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) .keymap = a1200_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) .keymap_size = ARRAY_SIZE(a1200_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) static struct pxa27x_keypad_platform_data a1200_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) .matrix_key_rows = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) .matrix_key_cols = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) .matrix_keymap_data = &a1200_matrix_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) #endif /* CONFIG_MACH_EZX_A1200 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #ifdef CONFIG_MACH_EZX_E6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) static const unsigned int e6_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) KEY(0, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) KEY(0, 1, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) KEY(0, 2, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) KEY(0, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) KEY(0, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) KEY(0, 5, KEY_NEXTSONG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) KEY(1, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) KEY(1, 1, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) KEY(1, 2, KEY_PROG1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) KEY(1, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) KEY(1, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) KEY(1, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) KEY(2, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) KEY(2, 1, KEY_ENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) KEY(2, 2, KEY_CAMERA),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) KEY(2, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) KEY(2, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) KEY(2, 5, KEY_WWW),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) KEY(3, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) KEY(3, 1, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) KEY(3, 2, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) KEY(3, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) KEY(3, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) KEY(3, 5, KEY_PLAYPAUSE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) KEY(4, 0, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) KEY(4, 1, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) KEY(4, 2, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) KEY(4, 3, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) KEY(4, 4, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) KEY(4, 5, KEY_PREVIOUSSONG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) static struct matrix_keymap_data e6_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) .keymap = e6_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) .keymap_size = ARRAY_SIZE(e6_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) static struct pxa27x_keypad_platform_data e6_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) .matrix_key_rows = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) .matrix_key_cols = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) .matrix_keymap_data = &e6_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) #endif /* CONFIG_MACH_EZX_E6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) #ifdef CONFIG_MACH_EZX_A910
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) static const unsigned int a910_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) KEY(0, 0, KEY_NUMERIC_6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) KEY(0, 1, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) KEY(0, 2, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) KEY(0, 3, KEY_KPENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) KEY(0, 4, KEY_NUMERIC_5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) KEY(0, 5, KEY_CAMERA),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) KEY(1, 0, KEY_NUMERIC_8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) KEY(1, 1, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) KEY(1, 2, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) KEY(1, 3, KEY_F1), /* Left SoftKey */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) KEY(1, 4, KEY_NUMERIC_STAR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) KEY(1, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) KEY(2, 0, KEY_NUMERIC_7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) KEY(2, 1, KEY_NUMERIC_9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) KEY(2, 2, KEY_RECORD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) KEY(2, 3, KEY_F2), /* Right SoftKey */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) KEY(2, 4, KEY_BACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) KEY(2, 5, KEY_SELECT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) KEY(3, 0, KEY_NUMERIC_2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) KEY(3, 1, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) KEY(3, 2, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) KEY(3, 3, KEY_NUMERIC_0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) KEY(3, 4, KEY_NUMERIC_1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) KEY(3, 5, KEY_RECORD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) KEY(4, 0, KEY_NUMERIC_4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) KEY(4, 1, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) KEY(4, 2, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) KEY(4, 3, KEY_NUMERIC_POUND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) KEY(4, 4, KEY_NUMERIC_3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) KEY(4, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) static struct matrix_keymap_data a910_matrix_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) .keymap = a910_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) .keymap_size = ARRAY_SIZE(a910_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) static struct pxa27x_keypad_platform_data a910_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .matrix_key_rows = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) .matrix_key_cols = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) .matrix_keymap_data = &a910_matrix_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) #endif /* CONFIG_MACH_EZX_A910 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) #ifdef CONFIG_MACH_EZX_E2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) static const unsigned int e2_key_map[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) KEY(0, 0, KEY_NUMERIC_6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) KEY(0, 1, KEY_RIGHT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) KEY(0, 2, KEY_NUMERIC_9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) KEY(0, 3, KEY_NEXTSONG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) KEY(0, 4, KEY_NUMERIC_5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) KEY(0, 5, KEY_F1), /* Left SoftKey */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) KEY(1, 0, KEY_NUMERIC_8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) KEY(1, 1, KEY_DOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) KEY(1, 2, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) KEY(1, 3, KEY_PAGEUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) KEY(1, 4, KEY_NUMERIC_STAR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) KEY(1, 5, KEY_F2), /* Right SoftKey */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) KEY(2, 0, KEY_NUMERIC_7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) KEY(2, 1, KEY_KPENTER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) KEY(2, 2, KEY_RECORD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) KEY(2, 3, KEY_PAGEDOWN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) KEY(2, 4, KEY_BACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) KEY(2, 5, KEY_NUMERIC_0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) KEY(3, 0, KEY_NUMERIC_2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) KEY(3, 1, KEY_UP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) KEY(3, 2, KEY_SEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) KEY(3, 3, KEY_PLAYPAUSE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) KEY(3, 4, KEY_NUMERIC_1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) KEY(3, 5, KEY_SOUND), /* Music SoftKey */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) KEY(4, 0, KEY_NUMERIC_4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) KEY(4, 1, KEY_LEFT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) KEY(4, 2, KEY_NUMERIC_POUND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) KEY(4, 3, KEY_PREVIOUSSONG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) KEY(4, 4, KEY_NUMERIC_3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) KEY(4, 5, KEY_RESERVED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) static struct matrix_keymap_data e2_matrix_keymap_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) .keymap = e2_key_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) .keymap_size = ARRAY_SIZE(e2_key_map),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) static struct pxa27x_keypad_platform_data e2_keypad_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) .matrix_key_rows = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) .matrix_key_cols = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) .matrix_keymap_data = &e2_matrix_keymap_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) .debounce_interval = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) #endif /* CONFIG_MACH_EZX_E2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_A910)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) /* camera */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) static struct regulator_consumer_supply camera_regulator_supplies[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) REGULATOR_SUPPLY("vdd", "0-005d"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) static struct regulator_init_data camera_regulator_initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) .consumer_supplies = camera_regulator_supplies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) .num_consumer_supplies = ARRAY_SIZE(camera_regulator_supplies),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) .constraints = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) .valid_ops_mask = REGULATOR_CHANGE_STATUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) static struct fixed_voltage_config camera_regulator_config = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) .supply_name = "camera_vdd",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) .microvolts = 2800000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) .init_data = &camera_regulator_initdata,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) static struct platform_device camera_supply_regulator_device = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) .name = "reg-fixed-voltage",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) .id = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) .platform_data = &camera_regulator_config,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) static struct gpiod_lookup_table camera_supply_gpiod_table = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) .dev_id = "reg-fixed-voltage.1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) .table = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) GPIO_LOOKUP("gpio-pxa", GPIO50_nCAM_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) NULL, GPIO_ACTIVE_LOW),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) #ifdef CONFIG_MACH_EZX_A780
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) /* gpio_keys */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) static struct gpio_keys_button a780_buttons[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) .code = SW_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) .gpio = GPIO12_A780_FLIP_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) .active_low = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) .desc = "A780 flip lid",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) .type = EV_SW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) .wakeup = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) static struct gpio_keys_platform_data a780_gpio_keys_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) .buttons = a780_buttons,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) .nbuttons = ARRAY_SIZE(a780_buttons),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) static struct platform_device a780_gpio_keys = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) .name = "gpio-keys",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) .id = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) .platform_data = &a780_gpio_keys_platform_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) /* camera */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) static int a780_camera_reset(struct device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) gpio_set_value(GPIO19_GEN1_CAM_RST, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) msleep(10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) gpio_set_value(GPIO19_GEN1_CAM_RST, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) static int a780_camera_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) * GPIO50_nCAM_EN is active low
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) * GPIO19_GEN1_CAM_RST is active on rising edge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) err = gpio_request(GPIO19_GEN1_CAM_RST, "CAM_RST");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) pr_err("%s: Failed to request CAM_RST\n", __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) gpio_direction_output(GPIO19_GEN1_CAM_RST, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) a780_camera_reset(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) struct pxacamera_platform_data a780_pxacamera_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) .flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) PXA_CAMERA_PCP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) .mclk_10khz = 5000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) .sensor_i2c_adapter_id = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) .sensor_i2c_address = 0x5d,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) static struct i2c_board_info a780_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) I2C_BOARD_INFO("mt9m111", 0x5d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) static struct platform_device *a780_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) &a780_gpio_keys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) &camera_supply_regulator_device,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) static void __init a780_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) pxa2xx_mfp_config(ARRAY_AND_SIZE(a780_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) i2c_register_board_info(0, ARRAY_AND_SIZE(a780_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) pxa_set_fb_info(NULL, &ezx_fb_info_1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) pxa_set_keypad_info(&a780_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) if (a780_camera_init() == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) pxa_set_camera_info(&a780_pxacamera_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) gpiod_add_lookup_table(&camera_supply_gpiod_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) platform_add_devices(ARRAY_AND_SIZE(a780_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) regulator_has_full_constraints();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) MACHINE_START(EZX_A780, "Motorola EZX A780")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) .init_machine = a780_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) #ifdef CONFIG_MACH_EZX_E680
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) /* gpio_keys */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) static struct gpio_keys_button e680_buttons[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) .code = KEY_SCREENLOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) .gpio = GPIO12_E680_LOCK_SWITCH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) .active_low = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) .desc = "E680 lock switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) .type = EV_KEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) .wakeup = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) static struct gpio_keys_platform_data e680_gpio_keys_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) .buttons = e680_buttons,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) .nbuttons = ARRAY_SIZE(e680_buttons),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) static struct platform_device e680_gpio_keys = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) .name = "gpio-keys",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) .id = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) .platform_data = &e680_gpio_keys_platform_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) static struct i2c_board_info __initdata e680_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) { I2C_BOARD_INFO("tea5767", 0x81) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) static struct platform_device *e680_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) &e680_gpio_keys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) static void __init e680_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen1_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) pxa2xx_mfp_config(ARRAY_AND_SIZE(e680_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) i2c_register_board_info(0, ARRAY_AND_SIZE(e680_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) pxa_set_fb_info(NULL, &ezx_fb_info_1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) pxa_set_keypad_info(&e680_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) platform_add_devices(ARRAY_AND_SIZE(e680_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) MACHINE_START(EZX_E680, "Motorola EZX E680")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) .init_machine = e680_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) #ifdef CONFIG_MACH_EZX_A1200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) /* gpio_keys */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) static struct gpio_keys_button a1200_buttons[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) .code = SW_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) .gpio = GPIO15_A1200_FLIP_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) .active_low = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) .desc = "A1200 flip lid",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) .type = EV_SW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) .wakeup = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) static struct gpio_keys_platform_data a1200_gpio_keys_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) .buttons = a1200_buttons,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) .nbuttons = ARRAY_SIZE(a1200_buttons),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) static struct platform_device a1200_gpio_keys = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) .name = "gpio-keys",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) .id = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) .platform_data = &a1200_gpio_keys_platform_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) static struct i2c_board_info __initdata a1200_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) { I2C_BOARD_INFO("tea5767", 0x81) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) static struct platform_device *a1200_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) &a1200_gpio_keys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) static void __init a1200_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) pxa2xx_mfp_config(ARRAY_AND_SIZE(a1200_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) i2c_register_board_info(0, ARRAY_AND_SIZE(a1200_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) pxa_set_fb_info(NULL, &ezx_fb_info_2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) pxa_set_keypad_info(&a1200_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) platform_add_devices(ARRAY_AND_SIZE(a1200_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) MACHINE_START(EZX_A1200, "Motorola EZX A1200")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) .init_machine = a1200_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) #ifdef CONFIG_MACH_EZX_A910
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) /* gpio_keys */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) static struct gpio_keys_button a910_buttons[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) .code = SW_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) .gpio = GPIO15_A910_FLIP_LID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) .active_low = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) .desc = "A910 flip lid",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) .type = EV_SW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) .wakeup = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) static struct gpio_keys_platform_data a910_gpio_keys_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) .buttons = a910_buttons,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) .nbuttons = ARRAY_SIZE(a910_buttons),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) static struct platform_device a910_gpio_keys = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) .name = "gpio-keys",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) .id = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) .platform_data = &a910_gpio_keys_platform_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) /* camera */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) static int a910_camera_reset(struct device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) gpio_set_value(GPIO28_GEN2_CAM_RST, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) msleep(10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) gpio_set_value(GPIO28_GEN2_CAM_RST, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) static int a910_camera_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) * GPIO50_nCAM_EN is active low
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) * GPIO28_GEN2_CAM_RST is active on rising edge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) err = gpio_request(GPIO28_GEN2_CAM_RST, "CAM_RST");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) pr_err("%s: Failed to request CAM_RST\n", __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) gpio_direction_output(GPIO28_GEN2_CAM_RST, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) a910_camera_reset(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) struct pxacamera_platform_data a910_pxacamera_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) .flags = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) PXA_CAMERA_PCP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) .mclk_10khz = 5000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) .sensor_i2c_adapter_id = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) .sensor_i2c_address = 0x5d,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) /* leds-lp3944 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) static struct lp3944_platform_data a910_lp3944_leds = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) .leds_size = LP3944_LEDS_MAX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) .leds = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) .name = "a910:red:",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) .type = LP3944_LED_TYPE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) [1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) .name = "a910:green:",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) .type = LP3944_LED_TYPE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) [2] {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) .name = "a910:blue:",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) .type = LP3944_LED_TYPE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) /* Leds 3 and 4 are used as display power switches */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) [3] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) .name = "a910::cli_display",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) .type = LP3944_LED_TYPE_LED_INVERTED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) [4] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) .name = "a910::main_display",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) .status = LP3944_LED_STATUS_ON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) .type = LP3944_LED_TYPE_LED_INVERTED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) [5] = { .type = LP3944_LED_TYPE_NONE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) [6] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) .name = "a910::torch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) .type = LP3944_LED_TYPE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) [7] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) .name = "a910::flash",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) .status = LP3944_LED_STATUS_OFF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) .type = LP3944_LED_TYPE_LED_INVERTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) static struct i2c_board_info __initdata a910_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) I2C_BOARD_INFO("lp3944", 0x60),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) .platform_data = &a910_lp3944_leds,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) I2C_BOARD_INFO("mt9m111", 0x5d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) static struct platform_device *a910_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) &a910_gpio_keys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) &camera_supply_regulator_device,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) static void __init a910_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) pxa2xx_mfp_config(ARRAY_AND_SIZE(a910_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) i2c_register_board_info(0, ARRAY_AND_SIZE(a910_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) pxa_set_fb_info(NULL, &ezx_fb_info_2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) pxa_set_keypad_info(&a910_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) if (a910_camera_init() == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) pxa_set_camera_info(&a910_pxacamera_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) gpiod_add_lookup_table(&camera_supply_gpiod_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) platform_add_devices(ARRAY_AND_SIZE(a910_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) regulator_has_full_constraints();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) MACHINE_START(EZX_A910, "Motorola EZX A910")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) .init_machine = a910_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) #ifdef CONFIG_MACH_EZX_E6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) /* gpio_keys */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) static struct gpio_keys_button e6_buttons[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) [0] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) .code = KEY_SCREENLOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) .gpio = GPIO15_E6_LOCK_SWITCH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) .active_low = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) .desc = "E6 lock switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) .type = EV_KEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) .wakeup = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) static struct gpio_keys_platform_data e6_gpio_keys_platform_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) .buttons = e6_buttons,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) .nbuttons = ARRAY_SIZE(e6_buttons),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) static struct platform_device e6_gpio_keys = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) .name = "gpio-keys",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) .id = -1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) .dev = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) .platform_data = &e6_gpio_keys_platform_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) static struct i2c_board_info __initdata e6_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) { I2C_BOARD_INFO("tea5767", 0x81) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) static struct platform_device *e6_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) &e6_gpio_keys,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) static void __init e6_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) pxa2xx_mfp_config(ARRAY_AND_SIZE(e6_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) i2c_register_board_info(0, ARRAY_AND_SIZE(e6_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) pxa_set_fb_info(NULL, &ezx_fb_info_2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) pxa_set_keypad_info(&e6_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) platform_add_devices(ARRAY_AND_SIZE(e6_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) MACHINE_START(EZX_E6, "Motorola EZX E6")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) .init_machine = e6_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) #ifdef CONFIG_MACH_EZX_E2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) static struct i2c_board_info __initdata e2_i2c_board_info[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) { I2C_BOARD_INFO("tea5767", 0x81) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) static struct platform_device *e2_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) static void __init e2_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) pxa2xx_mfp_config(ARRAY_AND_SIZE(gen2_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) pxa2xx_mfp_config(ARRAY_AND_SIZE(e2_pin_config));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) pxa_set_ffuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) pxa_set_btuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) pxa_set_stuart_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) pxa_set_i2c_info(NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) i2c_register_board_info(0, ARRAY_AND_SIZE(e2_i2c_board_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) pxa_set_fb_info(NULL, &ezx_fb_info_2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) pxa_set_keypad_info(&e2_keypad_platform_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) platform_add_devices(ARRAY_AND_SIZE(e2_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) MACHINE_START(EZX_E2, "Motorola EZX E2")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) .atag_offset = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) .map_io = pxa27x_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) .nr_irqs = EZX_NR_IRQS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) .init_irq = pxa27x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) .handle_irq = pxa27x_handle_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) .init_time = pxa_timer_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) .init_machine = e2_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) .restart = pxa_restart,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) MACHINE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) #endif