1 /* 2 * linux/arch/arm/mach-pxa/pxa2xx.c 3 * 4 * code specific to pxa2xx 5 * 6 * Copyright (C) 2008 Dmitry Baryshkov 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12 13 #include <linux/module.h> 14 #include <linux/kernel.h> 15 #include <linux/device.h> 16 17 #include <mach/hardware.h> 18 #include <mach/pxa2xx-regs.h> 19 #include <mach/mfp-pxa25x.h> 20 #include <mach/reset.h> 21 #include <mach/irda.h> 22 23 void pxa2xx_clear_reset_status(unsigned int mask) 24 { 25 /* RESET_STATUS_* has a 1:1 mapping with RCSR */ 26 RCSR = mask; 27 } 28 29 static unsigned long pxa2xx_mfp_fir[] = { 30 GPIO46_FICP_RXD, 31 GPIO47_FICP_TXD, 32 }; 33 34 static unsigned long pxa2xx_mfp_sir[] = { 35 GPIO46_STUART_RXD, 36 GPIO47_STUART_TXD, 37 }; 38 39 static unsigned long pxa2xx_mfp_off[] = { 40 GPIO46_GPIO | MFP_LPM_DRIVE_LOW, 41 GPIO47_GPIO | MFP_LPM_DRIVE_LOW, 42 }; 43 44 void pxa2xx_transceiver_mode(struct device *dev, int mode) 45 { 46 if (mode & IR_OFF) { 47 pxa2xx_mfp_config(pxa2xx_mfp_off, ARRAY_SIZE(pxa2xx_mfp_off)); 48 } else if (mode & IR_SIRMODE) { 49 pxa2xx_mfp_config(pxa2xx_mfp_sir, ARRAY_SIZE(pxa2xx_mfp_sir)); 50 } else if (mode & IR_FIRMODE) { 51 pxa2xx_mfp_config(pxa2xx_mfp_fir, ARRAY_SIZE(pxa2xx_mfp_fir)); 52 } else 53 BUG(); 54 } 55 EXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode); 56