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#include <linux/io.h> 17 18#include <mach/hardware.h> 19#include <mach/pxa2xx-regs.h> 20#include <mach/mfp-pxa25x.h> 21#include <mach/reset.h> 22#include <linux/platform_data/irda-pxaficp.h> 23 24void pxa2xx_clear_reset_status(unsigned int mask) 25{ 26 /* RESET_STATUS_* has a 1:1 mapping with RCSR */ 27 RCSR = mask; 28} 29 30static unsigned long pxa2xx_mfp_fir[] = { 31 GPIO46_FICP_RXD, 32 GPIO47_FICP_TXD, 33}; 34 35static unsigned long pxa2xx_mfp_sir[] = { 36 GPIO46_STUART_RXD, 37 GPIO47_STUART_TXD, 38}; 39 40static unsigned long pxa2xx_mfp_off[] = { 41 GPIO46_GPIO | MFP_LPM_DRIVE_LOW, 42 GPIO47_GPIO | MFP_LPM_DRIVE_LOW, 43}; 44 45void pxa2xx_transceiver_mode(struct device *dev, int mode) 46{ 47 if (mode & IR_OFF) { 48 pxa2xx_mfp_config(pxa2xx_mfp_off, ARRAY_SIZE(pxa2xx_mfp_off)); 49 } else if (mode & IR_SIRMODE) { 50 pxa2xx_mfp_config(pxa2xx_mfp_sir, ARRAY_SIZE(pxa2xx_mfp_sir)); 51 } else if (mode & IR_FIRMODE) { 52 pxa2xx_mfp_config(pxa2xx_mfp_fir, ARRAY_SIZE(pxa2xx_mfp_fir)); 53 } else 54 BUG(); 55} 56EXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode); 57