1/* 2 * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> 3 * 4 * Initial development of this code was funded by 5 * Phytec Messtechnik GmbH, http://www.phytec.de 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 */ 17 18#include <linux/module.h> 19#include <linux/err.h> 20#include <linux/io.h> 21#include <linux/clk.h> 22#include <mach/audmux.h> 23#include <mach/hardware.h> 24 25static void __iomem *audmux_base; 26 27static unsigned char port_mapping[] = { 28 0x0, 0x4, 0x8, 0x10, 0x14, 0x1c, 29}; 30 31int mxc_audmux_v1_configure_port(unsigned int port, unsigned int pcr) 32{ 33 if (!audmux_base) { 34 printk("%s: not configured\n", __func__); 35 return -ENOSYS; 36 } 37 38 if (port >= ARRAY_SIZE(port_mapping)) 39 return -EINVAL; 40 41 writel(pcr, audmux_base + port_mapping[port]); 42 43 return 0; 44} 45EXPORT_SYMBOL_GPL(mxc_audmux_v1_configure_port); 46 47static int mxc_audmux_v1_init(void) 48{ 49#ifdef CONFIG_MACH_MX21 50 if (cpu_is_mx21()) 51 audmux_base = MX21_IO_ADDRESS(MX21_AUDMUX_BASE_ADDR); 52 else 53#endif 54#ifdef CONFIG_MACH_MX27 55 if (cpu_is_mx27()) 56 audmux_base = MX27_IO_ADDRESS(MX27_AUDMUX_BASE_ADDR); 57 else 58#endif 59 (void)0; 60 61 return 0; 62} 63 64postcore_initcall(mxc_audmux_v1_init); 65