From: <mar...@us...> - 2007-02-09 23:33:56
|
Revision: 801 http://svn.sourceforge.net/hackndev/?rev=801&view=rev Author: marex_z71 Date: 2007-02-09 15:33:53 -0800 (Fri, 09 Feb 2007) Log Message: ----------- l4p: PalmLD IrDA support - seems to work quite well Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h Modified: linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig 2007-02-09 19:52:41 UTC (rev 800) +++ linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig 2007-02-09 23:33:53 UTC (rev 801) @@ -389,7 +389,7 @@ # # FIR device drivers # -# CONFIG_PXA_FICP is not set +CONFIG_PXA_FICP=m CONFIG_BT=m CONFIG_BT_L2CAP=m CONFIG_BT_SCO=m Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-02-09 19:52:41 UTC (rev 800) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-02-09 23:33:53 UTC (rev 801) @@ -13,6 +13,7 @@ #include <linux/platform_device.h> #include <linux/fb.h> #include <linux/input.h> +#include <linux/delay.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> @@ -23,6 +24,7 @@ #include <asm/arch/mmc.h> #include <asm/arch/pxafb.h> #include <asm/arch/pxa-regs.h> +#include <asm/arch/irda.h> #include <asm/arch/palmld-gpio.h> #include <asm/arch/pxa27x_keyboard.h> #include <asm/arch/pxapwm-bl.h> @@ -118,81 +120,39 @@ * IRDA */ -/* Uncomment the following line to get serial console via SIR work from - * the very early booting stage. This is not useful for end-user. - */ -// #define EARLY_SIR_CONSOLE - -#define IR_TRANSCEIVER_ON \ - SET_HX4700_GPIO_N(IR_ON, 1) - -#define IR_TRANSCEIVER_OFF \ - SET_HX4700_GPIO_N(IR_ON, 0) - - -static void -palmld_irda_configure (struct uart_pxa_port *up, int enable) +static void palmld_irda_transceiver_mode(struct device *dev, int mode) { - /* Switch STUART RX/TX pins to SIR */ - pxa_gpio_mode( GPIO_NR_PALMLD_STD_RXD_MD ); - pxa_gpio_mode( GPIO_NR_PALMLD_STD_TXD_MD ); + unsigned long flags; - /* make sure FIR ICP is off */ - ICCR0 = 0; + local_irq_save(flags); - if (enable) { - /* configure STUART to for SIR */ - STISR = STISR_XMODE | STISR_RCVEIR | STISR_RXPL; - //IR_TRANSCEIVER_ON; - } else { - STISR = 0; - //IR_TRANSCEIVER_OFF; - } -} + if (mode & IR_SIRMODE){ + printk (KERN_INFO "palmld_irda: setting mode to SIR\n"); + } + else if (mode & IR_FIRMODE){ + printk (KERN_INFO "palmld_irda: setting mode to FIR\n"); + } + if (mode & IR_OFF){ + printk (KERN_INFO "palmld_irda: turning tranceiver OFF\n"); + SET_PALMLD_GPIO(IR_DISABLE, 1); + } + else { + printk (KERN_INFO "palmld_irda: turning tranceiver ON\n"); + SET_PALMLD_GPIO(IR_DISABLE, 0); + SET_PALMLD_GPIO(ICP_TXD_MD, 1); + mdelay(30); + SET_PALMLD_GPIO(ICP_TXD_MD, 0); + } -static void -palmld_irda_set_txrx (struct uart_pxa_port *up, int txrx) -{ - unsigned old_stisr = STISR; - unsigned new_stisr = old_stisr; - - if (txrx & PXA_SERIAL_TX) { - /* Ignore RX if TX is set */ - txrx &= PXA_SERIAL_TX; - new_stisr |= STISR_XMITIR; - } else - new_stisr &= ~STISR_XMITIR; - - if (txrx & PXA_SERIAL_RX) - new_stisr |= STISR_RCVEIR; - else - new_stisr &= ~STISR_RCVEIR; - - if (new_stisr != old_stisr) { - while (!(STLSR & LSR_TEMT)) - ; - //IR_TRANSCEIVER_OFF; - STISR = new_stisr; - //IR_TRANSCEIVER_ON; - } + local_irq_restore(flags); } -static int -palmld_irda_get_txrx (struct uart_pxa_port *up) -{ - return ((STISR & STISR_XMITIR) ? PXA_SERIAL_TX : 0) | - ((STISR & STISR_RCVEIR) ? PXA_SERIAL_RX : 0); -} - - -static struct platform_pxa_serial_funcs palmld_pxa_irda_funcs = { - .configure = palmld_irda_configure, - .set_txrx = palmld_irda_set_txrx, - .get_txrx = palmld_irda_get_txrx, +static struct pxaficp_platform_data palmld_ficp_platform_data = { + .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, + .transceiver_mode = palmld_irda_transceiver_mode, }; - /* platform */ /* @@ -369,12 +329,7 @@ set_pxa_fb_info( &palmld_lcd ); pxa_set_mci_info( &palmld_mci_platform_data ); platform_add_devices( devices, ARRAY_SIZE(devices) ); - - stuart_device.dev.platform_data = &palmld_pxa_irda_funcs; -#ifdef EARLY_SIR_CONSOLE - palmld_irda_configure (NULL, 1); - palmld_irda_set_txrx (NULL, PXA_SERIAL_TX); -#endif + pxa_set_ficp_info( &palmld_ficp_platform_data ); } MACHINE_START(XSCALE_PALMLD, "Palm LifeDrive") Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-02-09 19:52:41 UTC (rev 800) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-02-09 23:33:53 UTC (rev 801) @@ -21,6 +21,7 @@ /* Palm LifeDrive GPIOs */ +#define GPIO_NR_PALMLD_GPIO_RESET 1 #define GPIO_NR_PALMLD_USB_DETECT 3 #define GPIO_NR_PALMLD_POWER_DETECT 4 #define GPIO_NR_PALMLD_HOTSYNC_BUTTON_N 10 @@ -31,8 +32,9 @@ #define GPIO_NR_PALMLD_WM9712_IRQ 27 -#define GPIO_NR_PALMLD_STD_RXD 46 /* IRDA */ -#define GPIO_NR_PALMLD_STD_TXD 47 +#define GPIO_NR_PALMLD_IR_DISABLE 40 /* IRDA */ +#define GPIO_NR_PALMLD_ICP_RXD 46 +#define GPIO_NR_PALMLD_ICP_TXD 47 #define GPIO_NR_PALMLD_GREEN_LED 52 @@ -52,18 +54,19 @@ #define GPIO_NR_PALMLD_IDE_PWEN 115 -#define GPIO_NR_PALMLD_STD_RXD_MD (GPIO_NR_PALMLD_STD_RXD | GPIO_ALT_FN_2_IN) -#define GPIO_NR_PALMLD_STD_TXD_MD (GPIO_NR_PALMLD_STD_TXD | GPIO_ALT_FN_1_OUT) - #define GPIO_NR_PALMLD_KP_MKIN3_MD (GPIO_NR_PALMLD_KP_MKIN3 | GPIO_ALT_FN_3_IN) #define GPIO_NR_PALMLD_KP_MKIN0_MD (GPIO_NR_PALMLD_KP_MKIN0 | GPIO_ALT_FN_1_IN) #define GPIO_NR_PALMLD_KP_MKIN1_MD (GPIO_NR_PALMLD_KP_MKIN1 | GPIO_ALT_FN_1_IN) #define GPIO_NR_PALMLD_KP_MKIN2_MD (GPIO_NR_PALMLD_KP_MKIN2 | GPIO_ALT_FN_1_IN) -#define GPIO_NR_PALMLD_KP_MKOUT0_MD (GPIO_NR_PALMLD_KP_MKOUT0 | GPIO_ALT_FN_2_OUT) -#define GPIO_NR_PALMLD_KP_MKOUT1_MD (GPIO_NR_PALMLD_KP_MKOUT1 | GPIO_ALT_FN_2_OUT) -#define GPIO_NR_PALMLD_KP_MKOUT2_MD (GPIO_NR_PALMLD_KP_MKOUT2 | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMLD_KP_MKOUT0_MD (GPIO_NR_PALMLD_KP_MKOUT0 | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMLD_KP_MKOUT1_MD (GPIO_NR_PALMLD_KP_MKOUT1 | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMLD_KP_MKOUT2_MD (GPIO_NR_PALMLD_KP_MKOUT2 | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMLD_ICP_RXD_MD (GPIO_NR_PALMLD_ICP_RXD | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMLD_ICP_TXD_MD (GPIO_NR_PALMLD_ICP_TXD | GPIO_ALT_FN_2_OUT) + +#define IRQ_GPIO_PALMLD_GPIO_RESET IRQ_GPIO(GPIO_NR_PALMLD_GPIO_RESET) #define IRQ_GPIO_PALMLD_SD_DETECT_N IRQ_GPIO(GPIO_NR_PALMLD_SD_DETECT_N) #define IRQ_GPIO_PALMLD_WM9712_IRQ IRQ_GPIO(GPIO_NR_PALMLD_WM9712_IRQ) #define IRQ_GPIO_PALMLD_IDE_IRQ IRQ_GPIO(GPIO_NR_PALMLD_IDE_IRQ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |