xref: /linux-6.15/include/linux/fsl_devices.h (revision 1a4dcb8a)
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