1918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov/* 2918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * linux/arch/arm/mach-pxa/pxa2xx.c 3918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * 4918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * code specific to pxa2xx 5918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * 6918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * Copyright (C) 2008 Dmitry Baryshkov 7918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * 8918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * This program is free software; you can redistribute it and/or modify 9918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * it under the terms of the GNU General Public License version 2 as 10918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov * published by the Free Software Foundation. 11918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov */ 12918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 13918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov#include <linux/module.h> 14918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov#include <linux/kernel.h> 15918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov#include <linux/device.h> 1623019a733bb83c8499f192fb428b7e6e81c95a34Rob Herring#include <linux/io.h> 17918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 18afd2fc02ab7bae6062671c5ca80dd34c34a63fb7Russell King#include <mach/hardware.h> 19afd2fc02ab7bae6062671c5ca80dd34c34a63fb7Russell King#include <mach/pxa2xx-regs.h> 20a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/mfp-pxa25x.h> 21afd2fc02ab7bae6062671c5ca80dd34c34a63fb7Russell King#include <mach/reset.h> 22293b2da1b61136813fc2764f43304c66ff8040e9Arnd Bergmann#include <linux/platform_data/irda-pxaficp.h> 23918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 2404fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miaovoid pxa2xx_clear_reset_status(unsigned int mask) 2504fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miao{ 2604fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miao /* RESET_STATUS_* has a 1:1 mapping with RCSR */ 2704fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miao RCSR = mask; 2804fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miao} 2904fef228fb00dd79475a2313f4ba73b4fbfe2faaEric Miao 30918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikovstatic unsigned long pxa2xx_mfp_fir[] = { 31918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO46_FICP_RXD, 32918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO47_FICP_TXD, 33918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov}; 34918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 35918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikovstatic unsigned long pxa2xx_mfp_sir[] = { 36918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO46_STUART_RXD, 37918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO47_STUART_TXD, 38918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov}; 39918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 40918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikovstatic unsigned long pxa2xx_mfp_off[] = { 41918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO46_GPIO | MFP_LPM_DRIVE_LOW, 42918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov GPIO47_GPIO | MFP_LPM_DRIVE_LOW, 43918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov}; 44918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov 45918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikovvoid pxa2xx_transceiver_mode(struct device *dev, int mode) 46918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov{ 47918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov if (mode & IR_OFF) { 48918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov pxa2xx_mfp_config(pxa2xx_mfp_off, ARRAY_SIZE(pxa2xx_mfp_off)); 49918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov } else if (mode & IR_SIRMODE) { 50918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov pxa2xx_mfp_config(pxa2xx_mfp_sir, ARRAY_SIZE(pxa2xx_mfp_sir)); 51918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov } else if (mode & IR_FIRMODE) { 52918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov pxa2xx_mfp_config(pxa2xx_mfp_fir, ARRAY_SIZE(pxa2xx_mfp_fir)); 53918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov } else 54918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov BUG(); 55918dbcba4ee3f0ad7d617b3969d5016481b9ceffDmitry Eremin-Solenikov} 56c4bd01727380ce666aba987b3d7c0e838cb99bbeMarek VasutEXPORT_SYMBOL_GPL(pxa2xx_transceiver_mode); 57