|
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.
|