115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/*
215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * Copyright (C) 2009 Nokia
3112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * Copyright (C) 2009-2010 Texas Instruments
415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren *
515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * This program is free software; you can redistribute it and/or modify
615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * it under the terms of the GNU General Public License version 2 as
715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * published by the Free Software Foundation.
815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
10ddaa912a2164d7ce7a03fcb384ed37e712bb4549Tony Lindgren#include "mux34xx.h"
11ddaa912a2164d7ce7a03fcb384ed37e712bb4549Tony Lindgren
1215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_TERMINATOR	0xffff
1315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
1415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/* 34xx mux mode options for each pin. See TRM for options */
1515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE0      0
1615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE1      1
1715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE2      2
1815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE3      3
1915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE4      4
2015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE5      5
2115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE6      6
2215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_MUX_MODE7      7
2315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
2415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/* 24xx/34xx mux bit defines */
2515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PULL_ENA			(1 << 3)
2615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PULL_UP			(1 << 4)
2715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_ALTELECTRICALSEL		(1 << 5)
2815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
29d623a0e19dcbc4e44a8db047158815d7f8c2b839Tony Lindgren/* omap3/4/5 specific mux bit defines */
3015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_INPUT_EN			(1 << 8)
3115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_OFF_EN			(1 << 9)
3215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_OFFOUT_EN			(1 << 10)
3315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_OFFOUT_VAL			(1 << 11)
3415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_OFF_PULL_EN		(1 << 12)
3515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_OFF_PULL_UP		(1 << 13)
3615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_WAKEUP_EN			(1 << 14)
37a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson#define OMAP_WAKEUP_EVENT		(1 << 15)
38a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson
3915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/* Active pin states */
4015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OUTPUT			0
4115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_INPUT			OMAP_INPUT_EN
4215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_INPUT_PULLUP		(OMAP_PULL_ENA | OMAP_INPUT_EN \
4315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren						| OMAP_PULL_UP)
4415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_INPUT_PULLDOWN		(OMAP_PULL_ENA | OMAP_INPUT_EN)
4515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
4615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/* Off mode states */
4715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_NONE		0
4815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_OUTPUT_HIGH	(OMAP_OFF_EN | OMAP_OFFOUT_EN \
4915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren						| OMAP_OFFOUT_VAL)
5015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_OUTPUT_LOW		(OMAP_OFF_EN | OMAP_OFFOUT_EN)
5115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_INPUT_PULLUP	(OMAP_OFF_EN | OMAP_OFF_PULL_EN \
5215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren						| OMAP_OFF_PULL_UP)
5315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_INPUT_PULLDOWN	(OMAP_OFF_EN | OMAP_OFF_PULL_EN)
5415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PIN_OFF_WAKEUPENABLE	OMAP_WAKEUP_EN
5515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
56421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MODE_GPIO(partition, x)	(((x) & OMAP_MUX_MODE7) == \
57421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi					  partition->gpio)
5891930652a23de0873a157aa1d9962cb878d64451Govindraj.R#define OMAP_MODE_UART(x)	(((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE0)
5915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
60112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson/* Flags for omapX_mux_init */
6115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#define OMAP_PACKAGE_MASK		0xffff
626dd8a6824af530449112a38c0fa0f95c1a086fc5Tony Lindgren#define OMAP_PACKAGE_CBP		6		/* 515-pin 0.40 0.50 */
636dd8a6824af530449112a38c0fa0f95c1a086fc5Tony Lindgren#define OMAP_PACKAGE_CUS		5		/* 423-pin 0.65 */
646dd8a6824af530449112a38c0fa0f95c1a086fc5Tony Lindgren#define OMAP_PACKAGE_CBB		4		/* 515-pin 0.40 0.50 */
656dd8a6824af530449112a38c0fa0f95c1a086fc5Tony Lindgren#define OMAP_PACKAGE_CBC		3		/* 515-pin 0.50 0.65 */
6615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
67112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson#define OMAP_MUX_NR_MODES		8		/* Available modes */
68112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson#define OMAP_MUX_NR_SIDES		2		/* Bottom & top */
69112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson
70112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson/*
71112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * omap_mux_init flags definition:
72112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson *
73421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi * OMAP_GPIO_MUX_MODE, bits 0-2: gpio muxing mode, same like pad control
74421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi *      register which includes values from 0-7.
75112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * OMAP_MUX_REG_8BIT: Ensure that access to padconf is done in 8 bits.
76112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * The default value is 16 bits.
77112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson */
78421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE0		OMAP_MUX_MODE0
79421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE1		OMAP_MUX_MODE1
80421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE2		OMAP_MUX_MODE2
81421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE3		OMAP_MUX_MODE3
82421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE4		OMAP_MUX_MODE4
83421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE5		OMAP_MUX_MODE5
84421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE6		OMAP_MUX_MODE6
85421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_GPIO_IN_MODE7		OMAP_MUX_MODE7
86421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi#define OMAP_MUX_REG_8BIT		(1 << 3)
87112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson
88112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson/**
8940e44399301b6dbd997408a184140b79b77f632dTony Lindgren * struct omap_board_data - board specific device data
9040e44399301b6dbd997408a184140b79b77f632dTony Lindgren * @id: instance id
9140e44399301b6dbd997408a184140b79b77f632dTony Lindgren * @flags: additional flags for platform init code
9240e44399301b6dbd997408a184140b79b77f632dTony Lindgren * @pads: array of device specific pads
9340e44399301b6dbd997408a184140b79b77f632dTony Lindgren * @pads_cnt: ARRAY_SIZE() of pads
9440e44399301b6dbd997408a184140b79b77f632dTony Lindgren */
9540e44399301b6dbd997408a184140b79b77f632dTony Lindgrenstruct omap_board_data {
9640e44399301b6dbd997408a184140b79b77f632dTony Lindgren	int			id;
9740e44399301b6dbd997408a184140b79b77f632dTony Lindgren	u32			flags;
9840e44399301b6dbd997408a184140b79b77f632dTony Lindgren	struct omap_device_pad	*pads;
9940e44399301b6dbd997408a184140b79b77f632dTony Lindgren	int			pads_cnt;
10040e44399301b6dbd997408a184140b79b77f632dTony Lindgren};
10140e44399301b6dbd997408a184140b79b77f632dTony Lindgren
10240e44399301b6dbd997408a184140b79b77f632dTony Lindgren/**
103112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * struct mux_partition - contain partition related information
104112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @name: name of the current partition
105112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @flags: flags specific to this partition
106421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi * @gpio: gpio mux mode
107112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @phys: physical address
108112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @size: partition size
109112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @base: virtual address after ioremap
110112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @muxmodes: list of nodes that belong to a partition
111112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @node: list node for the partitions linked list
112112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson */
113112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonstruct omap_mux_partition {
114112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	const char		*name;
115112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	u32			flags;
116421e84509980206fb3b3bc039bc05bae1dd41c7bOleg Matcovschi	u32			gpio;
117112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	u32			phys;
118112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	u32			size;
119112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	void __iomem		*base;
120112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	struct list_head	muxmodes;
121112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson	struct list_head	node;
122112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson};
12315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
12415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
12515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * struct omap_mux - data for omap mux register offset and it's value
12615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @reg_offset:	mux register offset from the mux base
12715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @gpio:	GPIO number
12815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @muxnames:	available signal modes for a ball
129112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @balls:	available balls on the package
13015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
13115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenstruct omap_mux {
13215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	u16	reg_offset;
13315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	u16	gpio;
13415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#ifdef CONFIG_OMAP_MUX
13515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	char	*muxnames[OMAP_MUX_NR_MODES];
13615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#ifdef CONFIG_DEBUG_FS
13715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	char	*balls[OMAP_MUX_NR_SIDES];
13815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#endif
13915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#endif
14015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren};
14115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
14215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
14315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * struct omap_ball - data for balls on omap package
14415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @reg_offset:	mux register offset from the mux base
14515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @balls:	available balls on the package
14615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
14715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenstruct omap_ball {
14815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	u16	reg_offset;
14915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	char	*balls[OMAP_MUX_NR_SIDES];
15015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren};
15115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
15215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
15315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * struct omap_board_mux - data for initializing mux registers
15415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @reg_offset:	mux register offset from the mux base
15515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @mux_value:	desired mux value to set
15615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
15715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenstruct omap_board_mux {
15815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	u16	reg_offset;
15915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	u16	value;
16015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren};
16115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
1629796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren#define OMAP_DEVICE_PAD_REMUX		BIT(1)	/* Dynamically remux a pad,
1639796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren						   needs enable, idle and off
1649796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren						   values */
1659796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren#define OMAP_DEVICE_PAD_WAKEUP		BIT(0)	/* Pad is wake-up capable */
1669796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren
1679796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren/**
1689796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * struct omap_device_pad - device specific pad configuration
1699796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @name:		signal name
1709796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @flags:		pad specific runtime flags
1719796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @enable:		runtime value for a pad
1729796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @idle:		idle value for a pad
1739796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @off:		off value for a pad, defaults to safe mode
1749796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @partition:		mux partition
1759796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @mux:		mux register
1769796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren */
1779796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgrenstruct omap_device_pad {
1789796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	char				*name;
1799796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	u8				flags;
1809796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	u16				enable;
1819796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	u16				idle;
1829796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	u16				off;
1839796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	struct omap_mux_partition	*partition;
1849796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	struct omap_mux			*mux;
1859796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren};
1869796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren
1878d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgrenstruct omap_hwmod_mux_info;
1888d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren
1898aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren#define OMAP_MUX_STATIC(signal, mode)					\
1908aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren{									\
1918aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren	.name	= (signal),						\
1928aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren	.enable	= (mode),						\
1938aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren}
1948aee6039465c9887af6a4babfa5b52f8bc96b43dTony Lindgren
195ac3dbeefb8e9108874ab12ba103603893985f4ecTony Lindgren#if defined(CONFIG_OMAP_MUX)
19615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
19715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
19815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap_mux_init_gpio - initialize a signal based on the GPIO number
19915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @gpio:		GPIO number
20015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @val:		Options for the mux register value
20115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
20215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenint omap_mux_init_gpio(int gpio, int val);
20315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
20415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
20515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap_mux_init_signal - initialize a signal based on the signal name
20615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @muxname:		Mux name in mode0_name.signal_name format
20715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @val:		Options for the mux register value
20815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
2095a3b2f7a5a79082dd3a5f2294cbd85fc3b173d98Tony Lindgrenint omap_mux_init_signal(const char *muxname, int val);
21015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
2119796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren/**
2129796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * omap_hwmod_mux_init - initialize hwmod specific mux data
2139796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @bpads:		Board specific device signal names
2149796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren * @nr_pads:		Number of signal names for the device
2159796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren */
2169796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgrenextern struct omap_hwmod_mux_info *
2179796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgrenomap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);
2189796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren
2198d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren/**
2208d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren * omap_hwmod_mux - omap hwmod specific pin muxing
2218d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren * @hmux:		Pads for a hwmod
2228d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren * @state:		Desired _HWMOD_STATE
2238d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren *
2248d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren * Called only from omap_hwmod.c, do not use.
2258d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren */
2268d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgrenvoid omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
2278d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren
22891930652a23de0873a157aa1d9962cb878d64451Govindraj.Rint omap_mux_get_by_name(const char *muxname,
22991930652a23de0873a157aa1d9962cb878d64451Govindraj.R		struct omap_mux_partition **found_partition,
23091930652a23de0873a157aa1d9962cb878d64451Govindraj.R		struct omap_mux **found_mux);
23115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#else
23215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
23391930652a23de0873a157aa1d9962cb878d64451Govindraj.Rstatic inline int omap_mux_get_by_name(const char *muxname,
23491930652a23de0873a157aa1d9962cb878d64451Govindraj.R		struct omap_mux_partition **found_partition,
23591930652a23de0873a157aa1d9962cb878d64451Govindraj.R		struct omap_mux **found_mux)
23691930652a23de0873a157aa1d9962cb878d64451Govindraj.R{
23791930652a23de0873a157aa1d9962cb878d64451Govindraj.R	return 0;
23891930652a23de0873a157aa1d9962cb878d64451Govindraj.R}
23991930652a23de0873a157aa1d9962cb878d64451Govindraj.R
24015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenstatic inline int omap_mux_init_gpio(int gpio, int val)
24115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren{
24215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	return 0;
24315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren}
24415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenstatic inline int omap_mux_init_signal(char *muxname, int val)
24515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren{
24615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren	return 0;
24715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren}
24815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
2499796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgrenstatic inline struct omap_hwmod_mux_info *
2509796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgrenomap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
2519796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren{
2529796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren	return NULL;
2539796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren}
2549796b323b5a1940f9ec62c3a6cf7e442bf540d53Tony Lindgren
2558d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgrenstatic inline void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
2568d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren{
2578d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren}
2588d9af88f55be89fa4c897ded3204ef12c947731eTony Lindgren
259cc4915d8a0bbe6825eb9fc2c687a0151441af7dbTony Lindgrenstatic struct omap_board_mux *board_mux __maybe_unused;
2607203f8a48bb63015ebe58a6f2a38aec1cb208b9dAaro Koskinen
26115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren#endif
26215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
26315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
26415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap_mux_get_gpio() - get mux register value based on GPIO number
26515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @gpio:		GPIO number
26615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren *
26715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
26815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenu16 omap_mux_get_gpio(int gpio);
26915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
27015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
27115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap_mux_set_gpio() - set mux register value based on GPIO number
27215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @val:		New mux register value
27315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @gpio:		GPIO number
27415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren *
27515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
27615ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenvoid omap_mux_set_gpio(u16 val, int gpio);
27715ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
27815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
279112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * omap_mux_get() - get a mux partition by name
280112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @name:		Name of the mux partition
281112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson *
282112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson */
283112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonstruct omap_mux_partition *omap_mux_get(const char *name);
284112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson
285112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson/**
286d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * omap_mux_read() - read mux register
287112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @partition:		Mux partition
288d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * @mux_offset:		Offset of the mux register
289d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren *
290d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren */
291112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonu16 omap_mux_read(struct omap_mux_partition *p, u16 mux_offset);
292d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren
293d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren/**
294d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * omap_mux_write() - write mux register
295112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @partition:		Mux partition
296d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * @val:		New mux register value
297d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * @mux_offset:		Offset of the mux register
298d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren *
299d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * This should be only needed for dynamic remuxing of non-gpio signals.
300d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren */
301112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonvoid omap_mux_write(struct omap_mux_partition *p, u16 val, u16 mux_offset);
302d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren
303d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren/**
304d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * omap_mux_write_array() - write an array of mux registers
305112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson * @partition:		Mux partition
306d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * @board_mux:		Array of mux registers terminated by MAP_MUX_TERMINATOR
307d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren *
308d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren * This should be only needed for dynamic remuxing of non-gpio signals.
309d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren */
310112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonvoid omap_mux_write_array(struct omap_mux_partition *p,
311112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson			  struct omap_board_mux *board_mux);
312d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren
313d4bb72e50a0c4b6790dec127a38fd06d06e561ccTony Lindgren/**
314fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren * omap2420_mux_init() - initialize mux system with board specific set
315fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren * @board_mux:		Board specific mux table
316fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren * @flags:		OMAP package type used for the board
317fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren */
318fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgrenint omap2420_mux_init(struct omap_board_mux *board_mux, int flags);
319fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren
320fc44046167f08f3887e9685efc95f817a5ff45a1Tony Lindgren/**
32189ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren * omap2430_mux_init() - initialize mux system with board specific set
32289ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren * @board_mux:		Board specific mux table
32389ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren * @flags:		OMAP package type used for the board
32489ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren */
32589ba1092296bc455bfd59db608ae1954861f5911Tony Lindgrenint omap2430_mux_init(struct omap_board_mux *board_mux, int flags);
32689ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren
32789ba1092296bc455bfd59db608ae1954861f5911Tony Lindgren/**
32815ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap3_mux_init() - initialize mux system with board specific set
32915ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @board_mux:		Board specific mux table
33015ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * @flags:		OMAP package type used for the board
33115ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
33215ac7afe515631ec36966b1cf632a87276536f57Tony Lindgrenint omap3_mux_init(struct omap_board_mux *board_mux, int flags);
33315ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren
33415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren/**
335a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson * omap4_mux_init() - initialize mux system with board specific set
33621a42c92750446008dc0847a78aba5459e3b6b5aColin Cross * @board_subset:	Board specific mux table
33721a42c92750446008dc0847a78aba5459e3b6b5aColin Cross * @board_wkup_subset:	Board specific mux table for wakeup instance
338a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson * @flags:		OMAP package type used for the board
339a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson */
34021a42c92750446008dc0847a78aba5459e3b6b5aColin Crossint omap4_mux_init(struct omap_board_mux *board_subset,
34121a42c92750446008dc0847a78aba5459e3b6b5aColin Cross	struct omap_board_mux *board_wkup_subset, int flags);
342a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson
343a041a52c4d2b82e25de2267bce5f4dc3d2179b2aBenoit Cousson/**
34415ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren * omap_mux_init - private mux init function, do not call
34515ac7afe515631ec36966b1cf632a87276536f57Tony Lindgren */
346112485e9c543b17fc08daea56c7a558b415d06afBenoit Coussonint omap_mux_init(const char *name, u32 flags,
347112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson		  u32 mux_pbase, u32 mux_size,
348112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson		  struct omap_mux *superset,
349112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson		  struct omap_mux *package_subset,
350112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson		  struct omap_board_mux *board_mux,
351112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson		  struct omap_ball *package_balls);
352112485e9c543b17fc08daea56c7a558b415d06afBenoit Cousson
353