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