Project

General

Profile

Problems with custom board ยป baseboard-sys9000.c

Baseboard file for custom hw - Mary Frantz, 08/01/2013 11:58 AM

 
/*
* Critical Link MityOMAP-L138 SoM Baseboard initializtaion file
*
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/spi/spi.h>
#include <linux/spi/flash.h>
#include <linux/delay.h>
#include <linux/mtd/mtd.h>
#include <linux/usb/musb.h>
#include <linux/mtd/partitions.h>


#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/setup.h>
#include <mach/mux.h>
#include <mach/da8xx.h>
#include <linux/can/platform/mcp251x.h>

#define BASEBOARD_NAME "System9000"

#define SPI1_FLASH_CS_N GPIO_TO_PIN(2, 15) // System configuration flash (optional)

/*
* GPIO pins
*/

static short sys9000_gpio_pins[] __initdata = {
DA850_GPIO0_1, // SYNC_PLL_CLK2_LOS
DA850_GPIO0_3, // SYNC_PLL_LOL
DA850_GPIO0_5, // SYNC_PLL_CLK1_LOS
DA850_GPIO0_7, // SYNC_MASTER_EN
DA850_GPIO0_8, // SOM_GP0_8
DA850_GPIO0_9, // TEST_LED_0
DA850_GPIO0_10, // SYS_GOOD_LED_YEL
DA850_GPIO0_11, // SYS_GOOD_LED_GRN
DA850_GPIO0_12, // SYNC_LED_YEL
DA850_GPIO0_13, // SYNC_LED_GRN
DA850_GPIO0_14, // REC_LED_RED
DA850_GPIO0_15, // REC_LED_GRN

DA850_GPIO1_4, // TEST_POINT_1
DA850_GPIO1_5, // TEST_POINT_0
DA850_GPIO4_0, // VCAL_EN
DA850_GPIO4_1, // VCAL_EN_n
DA850_GPIO4_2, // ECAL_EN_n
DA850_GPIO4_3, // ECAL_EN_n
DA850_GPIO4_4, // VCAL_ZERO
DA850_GPIO4_5, // VCAL_OUT_EN
DA850_GPIO4_6, // VCAL_SPARE
DA850_GPIO4_7, // SSD_DET_N

DA850_GPIO5_14, // TEST_LED_1

DA850_GPIO6_0, // SOM_GP6_0
DA850_GPIO6_1, // SOM_GP6_1
DA850_GPIO6_2, // SOM_GP6_2
DA850_GPIO6_3, // SOM_GP6_3
DA850_GPIO6_4, // SOM_GP6_4
DA850_GPIO6_6, // SOM_GP6_6
DA850_GPIO6_7, // SOM_GP6_7
DA850_GPIO6_8, // SOM_GP6_8
DA850_GPIO6_9, // SOM_GP6_9
DA850_GPIO6_10, // SOM_GP6_10
DA850_GPIO6_11, // SOM_GP6_11

DA850_GPIO7_0, // LDAC0_n
DA850_GPIO7_1, // LDAC1_n
DA850_GPIO7_2, // LDAC2_n
DA850_GPIO7_3, // LDAC3_n
DA850_GPIO7_4, // LDAC4_n
DA850_GPIO7_5, // LDAC5_n
DA850_GPIO7_6, // LDAC6_n

DA850_GPIO7_8, // CARD_DET3
DA850_GPIO7_9, // CARD_DET2
DA850_GPIO7_10, // CARD_DET1
DA850_GPIO7_11, // CARD_DET0

DA850_GPIO7_12, // DIO_0_OUT
DA850_GPIO7_13, // DIO_0_IN
DA850_GPIO7_14, // DIO_1_OUT
DA850_GPIO7_15, // DIO_1_IN

DA850_GPIO8_8, // SYS_RST_N
DA850_GPIO8_10, // Factory Reset In
DA850_GPIO8_12, // HW_REV_0
DA850_GPIO8_13, // HW_REV_1
DA850_GPIO8_14, // HW_REV_2
DA850_GPIO8_15, // HW_REV_3
-1,
};


/*
* SPI Devices:
* SPI1_CS1: Flash M25PE80
*/
static struct mtd_partition sys9000_spi_flash_partitions[] = {
[0] = {
.name = "sys9000_cfg",
.offset = 0,
.size = SZ_512K,
.mask_flags = MTD_WRITEABLE,
},
[1] = {
.name = "sys9000_cal",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
.mask_flags = MTD_WRITEABLE,
},
};

// Copied from board-mityomapl138.c in this directory
static struct flash_platform_data sys9000_spi_flash_data = {
.name = "M25PE80",
.parts = sys9000_spi_flash_partitions,
.nr_parts = ARRAY_SIZE(sys9000_spi_flash_partitions),
.type = "m25p64-nonjedec",
};

static struct davinci_spi_config spi_M25PE80_config = {
.io_type = SPI_IO_TYPE_DMA,
.c2tdelay = 8,
.t2cdelay = 8,
};

static struct spi_board_info sys9000_spi1_info[] = {
[0] = {
.modalias = "M25PE80",
.platform_data = &sys9000_spi_flash_data,
.controller_data = &spi_M25PE80_config,
.mode = SPI_MODE_0,
.max_speed_hz = 30000000,
.bus_num = 1,
.chip_select = 1,
},
};

// TODO: does spi1_cs[] need to have 2 elements?
static u8 spi1_cs[] = {
SPI_INTERN_CS,
SPI1_FLASH_CS_N,
};

static void __init baseboard_setup_spi(void)
{
int ret;

ret = gpio_request(SPI1_FLASH_CS_N, "Sys9000 SPI FLASH CS\n");
if (ret)
pr_warning("%s: can not open Sys9000 SPI CS %d\n", __func__, SPI1_FLASH_CS_N);

ret = spi_register_board_info(sys9000_spi1_info,
ARRAY_SIZE(sys9000_spi1_info));
if (ret)
pr_warning("%s: Unable to register SPI1 Info: %d\n", __func__,
ret);
}

static int __init baseboard_pre_init(void)
{
pr_info("%s: Entered\n", __func__);
da8xx_spi_pdata[1].chip_sel = spi1_cs;
da8xx_spi_pdata[1].num_chipselect = ARRAY_SIZE(spi1_cs);
davinci_soc_info.emac_pdata->phy_id = "0:03";
return 0;
}
postcore_initcall_sync(baseboard_pre_init);

static int __init baseboard_init(void)
{
pr_info("%s [%s]...\n", __func__, BASEBOARD_NAME);

davinci_cfg_reg_list(sys9000_gpio_pins);

baseboard_setup_spi();

return 0;
}
arch_initcall_sync(baseboard_init);

    (1-1/1)