From: <cri...@us...> - 2006-12-03 13:46:45
|
Revision: 692 http://svn.sourceforge.net/hackndev/?rev=692&view=rev Author: cristianop Date: 2006-12-03 05:46:39 -0800 (Sun, 03 Dec 2006) Log Message: ----------- palmtx: added irda support; some cleanup ... Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_lcd.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-gpio.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/Makefile =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/Makefile 2006-12-02 19:44:15 UTC (rev 691) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/Makefile 2006-12-03 13:46:39 UTC (rev 692) @@ -5,4 +5,5 @@ obj-$(CONFIG_MACH_XSCALE_PALMTX) += palmtx.o obj-$(CONFIG_PALMTX_AC97) += palmld_ac97.o obj-$(CONFIG_PALMTX_LCD) += palmtx_lcd.o +obj-$(CONFIG_PM) += palmtx_pm.o #obj-$(CONFIG_PALMTX_PCMCIA) += palmtx_pcmcia.o Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c 2006-12-02 19:44:15 UTC (rev 691) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c 2006-12-03 13:46:39 UTC (rev 692) @@ -36,6 +36,7 @@ #include <asm/arch/pxa-dmabounce.h> #include <asm/arch/pxa-regs.h> #include <asm/arch/udc.h> +#include <asm/arch/irda.h> #include <asm/arch/pxa27x_keyboard.h> #include <asm/arch/pxapwm-bl.h> @@ -187,86 +188,58 @@ .name = "palmtx-lcd", }; -/** - * 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) +// IRDA -static void palmtx_irda_configure (struct uart_pxa_port *up, int enable) +static void palmtx_irda_transceiver_mode(struct device *dev, int mode) { - /* Switch STUART RX/TX pins to SIR */ - pxa_gpio_mode( GPIO_NR_PALMTX_ICP_RXD_MD ); - pxa_gpio_mode( GPIO_NR_PALMTX_ICP_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 "palmtx_irda: setting mode to SIR\n"); + } + else if (mode & IR_FIRMODE){ + printk (KERN_INFO "palmtx_irda: setting mode to FIR\n"); + } + if (mode & IR_OFF){ + printk (KERN_INFO "palmtx_irda: turning tranceiver OFF\n"); + SET_GPIO(GPIO_NR_PALMTX_IR_DISABLE, 1); + } + else { + printk (KERN_INFO "palmtx_irda: turning tranceiver ON\n"); + SET_GPIO(GPIO_NR_PALMTX_IR_DISABLE, 0); + SET_GPIO(GPIO_NR_PALMTX_ICP_TXD_MD, 1); + mdelay(30); + SET_GPIO(GPIO_NR_PALMTX_ICP_TXD_MD, 0); + } - -static void palmtx_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 palmtx_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 pxaficp_platform_data palmtx_ficp_platform_data = { + .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, + .transceiver_mode = palmtx_irda_transceiver_mode, +}; -} -static struct platform_pxa_serial_funcs palmtx_pxa_irda_funcs = { - .configure = palmtx_irda_configure, - .set_txrx = palmtx_irda_set_txrx, - .get_txrx = palmtx_irda_get_txrx, -}; + // UDC (USB gadget controller) static int palmtx_udc_is_connected (void){ int ret = !(GET_GPIO(GPIO_NR_PALMTX_USB_DETECT)); - printk (KERN_INFO "palmtx_udc: gpio status is %d\n",ret); + if (ret) + printk (KERN_INFO "palmtx_udc: device detected [USB_DETECT: %d]\n",ret); + else + printk (KERN_INFO "palmtx_udc: no device detected [USB_DETECT: %d]\n",ret); + return ret; } @@ -371,63 +344,41 @@ }; -// grabbed Alex' initialization code: thx! static void __init palmtx_map_io(void) { pxa_map_io(); iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc)); - - /* wake up on */ - - PWER |= PWER_GPIO0 | PWER_RTC | PWER_GPIO12; - PFER |= PWER_GPIO0 | PWER_RTC; - PRER |= PWER_GPIO12; - - /* USB, in theory this can even wake us from deep sleep */ - PWER |= PWER_GPIO3; - PFER |= PWER_GPIO3; - PRER |= PWER_GPIO3; - - PGSR2 |= (1<<30); - PGSR3 |= (1<<7) | (1<<8) | (1<<9); - - PKWR |= GPIO_bit(0) | GPIO_bit(12) | GPIO_bit(3) | (1<<17); - PKSR = 0xffffffff; // clear - - /* Clear reset status */ - RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR; } + static void __init palmtx_init(void) { - - // disable interrupt to prevent WM9712 constantly interrupting the CPU + // disable primary codec interrupt to prevent WM9712 constantly interrupting the CPU // and preventing the boot process to complete (Thanx Alex & Shadowmite!) GCR &= ~GCR_PRIRDY_IEN; - // set AC97's GPIOs + // configure AC97's GPIOs pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD); pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); pxa_gpio_mode(GPIO31_SYNC_AC97_MD); - set_pxa_fb_info(&palmtx_fb); - pxa_set_mci_info( &palmtx_mci_platform_data ); - pxa_set_udc_info(&palmtx_udc_mach_info); - - platform_add_devices( devices, ARRAY_SIZE(devices) ); + set_pxa_fb_info ( &palmtx_fb ); + pxa_set_mci_info ( &palmtx_mci_platform_data ); + pxa_set_udc_info ( &palmtx_udc_mach_info ); + pxa_set_ficp_info ( &palmtx_ficp_platform_data ); - stuart_device.dev.platform_data = &palmtx_pxa_irda_funcs; + platform_add_devices( devices, ARRAY_SIZE(devices) ); + + //stuart_device.dev.platform_data = &palmtx_pxa_irda_funcs; } MACHINE_START(XSCALE_PALMTX, "Palm TX") - //.phys_ram = PALMTX_PHYS_RAM_START, .phys_io = PALMTX_PHYS_IO_START, - //.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, .io_pg_offst = io_p2v(0x40000000), .boot_params = 0xa0000100, .map_io = palmtx_map_io, Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_lcd.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_lcd.c 2006-12-02 19:44:15 UTC (rev 691) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_lcd.c 2006-12-03 13:46:39 UTC (rev 692) @@ -100,24 +100,13 @@ static int palmtx_lcd_suspend(struct device *dev, pm_message_t state) { - struct pm_save_data *save; - - if (!dev->power.saved_state) - dev->power.saved_state = kmalloc(sizeof(struct pm_save_data), GFP_KERNEL); - if (!dev->power.saved_state) - return -ENOMEM; - save = dev->power.saved_state; + palmtx_lcd_set_power(pxafb_lcd_device, FB_BLANK_UNBLANK); return 0; } static int palmtx_lcd_resume(struct device *dev) { - if (dev->power.saved_state) { - struct pm_save_data *save = dev->power.saved_state; - kfree(dev->power.saved_state); - dev->power.saved_state = NULL; - } - + palmtx_lcd_set_power(pxafb_lcd_device, FB_BLANK_POWERDOWN); return 0; } #endif Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-gpio.h 2006-12-02 19:44:15 UTC (rev 691) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-gpio.h 2006-12-03 13:46:39 UTC (rev 692) @@ -28,6 +28,7 @@ #define _INCLUDE_PALMTX_GPIO_H_ /* GPIOs */ +#define GPIO_NR_PALMTX_GPIO_RESET 1 #define GPIO_NR_PALMTX_POWER_DETECT 90 #define GPIO_NR_PALMTX_HOTSYNC_BUTTON_N 10 @@ -56,6 +57,7 @@ #define GPIO_NR_PALMTX_ICP_RXD 46 // Infrared receive pin #define GPIO_NR_PALMTX_ICP_TXD 47 // Infrared transmit pin +#define GPIO_NR_PALMTX_IR_DISABLE 40 // connected to SD pin of tranceiver (TFBS4710?) ? #define GPIO_NR_PALMTX_ICP_RXD_MD (GPIO_NR_PALMTX_ICP_RXD | GPIO_ALT_FN_1_IN) #define GPIO_NR_PALMTX_ICP_TXD_MD (GPIO_NR_PALMTX_ICP_TXD | GPIO_ALT_FN_2_OUT) @@ -75,4 +77,6 @@ #define IRQ_GPIO_PALMTX_USB_DETECT IRQ_GPIO(GPIO_NR_PALMTX_USB_DETECT) +#define IRQ_GPIO_PALMTX_GPIO_RESET IRQ_GPIO(GPIO_NR_PALMTX_GPIO_RESET) + #endif Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h 2006-12-02 19:44:15 UTC (rev 691) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h 2006-12-03 13:46:39 UTC (rev 692) @@ -46,6 +46,11 @@ #define PALMTX_KM_COLS 3 +// TOUCHSCREEN + +#define AC97_LINK_FRAME 21 + + // BATTERY #define PALMTX_BAT_MAX_VOLTAGE 4000 // 3.99v current voltage at max charge as from Filez This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |