12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * include/linux/fsl_devices.h
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Definitions for any platform device related flags or structures for
61da177e4SLinus Torvalds * Freescale processor devices
71da177e4SLinus Torvalds *
84c8d3d99SKumar Gala * Maintainer: Kumar Gala <[email protected]>
91da177e4SLinus Torvalds *
1058c559e6SRamneek Mehresh * Copyright 2004,2012 Freescale Semiconductor, Inc
111da177e4SLinus Torvalds */
121da177e4SLinus Torvalds
131da177e4SLinus Torvalds #ifndef _FSL_DEVICE_H_
141da177e4SLinus Torvalds #define _FSL_DEVICE_H_
151da177e4SLinus Torvalds
1658c559e6SRamneek Mehresh #define FSL_UTMI_PHY_DLY 10 /*As per P1010RM, delay for UTMI
1758c559e6SRamneek Mehresh PHY CLK to become stable - 10ms*/
185ed33877SShengzhou Liu #define FSL_USB_PHY_CLK_TIMEOUT 10000 /* uSec */
1958c559e6SRamneek Mehresh
201da177e4SLinus Torvalds #include <linux/types.h>
211da177e4SLinus Torvalds
221da177e4SLinus Torvalds /*
231da177e4SLinus Torvalds * Some conventions on how we handle peripherals on Freescale chips
241da177e4SLinus Torvalds *
251da177e4SLinus Torvalds * unique device: a platform_device entry in fsl_plat_devs[] plus
261da177e4SLinus Torvalds * associated device information in its platform_data structure.
271da177e4SLinus Torvalds *
281da177e4SLinus Torvalds * A chip is described by a set of unique devices.
291da177e4SLinus Torvalds *
301da177e4SLinus Torvalds * Each sub-arch has its own master list of unique devices and
311da177e4SLinus Torvalds * enumerates them by enum fsl_devices in a sub-arch specific header
321da177e4SLinus Torvalds *
331da177e4SLinus Torvalds * The platform data structure is broken into two parts. The
341da177e4SLinus Torvalds * first is device specific information that help identify any
351da177e4SLinus Torvalds * unique features of a peripheral. The second is any
361da177e4SLinus Torvalds * information that may be defined by the board or how the device
371da177e4SLinus Torvalds * is connected externally of the chip.
381da177e4SLinus Torvalds *
391da177e4SLinus Torvalds * naming conventions:
401da177e4SLinus Torvalds * - platform data structures: <driver>_platform_data
411da177e4SLinus Torvalds * - platform data device flags: FSL_<driver>_DEV_<FLAG>
421da177e4SLinus Torvalds * - platform data board flags: FSL_<driver>_BRD_<FLAG>
431da177e4SLinus Torvalds *
441da177e4SLinus Torvalds */
451da177e4SLinus Torvalds
4638aa4200SNikhil Badola enum fsl_usb2_controller_ver {
4738aa4200SNikhil Badola FSL_USB_VER_NONE = -1,
4838aa4200SNikhil Badola FSL_USB_VER_OLD = 0,
4938aa4200SNikhil Badola FSL_USB_VER_1_6 = 1,
5038aa4200SNikhil Badola FSL_USB_VER_2_2 = 2,
5138aa4200SNikhil Badola FSL_USB_VER_2_4 = 3,
5238aa4200SNikhil Badola FSL_USB_VER_2_5 = 4,
5338aa4200SNikhil Badola };
5438aa4200SNikhil Badola
5580cb9aeeSRandy Vinson enum fsl_usb2_operating_modes {
5680cb9aeeSRandy Vinson FSL_USB2_MPH_HOST,
5780cb9aeeSRandy Vinson FSL_USB2_DR_HOST,
5880cb9aeeSRandy Vinson FSL_USB2_DR_DEVICE,
5980cb9aeeSRandy Vinson FSL_USB2_DR_OTG,
6080cb9aeeSRandy Vinson };
6180cb9aeeSRandy Vinson
6280cb9aeeSRandy Vinson enum fsl_usb2_phy_modes {
6380cb9aeeSRandy Vinson FSL_USB2_PHY_NONE,
6480cb9aeeSRandy Vinson FSL_USB2_PHY_ULPI,
6580cb9aeeSRandy Vinson FSL_USB2_PHY_UTMI,
6680cb9aeeSRandy Vinson FSL_USB2_PHY_UTMI_WIDE,
6780cb9aeeSRandy Vinson FSL_USB2_PHY_SERIAL,
686009d95eSNikhil Badola FSL_USB2_PHY_UTMI_DUAL,
6980cb9aeeSRandy Vinson };
7080cb9aeeSRandy Vinson
71230f7edeSAnatolij Gustschin struct clk;
72230f7edeSAnatolij Gustschin struct platform_device;
73230f7edeSAnatolij Gustschin
7480cb9aeeSRandy Vinson struct fsl_usb2_platform_data {
7580cb9aeeSRandy Vinson /* board specific information */
7638aa4200SNikhil Badola enum fsl_usb2_controller_ver controller_ver;
7780cb9aeeSRandy Vinson enum fsl_usb2_operating_modes operating_mode;
7880cb9aeeSRandy Vinson enum fsl_usb2_phy_modes phy_mode;
7980cb9aeeSRandy Vinson unsigned int port_enables;
8069cb1ec4SEric Bénard unsigned int workaround;
81230f7edeSAnatolij Gustschin
82230f7edeSAnatolij Gustschin int (*init)(struct platform_device *);
83230f7edeSAnatolij Gustschin void (*exit)(struct platform_device *);
84230f7edeSAnatolij Gustschin void __iomem *regs; /* ioremap'd register base */
85230f7edeSAnatolij Gustschin struct clk *clk;
8683722bc9SAnatolij Gustschin unsigned power_budget; /* hcd->power_budget */
87230f7edeSAnatolij Gustschin unsigned big_endian_mmio:1;
88230f7edeSAnatolij Gustschin unsigned big_endian_desc:1;
89230f7edeSAnatolij Gustschin unsigned es:1; /* need USBMODE:ES */
90230f7edeSAnatolij Gustschin unsigned le_setup_buf:1;
91230f7edeSAnatolij Gustschin unsigned have_sysif_regs:1;
92230f7edeSAnatolij Gustschin unsigned invert_drvvbus:1;
93230f7edeSAnatolij Gustschin unsigned invert_pwr_fault:1;
9413b7ee2aSAnatolij Gustschin
9513b7ee2aSAnatolij Gustschin unsigned suspended:1;
9613b7ee2aSAnatolij Gustschin unsigned already_suspended:1;
97523f1decSNikhil Badola unsigned has_fsl_erratum_a007792:1;
985f620bb6SRan Wang unsigned has_fsl_erratum_14:1;
99f8786a91SNikhil Badola unsigned has_fsl_erratum_a005275:1;
1009d4b8270SChangming Huang unsigned has_fsl_erratum_a005697:1;
101*1a4dcb8aSYinbo Zhu unsigned has_fsl_erratum_a006918:1;
102f4fdfaa2SNikhil Badola unsigned check_phy_clk_valid:1;
10313b7ee2aSAnatolij Gustschin
10413b7ee2aSAnatolij Gustschin /* register save area for suspend/resume */
10513b7ee2aSAnatolij Gustschin u32 pm_command;
10613b7ee2aSAnatolij Gustschin u32 pm_status;
10713b7ee2aSAnatolij Gustschin u32 pm_intr_enable;
10813b7ee2aSAnatolij Gustschin u32 pm_frame_index;
10913b7ee2aSAnatolij Gustschin u32 pm_segment;
11013b7ee2aSAnatolij Gustschin u32 pm_frame_list;
11113b7ee2aSAnatolij Gustschin u32 pm_async_next;
11213b7ee2aSAnatolij Gustschin u32 pm_configured_flag;
11313b7ee2aSAnatolij Gustschin u32 pm_portsc;
11413b7ee2aSAnatolij Gustschin u32 pm_usbgenctrl;
11580cb9aeeSRandy Vinson };
11680cb9aeeSRandy Vinson
11780cb9aeeSRandy Vinson /* Flags in fsl_usb2_mph_platform_data */
11880cb9aeeSRandy Vinson #define FSL_USB2_PORT0_ENABLED 0x00000001
11980cb9aeeSRandy Vinson #define FSL_USB2_PORT1_ENABLED 0x00000002
12080cb9aeeSRandy Vinson
12169cb1ec4SEric Bénard #define FLS_USB2_WORKAROUND_ENGCM09152 (1 << 0)
12269cb1ec4SEric Bénard
123364fdbc0SAnton Vorontsov struct spi_device;
124364fdbc0SAnton Vorontsov
125ccf06998SKumar Gala struct fsl_spi_platform_data {
126ccf06998SKumar Gala u32 initial_spmode; /* initial SPMODE value */
12735b4b3c0SAnton Vorontsov s16 bus_num;
12887ec0e98SAnton Vorontsov unsigned int flags;
1297d6709a2SBenjamin Herrenschmidt #define SPI_QE_CPU_MODE (1 << 0) /* QE CPU ("PIO") mode */
1307d6709a2SBenjamin Herrenschmidt #define SPI_CPM_MODE (1 << 1) /* CPM/QE ("DMA") mode */
1317d6709a2SBenjamin Herrenschmidt #define SPI_CPM1 (1 << 2) /* SPI unit is in CPM1 block */
1327d6709a2SBenjamin Herrenschmidt #define SPI_CPM2 (1 << 3) /* SPI unit is in CPM2 block */
1337d6709a2SBenjamin Herrenschmidt #define SPI_QE (1 << 4) /* SPI unit is in QE block */
134ccf06998SKumar Gala /* board specific information */
135ccf06998SKumar Gala u16 max_chipselect;
136364fdbc0SAnton Vorontsov void (*cs_control)(struct spi_device *spi, bool on);
137ccf06998SKumar Gala u32 sysclk;
138ccf06998SKumar Gala };
139ccf06998SKumar Gala
14080128ff7SVitaly Bordug struct mpc8xx_pcmcia_ops {
14180128ff7SVitaly Bordug void(*hw_ctrl)(int slot, int enable);
14280128ff7SVitaly Bordug int(*voltage_set)(int slot, int vcc, int vpp);
14380128ff7SVitaly Bordug };
14480128ff7SVitaly Bordug
145d49747bdSScott Wood /* Returns non-zero if the current suspend operation would
146d49747bdSScott Wood * lead to a deep sleep (i.e. power removed from the core,
147d49747bdSScott Wood * instead of just the clock).
148d49747bdSScott Wood */
1492e9d546eSAnton Vorontsov #if defined(CONFIG_PPC_83xx) && defined(CONFIG_SUSPEND)
150d49747bdSScott Wood int fsl_deep_sleep(void);
1512e9d546eSAnton Vorontsov #else
fsl_deep_sleep(void)1522e9d546eSAnton Vorontsov static inline int fsl_deep_sleep(void) { return 0; }
1532e9d546eSAnton Vorontsov #endif
154d49747bdSScott Wood
1551da177e4SLinus Torvalds #endif /* _FSL_DEVICE_H_ */
156