Example #1
0
rtems_status_code mpc55xx_sd_card_init( bool mount)
{
    rtems_status_code sc = RTEMS_SUCCESSFUL;
    int rv = 0;
    sd_card_driver_entry *e = &sd_card_driver_table [0];

    RTEMS_DEBUG_PRINT( "Task started\n");

    sc = mpc55xx_dspi_init();
    RTEMS_CHECK_SC( rv, "Intitalize DSPI bus");

    e->bus = mpc55xx_dspi_bus_table [0].bus_number;

    sc = sd_card_register();
    RTEMS_CHECK_SC( sc, "Register SD Card");

    if (mount) {
        sc = rtems_bdpart_register_from_disk( MPC55XX_DEVICE_FILE);
        RTEMS_CHECK_SC( sc, "Initialize IDE partition table");

        rv = rtems_fsmount( mpc55xx_fs_table, sizeof( mpc55xx_fs_table) / sizeof( mpc55xx_fs_table [0]), NULL);
        RTEMS_CHECK_RV_SC( rv, "Mount file systems");
    }

    return RTEMS_SUCCESSFUL;
}
Example #2
0
/*=========================================================================*\
| Function:                                                                 |
\*-------------------------------------------------------------------------*/
rtems_status_code bsp_register_spi
(
    /*-------------------------------------------------------------------------*\
    | Purpose:                                                                  |
    |   register SPI bus and devices                                            |
    +---------------------------------------------------------------------------+
    | Input Parameters:                                                         |
    \*-------------------------------------------------------------------------*/
    void                                    /* <none>                         */
)
/*-------------------------------------------------------------------------*\
| Return Value:                                                             |
|    0 or error code                                                        |
\*=========================================================================*/
{
    rtems_status_code sc = RTEMS_SUCCESSFUL;
    int ret_code;
    unsigned spi_busno;

    /*
     * init I2C library (if not already done)
     */
    rtems_libi2c_initialize ();

    /*
     * init port pins used to address/select SPI devices
     */

#if defined( MPC83XX_BOARD_MPC8313ERDB)

    /*
     * Configured as master (direct connection to SD card)
     *
     * GPIO[28] : SOUT
     * GPIO[29] : SIN
     * GPIO[30] : SCLK
     * GPIO[02] : SCS (inactive high), GPIO[02] is normally connected to U43 at
     * pin 15 of MC74LCX244DT.
     */

    /* Function */
    mpc83xx.syscon.sicrl = (mpc83xx.syscon.sicrl & ~0x03fc0000) | 0x30000000;

    /* Direction */
    mpc83xx.gpio [0].gpdir = (mpc83xx.gpio [0].gpdir & ~0x0000000f) | 0x2000000b;

    /* Data */
    mpc83xx.gpio [0].gpdat |= 0x20000000;

    /* Open Drain */
    /* mpc83xx.gpio [0].gpdr  |= 0x0000000f; */

#elif defined( MPC83XX_BOARD_MPC8349EAMDS)

    /*
     * GPIO1[0] is nSEL_SPI for M25P40
     * set it to be output, high
     */
    mpc83xx.gpio[0].gpdat |=  (1 << (31- 0));
    mpc83xx.gpio[0].gpdir |=  (1 << (31- 0));
    mpc83xx.gpio[0].gpdr  &= ~(1 << (31- 0));

#elif defined( MPC83XX_BOARD_HSC_CM01)

    /*
     * GPIO1[24] is SPI_A0
     * GPIO1[25] is SPI_A1
     * GPIO1[26] is SPI_A2
     * GPIO1[27] is high-active strobe
     * set pins to be output, low
     */
    mpc83xx.gpio[0].gpdat &= ~(0xf << (31-27));
    mpc83xx.gpio[0].gpdir |=  (0xf << (31-27));
    mpc83xx.gpio[0].gpdr  &= ~(0xf << (31-27));

#endif

    /*
     * update base frequency in spi descriptor
     */
    bsp_spi_bus_desc.softc.base_frq = BSP_bus_frequency;

    /*
     * register SPI bus
     */
    ret_code = rtems_libi2c_register_bus("/dev/spi",
                                         &(bsp_spi_bus_desc.bus_desc));
    if (ret_code < 0) {
        return -ret_code;
    }
    spi_busno = (unsigned) ret_code;

#if defined( MPC83XX_BOARD_MPC8313ERDB)

    /* Register SD Card driver */
    sd_card_driver_table [0].bus = spi_busno;
    sc = sd_card_register();
    if (sc != RTEMS_SUCCESSFUL) {
        return sc;
    }

#elif defined( MPC83XX_BOARD_MPC8349EAMDS)

    /*
     * register M25P40 Flash
     */
    ret_code = rtems_libi2c_register_drv(RTEMS_BSP_SPI_FLASH_DEVICE_NAME,
                                         spi_flash_m25p40_rw_driver_descriptor,
                                         spi_busno,0x00);
#elif defined(MPC83XX_BOARD_HSC_CM01)

    /*
     * register FM25L256 FRAM
     */
    ret_code = rtems_libi2c_register_drv(RTEMS_BSP_SPI_FRAM_DEVICE_NAME,
                                         spi_fram_fm25l256_rw_driver_descriptor,
                                         spi_busno,0x02);

#endif

    if (ret_code < 0) {
        return -ret_code;
    }

    /*
     * FIXME: further drivers, when available
     */
    return 0;
}