home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / fsl_devices.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  5.4 KB  |  185 lines

  1. /*
  2.  * include/linux/fsl_devices.h
  3.  *
  4.  * Definitions for any platform device related flags or structures for
  5.  * Freescale processor devices
  6.  *
  7.  * Maintainer: Kumar Gala <galak@kernel.crashing.org>
  8.  *
  9.  * Copyright 2004 Freescale Semiconductor, Inc
  10.  *
  11.  * This program is free software; you can redistribute  it and/or modify it
  12.  * under  the terms of  the GNU General  Public License as published by the
  13.  * Free Software Foundation;  either version 2 of the  License, or (at your
  14.  * option) any later version.
  15.  */
  16.  
  17. #ifndef _FSL_DEVICE_H_
  18. #define _FSL_DEVICE_H_
  19.  
  20. #include <linux/types.h>
  21. #include <linux/phy.h>
  22.  
  23. /*
  24.  * Some conventions on how we handle peripherals on Freescale chips
  25.  *
  26.  * unique device: a platform_device entry in fsl_plat_devs[] plus
  27.  * associated device information in its platform_data structure.
  28.  *
  29.  * A chip is described by a set of unique devices.
  30.  *
  31.  * Each sub-arch has its own master list of unique devices and
  32.  * enumerates them by enum fsl_devices in a sub-arch specific header
  33.  *
  34.  * The platform data structure is broken into two parts.  The
  35.  * first is device specific information that help identify any
  36.  * unique features of a peripheral.  The second is any
  37.  * information that may be defined by the board or how the device
  38.  * is connected externally of the chip.
  39.  *
  40.  * naming conventions:
  41.  * - platform data structures: <driver>_platform_data
  42.  * - platform data device flags: FSL_<driver>_DEV_<FLAG>
  43.  * - platform data board flags: FSL_<driver>_BRD_<FLAG>
  44.  *
  45.  */
  46.  
  47. struct gianfar_platform_data {
  48.     /* device specific information */
  49.     u32    device_flags;
  50.     /* board specific information */
  51.     u32    board_flags;
  52.     int    mdio_bus;            /* Bus controlled by us */
  53.     char    bus_id[MII_BUS_ID_SIZE];    /* Bus PHY is on */
  54.     u32    phy_id;
  55.     u8    mac_addr[6];
  56.     phy_interface_t interface;
  57. };
  58.  
  59. struct gianfar_mdio_data {
  60.     /* board specific information */
  61.     int    irq[32];
  62. };
  63.  
  64. /* Flags related to gianfar device features */
  65. #define FSL_GIANFAR_DEV_HAS_GIGABIT        0x00000001
  66. #define FSL_GIANFAR_DEV_HAS_COALESCE        0x00000002
  67. #define FSL_GIANFAR_DEV_HAS_RMON        0x00000004
  68. #define FSL_GIANFAR_DEV_HAS_MULTI_INTR        0x00000008
  69. #define FSL_GIANFAR_DEV_HAS_CSUM        0x00000010
  70. #define FSL_GIANFAR_DEV_HAS_VLAN        0x00000020
  71. #define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH    0x00000040
  72. #define FSL_GIANFAR_DEV_HAS_PADDING        0x00000080
  73. #define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET    0x00000100
  74.  
  75. /* Flags in gianfar_platform_data */
  76. #define FSL_GIANFAR_BRD_HAS_PHY_INTR    0x00000001 /* set or use a timer */
  77. #define FSL_GIANFAR_BRD_IS_REDUCED    0x00000002 /* Set if RGMII, RMII */
  78.  
  79. struct fsl_i2c_platform_data {
  80.     /* device specific information */
  81.     u32    device_flags;
  82. };
  83.  
  84. /* Flags related to I2C device features */
  85. #define FSL_I2C_DEV_SEPARATE_DFSRR    0x00000001
  86. #define FSL_I2C_DEV_CLOCK_5200        0x00000002
  87.  
  88. enum fsl_usb2_operating_modes {
  89.     FSL_USB2_MPH_HOST,
  90.     FSL_USB2_DR_HOST,
  91.     FSL_USB2_DR_DEVICE,
  92.     FSL_USB2_DR_OTG,
  93. };
  94.  
  95. enum fsl_usb2_phy_modes {
  96.     FSL_USB2_PHY_NONE,
  97.     FSL_USB2_PHY_ULPI,
  98.     FSL_USB2_PHY_UTMI,
  99.     FSL_USB2_PHY_UTMI_WIDE,
  100.     FSL_USB2_PHY_SERIAL,
  101. };
  102.  
  103. struct platform_device;
  104. struct fsl_usb2_platform_data {
  105.     /* board specific information */
  106.     enum fsl_usb2_operating_modes    operating_mode;
  107.     enum fsl_usb2_phy_modes        phy_mode;
  108.     unsigned int            port_enables;
  109.  
  110.     char *name;        /* pretty print */
  111.     int (*platform_init) (struct platform_device *);
  112.     void (*platform_uninit) (struct fsl_usb2_platform_data *);
  113.     void __iomem *regs;    /* ioremap'd register base */
  114.     u32 xcvr_type;        /* PORTSC_PTS_* */
  115.     char *transceiver;    /* transceiver name */
  116.     unsigned power_budget;    /* for hcd->power_budget */
  117.     struct platform_device *pdev;
  118.     struct fsl_xcvr_ops *xcvr_ops;
  119.     struct fsl_xcvr_power *xcvr_pwr;
  120.     int (*gpio_usb_active) (void);
  121.     void (*gpio_usb_inactive) (void);
  122.     unsigned            big_endian_mmio : 1;
  123.     unsigned            big_endian_desc : 1;
  124.     unsigned            es : 1;    /* need USBMODE:ES */
  125.     unsigned            have_sysif_regs : 1;
  126.     unsigned            le_setup_buf : 1;
  127.     unsigned change_ahb_burst:1;
  128.     unsigned ahb_burst_mode:3;
  129.     unsigned            suspended : 1;
  130.     unsigned            already_suspended : 1;
  131.  
  132.     /* register save area for suspend/resume */
  133.     u32                pm_command;
  134.     u32                pm_status;
  135.     u32                pm_intr_enable;
  136.     u32                pm_frame_index;
  137.     u32                pm_segment;
  138.     u32                pm_frame_list;
  139.     u32                pm_async_next;
  140.     u32                pm_configured_flag;
  141.     u32                pm_portsc;
  142. };
  143.  
  144. /* Flags in fsl_usb2_mph_platform_data */
  145. #define FSL_USB2_PORT0_ENABLED    0x00000001
  146. #define FSL_USB2_PORT1_ENABLED    0x00000002
  147.  
  148. struct fsl_spi_platform_data {
  149.     u32     initial_spmode;    /* initial SPMODE value */
  150.     u16    bus_num;
  151.     bool    qe_mode;
  152.     /* board specific information */
  153.     u16    max_chipselect;
  154.     void    (*activate_cs)(u8 cs, u8 polarity);
  155.     void    (*deactivate_cs)(u8 cs, u8 polarity);
  156.     u32    sysclk;
  157. };
  158.  
  159. struct fsl_ata_platform_data {
  160.        int     adma_flag;      /* AMDA mode is used or not, 1:used.*/
  161.        int     udma_mask;      /* UDMA modes h/w can handle */
  162.        int     mwdma_mask;      /* MDMA modes h/w can handle */
  163.        int     pio_mask;      /* PIO modes h/w can handle */
  164.        int     fifo_alarm;     /* value for fifo_alarm reg */
  165.        int     max_sg;         /* longest sglist h/w can handle */
  166.        int     (*init)(struct platform_device *pdev);
  167.        void    (*exit)(void);
  168.        char    *io_reg;
  169.        char    *core_reg;
  170. };
  171.  
  172.  
  173. struct mpc8xx_pcmcia_ops {
  174.     void(*hw_ctrl)(int slot, int enable);
  175.     int(*voltage_set)(int slot, int vcc, int vpp);
  176. };
  177.  
  178. /* Returns non-zero if the current suspend operation would
  179.  * lead to a deep sleep (i.e. power removed from the core,
  180.  * instead of just the clock).
  181.  */
  182. int fsl_deep_sleep(void);
  183.  
  184. #endif /* _FSL_DEVICE_H_ */
  185.