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 23void pxa2xx_clear_reset_status(unsigned int mask) 24{ 25 /* RESET_STATUS_* has a 1:1 mapping with RCSR */ 26 RCSR = mask; 27} 28 29static unsigned long pxa2xx_mfp_fir[] = { 30 GPIO46_FICP_RXD, 31 GPIO47_FICP_TXD, 32}; 33 34static unsigned long pxa2xx_mfp_sir[] = { 35 GPIO46_STUART_RXD, 36 GPIO47_STUART_TXD, 37}; 38 39static unsigned long pxa2xx_mfp_off[] = { 40 GPIO46_GPIO | MFP_LPM_DRIVE_LOW, 41 GPIO47_GPIO | MFP_LPM_DRIVE_LOW, 42}; 43 44void 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} 55EXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode); 56