Andrey Porodko <[email protected]> writes: > The Neuros OSD 2.0 is the hardware component of the Neuros Open > Internet Television Platform. Hardware is very close to Ti DM644X-EVM board. > It has: DM6446M02 module with 256MB NAND, 256MB RAM, TLV320AIC32 AIC, > USB, Ethernet, SD/MMC, UART, THS8200, TVP7000 for video. > Additionaly realtime clock, IR remote control receiver, > IR Blaster based on MSP430 (firmware although is different > from used in DM644X-EVM), internal ATA-6 3.5” HDD drive > with PATA interface, two muxed red-green leds. > > For more information please refer to > http://wiki.neurostechnology.com/index.php/OSD_2.0_HD > > Signed-off-by: Andrey Porodko <[email protected]>
Still has checkpatch problems. I know you inherited some of them from dm644x, but they should still be fixed. > --- > arch/arm/mach-davinci/Kconfig | 45 +++-- > arch/arm/mach-davinci/Makefile | 3 +- > arch/arm/mach-davinci/board-neuros-osd2.c | 323 > +++++++++++++++++++++++++++++ > arch/arm/mach-davinci/dm644x.c | 7 +- > arch/arm/mach-davinci/include/mach/mux.h | 9 +- > 5 files changed, 367 insertions(+), 20 deletions(-) > create mode 100644 arch/arm/mach-davinci/board-neuros-osd2.c > > diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig > index 89d5aa7..874f2c1 100644 > --- a/arch/arm/mach-davinci/Kconfig > +++ b/arch/arm/mach-davinci/Kconfig > @@ -32,13 +32,13 @@ config ARCH_DAVINCI_DA830 > bool "DA830/OMAP-L137 based system" > select CP_INTC > select ARCH_DAVINCI_DA8XX > + select ARCH_HAS_CPUFREQ > select CPU_DCACHE_WRITETHROUGH # needed on silicon revs 1.0, 1.1 > > config ARCH_DAVINCI_DA850 > bool "DA850/OMAP-L138 based system" > select CP_INTC > select ARCH_DAVINCI_DA8XX > - select ARCH_HAS_CPUFREQ As Koen pointed out, this s touching an unrelated platform and there are many other unrelated Kconfig changes below. Please fix them. > config ARCH_DAVINCI_DA8XX > bool > @@ -65,6 +65,13 @@ config MACH_SFFSDR > Say Y here to select the Lyrtech Small Form Factor > Software Defined Radio (SFFSDR) board. > > +config MACH_NEUROS_OSD2 > + bool "Neuros OSD2 Open Television Set Top Box" > + depends on ARCH_DAVINCI_DM644x > + help > + Configure this option to specify the whether the board used > + for development is a Neuros OSD2 Open Set Top Box. > + > config MACH_DAVINCI_DM355_EVM > bool "TI DM355 EVM" > default ARCH_DAVINCI_DM355 > @@ -100,18 +107,21 @@ config MACH_DAVINCI_DA830_EVM > bool "TI DA830/OMAP-L137 Reference Platform" > default ARCH_DAVINCI_DA830 > depends on ARCH_DAVINCI_DA830 > - select GPIO_PCF857X > > help > Say Y here to select the TI DA830/OMAP-L137 Evaluation Module. > > -choice > - prompt "Select DA830/OMAP-L137 UI board peripheral" > +config DA830_UI > + bool "DA830/OMAP-L137 UI (User Interface) board support" > depends on MACH_DAVINCI_DA830_EVM > help > - The presence of UI card on the DA830/OMAP-L137 EVM is detected > - automatically based on successful probe of the I2C based GPIO > - expander on that board. This option selected in this menu has > - an effect only in case of a successful UI card detection. > + Say Y here if you have the DA830/OMAP-L137 UI > + (User Interface) board installed and you want to > + enable the peripherals located on User Interface > + board. > + > +choice > + prompt "Select DA830/OMAP-L137 UI board peripheral" > + depends on DA830_UI > > config DA830_UI_LCD > bool "LCD" > @@ -130,18 +140,23 @@ config MACH_DAVINCI_DA850_EVM > bool "TI DA850/OMAP-L138 Reference Platform" > default ARCH_DAVINCI_DA850 > depends on ARCH_DAVINCI_DA850 > - select GPIO_PCA953X > help > Say Y here to select the TI DA850/OMAP-L138 Evaluation Module. > > -choice > - prompt "Select peripherals connected to expander on UI board" > + > +config DA850_UI_EXP > + bool "DA850/OMAP-L138 UI (User Interface) board expander configuration" > depends on MACH_DAVINCI_DA850_EVM > + select GPIO_PCA953X > help > - The presence of User Interface (UI) card on the DA850/OMAP-L138 > - EVM is detected automatically based on successful probe of the I2C > - based GPIO expander on that card. This option selected in this > - menu has an effect only in case of a successful UI card detection. > + Say Y here if you have the DA850/OMAP-L138 UI > + (User Interface) board installed and you want to > + enable the peripherals located on User Interface > + board contorlled by TCA6416 expander. > + > +choice > + prompt "Select peripherals connected to expander on UI board" > + depends on DA850_UI_EXP > > config DA850_UI_NONE > bool "No peripheral is enabled" > diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile > index 5eae1a9..b1446c5 100644 > --- a/arch/arm/mach-davinci/Makefile > +++ b/arch/arm/mach-davinci/Makefile > @@ -23,13 +23,12 @@ obj-$(CONFIG_CP_INTC) += cp_intc.o > # Board specific > obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o > obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o > +obj-$(CONFIG_MACH_NEUROS_OSD2) += board-neuros-osd2.o > obj-$(CONFIG_MACH_DAVINCI_DM355_EVM) += board-dm355-evm.o > obj-$(CONFIG_MACH_DM355_LEOPARD) += board-dm355-leopard.o > obj-$(CONFIG_MACH_DAVINCI_DM6467_EVM) += board-dm646x-evm.o > obj-$(CONFIG_MACH_DAVINCI_DM365_EVM) += board-dm365-evm.o > obj-$(CONFIG_MACH_DAVINCI_DA830_EVM) += board-da830-evm.o > obj-$(CONFIG_MACH_DAVINCI_DA850_EVM) += board-da850-evm.o > - > # Power Management > obj-$(CONFIG_CPU_FREQ) += cpufreq.o > -obj-$(CONFIG_CPU_IDLE) += cpuidle.o > diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c > b/arch/arm/mach-davinci/board-neuros-osd2.c > new file mode 100644 > index 0000000..d6971cf > --- /dev/null > +++ b/arch/arm/mach-davinci/board-neuros-osd2.c > @@ -0,0 +1,323 @@ > +/* > + * Neuros Technologies OSD2 board support > + * > + * Modified from original 644X-EVM board support. > + * 2008 (c) Neuros Technology, LLC. > + * 2009 (c) Jorge Luis Zapata Muga <[email protected]> > + * 2009 (c) Andrey A. Porodko <[email protected]> > + * > + * The Neuros OSD 2.0 is the hardware component of the Neuros Open > + * Internet Television Platform. Hardware is very close to Ti > + * DM644X-EVM board. It has: > + * DM6446M02 module with 256MB NAND, 256MB RAM, TLV320AIC32 AIC, > + * USB, Ethernet, SD/MMC, UART, THS8200, TVP7000 for video. > + * Additionaly realtime clock, IR remote control receiver, > + * IR Blaster based on MSP430 (firmware although is different > + * from used in DM644X-EVM), internal ATA-6 3.5” HDD drive > + * with PATA interface, two muxed red-green leds. > + * > + * For more information please refer to > + * http://wiki.neurostechnology.com/index.php/OSD_2.0_HD > + * > + * 10/2009 Initial code with nand flash, fb, ide, ethernet, leds-gpio, > + * usb support. > + */ > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/dma-mapping.h> > +#include <linux/platform_device.h> > +#include <linux/gpio.h> > +#include <linux/leds.h> > +#include <linux/memory.h> > + > +#include <linux/i2c.h> > +#include <linux/etherdevice.h> > +#include <linux/mtd/mtd.h> > +#include <linux/mtd/nand.h> > +#include <linux/mtd/partitions.h> > +#include <linux/mtd/physmap.h> > +#include <linux/io.h> > +#include <linux/phy.h> > +#include <linux/clk.h> > +#include <asm/setup.h> > +#include <asm/mach-types.h> > + > +#include <asm/mach/arch.h> > +#include <asm/mach/map.h> > +#include <asm/mach/flash.h> > + > +#include <mach/dm644x.h> > +#include <mach/common.h> > +#include <mach/i2c.h> > +#include <mach/serial.h> > +#include <mach/mux.h> > +#include <mach/psc.h> > +#include <mach/nand.h> > +#include <mach/mmc.h> > +#include <mach/emac.h> > +#include <mach/usb.h> > +#include <mach/common.h> Please only include headers that are actually needed. I don't think etherdevice.h and phy.h are needed, and some of the mach ones aren't either. Please double check. > + > +#define NEUROS_OSD2_PHY_MASK (0x2) > +#define NEUROS_OSD2_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ > + > +#define DAVINCI_CFC_ATA_BASE 0x01C66000 > + > +#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e00000 > +#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 > + > +#define LXT971_PHY_ID (0x001378e2) > +#define LXT971_PHY_MASK (0xfffffff0) > + > +#define NTOSD2_AUDIOSOC_I2C_ADDR 0x18 > +#define NTOSD2_MSP430_I2C_ADDR 0x59 > +#define NTOSD2_MSP430_IRQ 2 > + > +/* Neuros OSD2 has a Samsung 256 MByte NAND flash (Dev ID of 0xAA, > + * 2048 blocks in the device, 64 pages per block, 2048 bytes per > + * page. > + */ > + > +#define NAND_BLOCK_SIZE SZ_128K > + > +struct mtd_partition davinci_ntosd2_nandflash_partition[] = { > + { > + /* UBL (a few copies) plus U-Boot */ > + .name = "bootloader", > + .offset = 0, > + .size = 15 * NAND_BLOCK_SIZE, > + .mask_flags = MTD_WRITEABLE, /* force read-only */ > + }, { > + /* U-Boot environment */ > + .name = "params", > + .offset = MTDPART_OFS_APPEND, > + .size = 1 * NAND_BLOCK_SIZE, > + .mask_flags = 0, > + }, { > + /* Kernel */ > + .name = "kernel", > + .offset = MTDPART_OFS_APPEND, > + .size = SZ_4M, > + .mask_flags = 0, > + }, { > + /* File System */ > + .name = "filesystem", > + .offset = MTDPART_OFS_APPEND, > + .size = MTDPART_SIZ_FULL, > + .mask_flags = 0, > + } > + /* A few blocks at end hold a flash Bad Block Table. */ > +}; > + > +static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = { > + .parts = davinci_ntosd2_nandflash_partition, > + .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), > + .ecc_mode = NAND_ECC_HW, > + .options = NAND_USE_FLASH_BBT, > +}; > + > +static struct resource davinci_ntosd2_nandflash_resource[] = { > + { > + .start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE, > + .end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1, > + .flags = IORESOURCE_MEM, > + }, { > + .start = DAVINCI_ASYNC_EMIF_CONTROL_BASE, > + .end = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1, > + .flags = IORESOURCE_MEM, > + }, > +}; > + > +static struct platform_device davinci_ntosd2_nandflash_device = { > + .name = "davinci_nand", > + .id = 0, > + .dev = { > + .platform_data = &davinci_ntosd2_nandflash_data, > + }, > + .num_resources = ARRAY_SIZE(davinci_ntosd2_nandflash_resource), > + .resource = davinci_ntosd2_nandflash_resource, > +}; > + > +static u64 davinci_fb_dma_mask = DMA_BIT_MASK(32); > + > +static struct platform_device davinci_fb_device = { > + .name = "davincifb", > + .id = -1, > + .dev = { > + .dma_mask = &davinci_fb_dma_mask, > + .coherent_dma_mask = DMA_BIT_MASK(32), > + }, > + .num_resources = 0, > +}; > + > +static struct resource ide_resources[] = { > + { > + .start = DAVINCI_CFC_ATA_BASE, > + .end = DAVINCI_CFC_ATA_BASE + 0x7ff, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = IRQ_IDE, > + .end = IRQ_IDE, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static u64 ide_dma_mask = DMA_BIT_MASK(32); > + > +static struct platform_device ide_dev = { > + .name = "palm_bk3710", > + .id = -1, > + .resource = ide_resources, > + .num_resources = ARRAY_SIZE(ide_resources), > + .dev = { > + .dma_mask = &ide_dma_mask, > + .coherent_dma_mask = DMA_BIT_MASK(32), > + }, > +}; > + > +static struct snd_platform_data dm644x_ntosd2_snd_data; > + > +static struct gpio_led ntosd2_leds[] = { > + { .name = "led1_green", .gpio = GPIO(10), }, > + { .name = "led1_red", .gpio = GPIO(11), }, > + { .name = "led2_green", .gpio = GPIO(12), }, > + { .name = "led2_red", .gpio = GPIO(13), }, > +}; > + > +static struct gpio_led_platform_data ntosd2_leds_data = { > + .num_leds = ARRAY_SIZE(ntosd2_leds), > + .leds = ntosd2_leds, > +}; > + > +static struct platform_device ntosd2_leds_dev = { > + .name = "leds-gpio", > + .id = -1, > + .dev = { > + .platform_data = &ntosd2_leds_data, > + }, > +}; > + > + > +static struct platform_device *davinci_ntosd2_devices[] __initdata = { > + &davinci_fb_device, > + &ntosd2_leds_dev, > +}; > + > +static struct davinci_uart_config uart_config __initdata = { > + .enabled_uarts = (1 << 0), > +}; > + > +static void __init > +davinci_ntosd2_map_io(void) > +{ > + dm644x_init(); > +} > + > +/* > + I2C initilization > +*/ > +static struct davinci_i2c_platform_data ntosd2_i2c_pdata = { > + .bus_freq = 20 /* kHz */, > + .bus_delay = 100 /* usec */, > +}; > + > +static struct i2c_board_info __initdata ntosd2_i2c_info[] = { > +}; > + > +static void __init ntosd2_init_i2c(void) > +{ > + davinci_init_i2c(&ntosd2_i2c_pdata); > + gpio_request(NTOSD2_MSP430_IRQ, ntosd2_i2c_info[0].type); > + gpio_direction_input(NTOSD2_MSP430_IRQ); > + ntosd2_i2c_info[0].irq = gpio_to_irq(NTOSD2_MSP430_IRQ); > + i2c_register_board_info(1, ntosd2_i2c_info, > ARRAY_SIZE(ntosd2_i2c_info)); Many of these functions have return values that should be checked for errors. > +} > + > +static struct davinci_mmc_config davinci_ntosd2_mmc_config = { > + .wires = 4, > + .version = MMC_CTLR_VERSION_1 > +}; > + > + > +#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \ > + defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE) > +#define HAS_ATA 1 > +#else > +#define HAS_ATA 0 > +#endif > + > +#if defined(CONFIG_MTD_NAND_DAVINCI) || \ > + defined(CONFIG_MTD_NAND_DAVINCI_MODULE) > +#define HAS_NAND 1 > +#else > +#define HAS_NAND 0 > +#endif > + > +static __init void davinci_ntosd2_init(void) > +{ > + struct clk *aemif_clk; > + struct davinci_soc_info *soc_info = &davinci_soc_info; > + > + aemif_clk = clk_get(NULL, "aemif"); > + clk_enable(aemif_clk); > + > + if (HAS_ATA) { > + if (HAS_NAND) > + pr_warning("WARNING: both IDE and Flash are " > + "enabled, but they share AEMIF pins.\n" > + "\tDisable IDE for NAND/NOR support.\n"); > + davinci_cfg_reg(DM644X_HPIEN_DISABLE); > + davinci_cfg_reg(DM644X_ATAEN); > + davinci_cfg_reg(DM644X_HDIREN); > + platform_device_register(&ide_dev); > + } else if (HAS_NAND) { > + davinci_cfg_reg(DM644X_HPIEN_DISABLE); > + davinci_cfg_reg(DM644X_ATAEN_DISABLE); > + > + /* only one device will be jumpered and detected */ > + if (HAS_NAND) { > + > platform_device_register(&davinci_ntosd2_nandflash_device); > + } > + } > + > + platform_add_devices(davinci_ntosd2_devices, > + ARRAY_SIZE(davinci_ntosd2_devices)); > + > + /* Initialize I2C interface specific for this board */ > + ntosd2_init_i2c(); > + > + davinci_serial_init(&uart_config); > + dm644x_init_asp(&dm644x_ntosd2_snd_data); > + > + soc_info->emac_pdata->phy_mask = NEUROS_OSD2_PHY_MASK; > + soc_info->emac_pdata->mdio_max_freq = NEUROS_OSD2_MDIO_FREQUENCY; > + > + davinci_setup_usb(1000, 8); > + /* Mux the pins to be GPIOS, VLYNQEN is already done at startup */ > + davinci_cfg_reg(DM644X_AEAW0); > + davinci_cfg_reg(DM644X_AEAW1); > + davinci_cfg_reg(DM644X_AEAW2); > + davinci_cfg_reg(DM644X_AEAW3); > + davinci_cfg_reg(DM644X_AEAW4); > + davinci_cfg_reg(DM644X_PWM0); Please comment this mux setup better. The existing comment is not terribly helpful. I suspect this muxing should be removed until the feature/driver that uses iit is added. Kevin > + davinci_setup_mmc(0, &davinci_ntosd2_mmc_config); > +} > + > +static __init void davinci_ntosd2_irq_init(void) > +{ > + davinci_irq_init(); > +} > + > +MACHINE_START(NEUROS_OSD2, "Neuros OSD2") > + /* Maintainer: Neuros Technologies <[email protected]> */ > + .phys_io = IO_PHYS, > + .io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc, > + .boot_params = (DAVINCI_DDR_BASE + 0x100), > + .map_io = davinci_ntosd2_map_io, > + .init_irq = davinci_ntosd2_irq_init, > + .timer = &davinci_timer, > + .init_machine = davinci_ntosd2_init, > +MACHINE_END > diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c > index 84d3d26..d721440 100644 > --- a/arch/arm/mach-davinci/dm644x.c > +++ b/arch/arm/mach-davinci/dm644x.c > @@ -368,6 +368,11 @@ MUX_CFG(DM644X, ATAEN_DISABLE, 0, 17, 1, 0, > true) > MUX_CFG(DM644X, HPIEN_DISABLE, 0, 29, 1, 0, true) > > MUX_CFG(DM644X, AEAW, 0, 0, 31, 31, true) > +MUX_CFG(DM644X, AEAW0, 0, 0, 1, 0, true) > +MUX_CFG(DM644X, AEAW1, 0, 1, 1, 0, true) > +MUX_CFG(DM644X, AEAW2, 0, 2, 1, 0, true) > +MUX_CFG(DM644X, AEAW3, 0, 3, 1, 0, true) > +MUX_CFG(DM644X, AEAW4, 0, 4, 1, 0, true) > > MUX_CFG(DM644X, MSTK, 1, 9, 1, 0, false) > > @@ -378,7 +383,7 @@ MUX_CFG(DM644X, MCBSP, 1, 10, 1, 1, > false) > MUX_CFG(DM644X, UART1, 1, 1, 1, 1, true) > MUX_CFG(DM644X, UART2, 1, 2, 1, 1, true) > > -MUX_CFG(DM644X, PWM0, 1, 4, 1, 1, false) > +MUX_CFG(DM644X, PWM0, 1, 4, 2, 2, false) > > MUX_CFG(DM644X, PWM1, 1, 5, 1, 1, false) > > diff --git a/arch/arm/mach-davinci/include/mach/mux.h > b/arch/arm/mach-davinci/include/mach/mux.h > index d41ad16..5f74b41 100644 > --- a/arch/arm/mach-davinci/include/mach/mux.h > +++ b/arch/arm/mach-davinci/include/mach/mux.h > @@ -40,6 +40,11 @@ enum davinci_dm644x_index { > > /* AEAW functions */ > DM644X_AEAW, > + DM644X_AEAW0, > + DM644X_AEAW1, > + DM644X_AEAW2, > + DM644X_AEAW3, > + DM644X_AEAW4, > > /* Memory Stick */ > DM644X_MSTK, > @@ -237,8 +242,8 @@ enum davinci_dm365_index { > DM365_EMAC_MDIO, > DM365_EMAC_MDCLK, > > - /* Key Scan */ > - DM365_KEYSCAN, > + /* Keypad */ > + DM365_KEYPAD, > > /* PWM */ > DM365_PWM0, > -- > 1.5.6.5 > > > _______________________________________________ > Davinci-linux-open-source mailing list > [email protected] > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
