From: <mar...@us...> - 2007-03-19 20:32:34
|
Revision: 924 http://svn.sourceforge.net/hackndev/?rev=924&view=rev Author: marex_z71 Date: 2007-03-19 13:19:05 -0700 (Mon, 19 Mar 2007) Log Message: ----------- PalmLD: Battery driver and TESTING new powermanagement !!! USE AT YOUR 0WN RISK, IT CAN HANG YOUR DEVICE !!! Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Kconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h Added Paths: ----------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h Removed Paths: ------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ac97.c Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Kconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Kconfig 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Kconfig 2007-03-19 20:19:05 UTC (rev 924) @@ -21,3 +21,20 @@ config PALMLD_IDE tristate "Palm LifeDrive IDE driver" depends on MACH_XSCALE_PALMLD + +config PALMLD_BATTERY + tristate "Palm LifeDrive Battery support" + select TOUCHSCREEN_WM97XX + depends on MACH_XSCALE_PALMLD + default m + help + Enable support for PalmOne LifeDrive battery to APM. + ATM use it only as module, otherwise it hangs. + +config PALMLD_PM + tristate "Palm LifeDrive Power Management support" + depends on MACH_XSCALE_PALMLD + default y if MACH_XSCALE_PALMLD + help + Enable support for suspend/resume the PalmOne LifeDrive PDA. + \ No newline at end of file Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Makefile =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Makefile 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/Makefile 2007-03-19 20:19:05 UTC (rev 924) @@ -6,5 +6,6 @@ obj-$(CONFIG_PALMLD_PCMCIA) += palmld_pcmcia.o obj-$(CONFIG_PALMLD_USB) += palmld_usb.o obj-$(CONFIG_PALMLD_IDE) += palmld_ide.o -obj-$(CONFIG_PM) += palmld_pm.o +obj-$(CONFIG_PALMLD_PM) += palmld_pm.o +obj-$(CONFIG_PALMLD_BATTERY) += palmld_battery.o Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-03-19 20:19:05 UTC (rev 924) @@ -234,6 +234,18 @@ }; +/******************** + * Power Management * + ********************/ + +struct platform_device palmld_pm = { + .name = "palmld-pm", + .id = -1, + .dev = { + .platform_data = NULL, + }, +}; + /********************************************************* * IDE *********************************************************/ @@ -246,7 +258,7 @@ static struct platform_device *devices[] __initdata = { &palmld_kbd, &palmld_ac97, &palmld_ide, &palmld_backlight, - &palmldled_device, + &palmldled_device, &palmld_pm, }; /********************************************************* @@ -325,13 +337,6 @@ static void __init palmld_init(void) { - - -#ifdef CONFIG_PM - extern struct pxa_ll_pm_ops palmld_ll_pm_ops; - pxa_pm_set_ll_ops(&palmld_ll_pm_ops); -#endif - set_pxa_fb_info( &palmld_lcd_screen ); pxa_set_mci_info( &palmld_mci_platform_data ); platform_add_devices( devices, ARRAY_SIZE(devices) ); Deleted: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ac97.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ac97.c 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ac97.c 2007-03-19 20:19:05 UTC (rev 924) @@ -1,544 +0,0 @@ -/* - * linux/arch/arm/mach-pxa/palmld/palmld-ts.c - * - * Touchscreen/battery driver for Palm LifeDrive's WM9712 AC97 codec. - * - * Author: Alex Osborne <bob...@gm...> - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/input.h> -#include <linux/device.h> -#include <linux/workqueue.h> -#include <linux/battery.h> - -#include <asm/delay.h> -#include <asm/arch/hardware.h> -#include <asm/arch/pxa-regs.h> -#include <asm/arch/irqs.h> -#include <asm/arch/palmld-gpio.h> -#include <asm/arch/palmld-ac97.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/map.h> - -#include <sound/driver.h> -#include <sound/core.h> -#include <sound/pcm.h> -#include <sound/initval.h> -#include <sound/ac97_codec.h> - - -#define palmld_ac97_WORK_QUEUE_NAME "palmld_ac97.c" - -#define GET_GPIO(gpio) \ - (GPLR(gpio) & GPIO_bit(gpio)) - -#define X_AXIS_MAX 3630 -#define X_AXIS_MIN 200 -#define Y_AXIS_MAX 3880 -#define Y_AXIS_MIN 160 -#define PRESSURE_MIN 0 -#define PRESSURE_MAX 300 - -#define GPIO_DEBUG - -static spinlock_t palmld_ac97_lock = SPIN_LOCK_UNLOCKED; - -static struct workqueue_struct *palmld_ac97_workqueue; -static struct work_struct palmld_ac97_irq_task; -struct input_dev *palmld_ac97_input; -struct device *palmld_ac97_dev; - -static u64 battery_update_jiffies_64 = 0; -static int battery_voltage; - -DECLARE_MUTEX(battery_update_mutex); - -/* - * ac97 codec - */ - -void wm97xx_gpio_func(ac97_t *ac97, int gpio, int func) -{ - int GEn; - GEn = ac97->bus->ops->read(ac97, 0x56); - if(func) - GEn |= gpio; - else - GEn &= ~gpio; - ac97->bus->ops->write(ac97, 0x56, GEn); -} - -void wm97xx_gpio_mode(ac97_t *ac97, int gpio, int config, int polarity, - int sticky, int wakeup) -{ - int GCn, GPn, GSn, GWn; - GCn = ac97->bus->ops->read(ac97, 0x4c); - GPn = ac97->bus->ops->read(ac97, 0x4e); - GSn = ac97->bus->ops->read(ac97, 0x50); - GWn = ac97->bus->ops->read(ac97, 0x52); - - if(config) - GCn |= gpio; - else - GCn &= ~gpio; - - if(polarity) - GPn |= gpio; - else - GPn &= ~gpio; - - if(sticky) - GSn |= gpio; - else - GSn &= ~gpio; - - if(wakeup) - GWn |= gpio; - else - GWn &= ~gpio; - - ac97->bus->ops->write(ac97, 0x4c, GCn); - ac97->bus->ops->write(ac97, 0x4e, GPn); - ac97->bus->ops->write(ac97, 0x50, GSn); - ac97->bus->ops->write(ac97, 0x52, GWn); -} - -void wm97xx_set_digitiser_power(struct device *dev, int value) -{ - ac97_t *ac97 = dev->platform_data; - u16 d2; - - d2 = ac97->bus->ops->read(ac97, AC97_WM97XX_DIGITISER2); - d2 |= value; - ac97->bus->ops->write(ac97, AC97_WM97XX_DIGITISER2, d2); -} - -/* - * This is a hack that waits until the ac97 bus is free. I was unable to find - * a more appropriate way of doing this, but it seems to work. If we don't use - * this, then the driver will eventually conflict with another driver's use - * of AC97 (probably audio) and will lockup. - */ -void wait_for_ac97(void) -{ - int timeout=1000; - - while (CAR & CAR_CAIP) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(HZ/100); - set_current_state(TASK_RUNNING); - if(!timeout--) { - printk("palmld_ac97_pendown: CAR_CAIP timeout\n"); - return; - } - } - CAR &= ~CAR_CAIP; - -} - -static int palmld_ac97_take_reading(struct device *dev, int adcsel) -{ - ac97_t *ac97 = dev->platform_data; - int timeout=100; - u16 r76, r7a; - - r76 = ac97->bus->ops->read(ac97, 0x76); - r76 &= ~WM97XX_ADCSEL_MASK; /* clear ADCSEL */ - r76 |= adcsel; /* set ADCSEL */ - r76 &= ~(1<<11); /* COO = 0 (single measurement) */ - r76 &= ~(1<<10); /* CTC = 0 (polling mode) */ - r76 |= (1<<15); /* start reading */ - ac97->bus->ops->write(ac97, 0x76, r76); - - do { - if(!(timeout--)) { - printk("palmld_ac97_pendown: timed out waiting for poll to complete.\n"); - return 0; - } - //udelay(1); - r76 = ac97->bus->ops->read(ac97, 0x76); - } while(!(r76 & (1<<15))); - printk("Poll complete loops=%d\n", 100-timeout); - - r7a = ac97->bus->ops->read(ac97, 0x7a); - return r7a; -} - - - -/* - * battery - */ - -void update_data(int force) -{ - u16 reading; - - if(!force && (battery_update_jiffies_64 + HZ > jiffies_64)) { - return; - } - - if(down_trylock(&battery_update_mutex)) { - return; - } - - - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - - #ifdef GPIO_DEBUG - ac97_t *ac97 = palmld_ac97_dev->platform_data; - - // invert and univert the gpio a few times while watching - // the PXA's gpios to see if we can spot a connection ;) - printk("%x %x %x\n", GPLR0, GPLR1, GPLR2); - - reading = ac97->bus->ops->read(ac97, 0x58); - ac97->bus->ops->write(ac97, 0x58, reading | 1); - udelay(10); - printk("%x %x %x %x\n", GPLR0, GPLR1, GPLR2, GPLR3); - - reading = ac97->bus->ops->read(ac97, 0x58); - ac97->bus->ops->write(ac97, 0x58, reading & (~1)); - udelay(10); - printk("%x %x %x %x\n", GPLR0, GPLR1, GPLR2, GPLR3); - - - #else - wm97xx_set_digitiser_power(palmld_ac97_dev, WM97XX_PRP_DET_DIG); - reading = palmld_ac97_take_reading(palmld_ac97_dev, WM97XX_ADCSEL_BMON); - wm97xx_set_digitiser_power(palmld_ac97_dev, WM97XX_PRP_DET); - - #endif - - spin_unlock(&palmld_ac97_lock); - battery_voltage = reading & 0xfff; - printk("Battery: %d\n", battery_voltage); - - battery_update_jiffies_64 = jiffies_64; - up(&battery_update_mutex); -} - -int get_min_voltage(struct battery *b) -{ - return 0; -} -int get_min_charge(struct battery *b) -{ - return 0; -} -int get_max_voltage(struct battery *b) -{ - return 4750; /* mV */ -} -int get_max_charge(struct battery *b) -{ - return 1; -} -int get_voltage(struct battery *b) -{ - update_data(0); - return battery_voltage; -} -int get_charge(struct battery *b) -{ - return 0; -} -int get_status(struct battery *b) -{ - return 0; //power_status == POWER_NONE? 0: 1; -} - -static struct battery palmld_battery = { - .name = "palmld-ac97", - .id = "battery0", - .get_min_voltage = get_min_voltage, - .get_min_current = NULL, - .get_min_charge = get_min_charge, - .get_max_voltage = get_max_voltage, - .get_max_current = NULL, - .get_max_charge = get_max_charge, - .get_temp = NULL, - .get_voltage = get_voltage, - .get_current = NULL, - .get_charge = get_charge, - .get_status = get_status, -}; - -static void -battery_class_release(struct class_device *dev) -{ -} - -static void -battery_class_class_release(struct class *class) -{ -} - - -/* - * touchscreen - */ - -static void palmld_ac97_pendown(struct device *dev) -{ - ac97_t *ac97 = dev->platform_data; - int xread, yread, pressure; - int pendown=0, valid_coords=0; - - - - /* - * shut off the pen detect interrupt until pen goes up, otherwise the WM9712 - * will keep on interrupting us and we'll never be able to get any work - * done. - */ - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - wm97xx_gpio_mode(ac97, WM97XX_GPIO_13, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE); - spin_unlock(&palmld_ac97_lock); - - - /* take readings until the pen goes up */ - do { - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - - /* power up digitiser */ - wm97xx_set_digitiser_power(dev, WM97XX_PRP_DET_DIG); - - /* take readings */ - xread = palmld_ac97_take_reading(dev, WM97XX_ADCSEL_X); - yread = palmld_ac97_take_reading(dev, WM97XX_ADCSEL_Y); - pressure = palmld_ac97_take_reading(dev, WM97XX_ADCSEL_PRES); - - /* power down digitiser to conserve power */ - wm97xx_set_digitiser_power(dev, WM97XX_PRP_DET); - - printk("(%d,%d) = %d\n", xread&0xfff, yread&0xfff, pressure&0xfff); - - pendown = pressure & (1<<15); - valid_coords = (xread & 0xfff) && (yread & 0xfff) && (pressure & 0xfff); - - /* - * with light pressure reading is exteremely inaccurate so only report - * it when there is heavy pressure - */ - if( (!pendown) || (pressure & 0xfff) < 100 ) { - - /* valid coordinates? */ - if(valid_coords) { - input_report_abs(palmld_ac97_input, ABS_X, xread & 0xfff); - input_report_abs(palmld_ac97_input, ABS_Y, yread & 0xfff); - input_report_abs(palmld_ac97_input, ABS_PRESSURE, pressure & 0xfff); - } - - if(valid_coords || !pendown) { - input_report_key(palmld_ac97_input, BTN_TOUCH, pendown); - } - input_sync(palmld_ac97_input); - } - - spin_unlock(&palmld_ac97_lock); - - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(HZ/100); - set_current_state(TASK_RUNNING); - } while(pressure & (1<<15)); - - /* re-enable pen detect interrupt */ - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - wm97xx_gpio_mode(ac97, WM97XX_GPIO_13, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_STICKY, WM97XX_GPIO_WAKE); - spin_unlock(&palmld_ac97_lock); - - printk("exit\n"); -} - -static void palmld_ac97_irq_work(void *data) -{ - int change = 0; - struct device *dev = data; - ac97_t *ac97 = dev->platform_data; - u16 levels; - - - //while(GET_GPIO(27)) { /* while interrupt still there */ - - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - levels = ac97->bus->ops->read(ac97, 0x54); - spin_unlock(&palmld_ac97_lock); - - printk("int %x\n", levels); - - - if(levels & WM97XX_GPIO_13) { - printk("Pen down detected %x\n", levels); - levels &= ~WM97XX_GPIO_13; - //wm9712_initiate_measurement(ac97); - palmld_ac97_pendown(dev); - change++; - } - - spin_lock(&palmld_ac97_lock); - wait_for_ac97(); - ac97->bus->ops->write(ac97, 0x54, levels); - spin_unlock(&palmld_ac97_lock); - //} - - -} - -static irqreturn_t palmld_ac97_irq_handler(int irq, void *dev_id, struct pt_regs *regs) -{ - /* - * we can't use ac97 from within the interrupt handler, so schedule a task - * to do the actual handling. - */ - queue_work(palmld_ac97_workqueue, &palmld_ac97_irq_task); - - return IRQ_HANDLED; -} - -static int __init palmld_ac97_probe(struct device *dev) -{ - int err; - ac97_t *ac97 = dev->platform_data; - u16 d2; - - if(!machine_is_xscale_palmld()) - return -ENODEV; - printk("palmld_ac97_probe\n"); - - /* for use by bettery level monitor */ - palmld_ac97_dev = dev; - - /* setup work queue */ - palmld_ac97_workqueue = create_workqueue(palmld_ac97_WORK_QUEUE_NAME); - INIT_WORK(&palmld_ac97_irq_task, palmld_ac97_irq_work, dev); - - - set_irq_type(IRQ_GPIO_PALMLD_WM9712_IRQ, IRQT_RISING); - err = request_irq(IRQ_GPIO_PALMLD_WM9712_IRQ, palmld_ac97_irq_handler, - SA_INTERRUPT, "WM9712 IRQ", dev); - - if(err) { - printk(KERN_ERR "palmld_ac97_probe: cannot request pen down IRQ\n"); - return -1; - } - - spin_lock(&palmld_ac97_lock); - - printk("x\n"); - - /* reset levels */ - ac97->bus->ops->write(ac97, 0x54, 0); - printk("y\n"); - - /* disable digitiser to save power, enable pen-down detect */ - d2 = ac97->bus->ops->read(ac97, AC97_WM97XX_DIGITISER2); - d2 |= WM97XX_PRP_DET; - ac97->bus->ops->write(ac97, AC97_WM97XX_DIGITISER2, d2); - - - /* enable interrupts on codec's gpio 2 (connected to cpu gpio 27) */ - wm97xx_gpio_mode(ac97, WM97XX_GPIO_2, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE); - wm97xx_gpio_func(ac97, WM97XX_GPIO_2, 0); - - /* enable pen detect interrupt */ - wm97xx_gpio_mode(ac97, WM97XX_GPIO_13, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_STICKY, WM97XX_GPIO_WAKE); - - /* enable ada detect interrupt */ - /* - wm97xx_gpio_mode(ac97, WM97XX_GPIO_12, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE); - */ - - /* turn off irq gpio inverting */ - ac97->bus->ops->write(ac97, 0x58, ac97->bus->ops->read(ac97, 0x58)&~1); - - - /* turn on the digitiser and pen down detector */ - d2 = ac97->bus->ops->read(ac97, AC97_WM97XX_DIGITISER2); - d2 |= WM97XX_PRP_DETW; - ac97->bus->ops->write(ac97, AC97_WM97XX_DIGITISER2, d2); - printk("probe\n"); - - spin_unlock(&palmld_ac97_lock); - - /* setup the input device */ - palmld_ac97_input = input_allocate_device(); - palmld_ac97_input->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); - palmld_ac97_input->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); - input_set_abs_params(palmld_ac97_input, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0); - input_set_abs_params(palmld_ac97_input, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0); - input_set_abs_params(palmld_ac97_input, ABS_PRESSURE, PRESSURE_MIN, PRESSURE_MAX, 0, 0); - - palmld_ac97_input->name = "Palm LifeDrive touchscreen"; - palmld_ac97_input->dev = dev; - palmld_ac97_input->id.bustype = BUS_HOST; - input_register_device(palmld_ac97_input); - - /* register battery */ - if(battery_class_register(&palmld_battery)) { - printk(KERN_ERR "palmld_ac97_probe: Could not register battery " - "class\n"); - } else { - palmld_battery.class_dev.class->release = battery_class_release; - palmld_battery.class_dev.class->class_release = battery_class_class_release; - } - - return 0; -} - -static int __exit palmld_ac97_remove (struct device *dev) -{ - ac97_t *ac97 = dev->platform_data; - printk("x: %x\n", ac97->bus->ops->read(ac97, AC97_WM97XX_DIGITISER2)); - input_unregister_device(palmld_ac97_input); - free_irq(IRQ_GPIO_PALMLD_WM9712_IRQ, dev); - return 0; -} - -static struct device_driver palmld_ac97_driver = { - .name = "WM9711,WM9712", - .bus = &ac97_bus_type, - .probe = palmld_ac97_probe, - .remove = palmld_ac97_remove, -#ifdef CONFIG_PM - .suspend = NULL, - .resume = NULL, -#endif -}; - -static int __init palmld_ac97_init(void) -{ - if(!machine_is_xscale_palmld()) - return -ENODEV; - - - return driver_register(&palmld_ac97_driver); -} - -static void __exit palmld_ac97_exit(void) -{ - driver_unregister(&palmld_ac97_driver); -} - -module_init(palmld_ac97_init); -module_exit(palmld_ac97_exit); - -MODULE_AUTHOR ("Alex Osborne <bob...@gm...>"); -MODULE_DESCRIPTION ("WM9712 AC97 codec support for Palm LifeDrive"); -MODULE_LICENSE ("GPL"); Added: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c (rev 0) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c 2007-03-19 20:19:05 UTC (rev 924) @@ -0,0 +1,236 @@ +/************************************************************************ + * linux/arch/arm/mach-pxa/palmld/palmld_battery.c * + * * + * Touchscreen/battery driver for WM9712 AC97 codec * + * Authros: Jan Herman <2h...@se...> * + * Sergey Lapin <sl...@ha...> * + * Changes for PalmLD: Marek Vasut <mar...@gm...> * + * * + ************************************************************************/ + + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/moduleparam.h> +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/input.h> +#include <linux/device.h> +#include <linux/workqueue.h> +#include <linux/battery.h> + +#include <asm/apm.h> +#include <asm/delay.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <asm/arch/hardware.h> +#include <asm/arch/pxa-regs.h> +#include <asm/arch/irqs.h> + +#include <sound/driver.h> +#include <sound/core.h> +#include <sound/pcm.h> +#include <sound/initval.h> +#include <linux/wm97xx.h> +#include <asm/arch/palmld-gpio.h> +#include <asm/arch/palmld-init.h> + + +struct palmld_battery_dev +{ + struct wm97xx * wm; + int battery_registered; + int current_voltage; + int previous_voltage; + u32 last_battery_update; +}; + +struct palmld_battery_dev bat; + +#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) +/* original APM hook */ +static void (*apm_get_power_status_orig)(struct apm_power_info *info); +#endif + +int palmld_battery_min_voltage(struct battery *b) +{ + return PALMLD_BAT_MIN_VOLTAGE; +} + + +int palmld_battery_max_voltage(struct battery *b) +{ + return PALMLD_BAT_MAX_VOLTAGE; /* mV */ +} + +/* + This formula is based on battery life of my battery 1100mAh. Original battery in Zire72 is Li-On 920mAh + V_batt = ADCSEL_BMON * 1,889 + 767,8 [mV] +*/ + +int palmld_battery_get_voltage(struct battery *b) +{ + if (bat.battery_registered){ + bat.previous_voltage = bat.current_voltage; + bat.current_voltage = wm97xx_read_aux_adc(bat.wm, WM97XX_AUX_ID3); + bat.last_battery_update = jiffies; + return bat.current_voltage * 1889/1000 + 7678/10; + } + else{ + printk("palmld_battery: cannot get voltage -> battery driver unregistered\n"); + return 0; + } +} + + +int palmld_battery_get_status(struct battery *b) +{ + int ac_connected = GET_PALMLD_GPIO(POWER_DETECT); + int usb_connected = !GET_PALMLD_GPIO(USB_DETECT); + + if (bat.current_voltage <= 0) + return BATTERY_STATUS_UNKNOWN; + + if (ac_connected || usb_connected){ + if ( ( bat.current_voltage > bat.previous_voltage ) || (bat.current_voltage <= PALMLD_BAT_MAX_VOLTAGE) ) + return BATTERY_STATUS_CHARGING; + return BATTERY_STATUS_NOT_CHARGING; + } + else + return BATTERY_STATUS_DISCHARGING; +} + +struct battery palmld_battery = { + .name = "palmld_battery", + .id = "battery0", + .get_min_voltage = palmld_battery_min_voltage, + .get_max_voltage = palmld_battery_max_voltage, + .get_voltage = palmld_battery_get_voltage, + .get_status = palmld_battery_get_status, +}; + +static int palmld_wm97xx_probe(struct device *dev) +{ + struct wm97xx *wm = dev->driver_data; + bat.wm = wm; + return 0; +} + +static int palmld_wm97xx_remove(struct device *dev) +{ + return 0; +} + +static void +palmld_wm97xx_shutdown(struct device *dev) +{ +#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) + apm_get_power_status = apm_get_power_status_orig; +#endif +} + +static int +palmld_wm97xx_suspend(struct device *dev, pm_message_t state) +{ + return 0; +} + +static int +palmld_wm97xx_resume(struct device *dev) +{ + return 0; +} + + +static struct device_driver palmld_wm97xx_driver = { + .name = "wm97xx-touchscreen", + .bus = &wm97xx_bus_type, + .owner = THIS_MODULE, + .probe = palmld_wm97xx_probe, + .remove = palmld_wm97xx_remove, + .suspend = palmld_wm97xx_suspend, + .resume = palmld_wm97xx_resume, + .shutdown = palmld_wm97xx_shutdown +}; + +#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) + +/* APM status query callback implementation */ +static void palmld_apm_get_power_status(struct apm_power_info *info) +{ + int min, max, curr, percent; + + curr = palmld_battery_get_voltage(&palmld_battery); + min = palmld_battery_min_voltage(&palmld_battery); + max = palmld_battery_max_voltage(&palmld_battery); + + curr = curr - min; + if (curr < 0) curr = 0; + max = max - min; + + percent = curr*100/max; + + info->battery_life = percent; + + info->ac_line_status = (GET_PALMLD_GPIO(POWER_DETECT) + ? APM_AC_ONLINE : APM_AC_OFFLINE); + + if (info->ac_line_status) { + info->battery_status = APM_BATTERY_STATUS_CHARGING; + } else { + if (percent > 50) + info->battery_status = APM_BATTERY_STATUS_HIGH; + else if (percent < 5) + info->battery_status = APM_BATTERY_STATUS_CRITICAL; + else + info->battery_status = APM_BATTERY_STATUS_LOW; + } + + info->time = percent * PALMLD_MAX_LIFE_MINS/100; + info->units = APM_UNITS_MINS; +} +#endif +static int __init palmld_wm97xx_init(void) +{ +#ifndef MODULE + int ret; +#endif + + /* register battery to APM layer */ + bat.battery_registered = 0; + + if(battery_class_register(&palmld_battery)) { + printk(KERN_ERR "palmld_ac97_probe: could not register battery class\n"); + } + else { + bat.battery_registered = 1; + printk("Battery registered\n"); + } +#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) + apm_get_power_status_orig = apm_get_power_status; + apm_get_power_status = palmld_apm_get_power_status; +#endif +#ifndef MODULE + /* If we're in kernel, we could accidentally be run before wm97xx + and thus have panic */ + if((ret = bus_register(&wm97xx_bus_type)) < 0) + return ret; +#endif + return driver_register(&palmld_wm97xx_driver); +} + +static void __exit palmld_wm97xx_exit(void) +{ +/* TODO - recover APM callback to original state */ + battery_class_unregister(&palmld_battery); + driver_unregister(&palmld_wm97xx_driver); +} + +module_init(palmld_wm97xx_init); +module_exit(palmld_wm97xx_exit); + +/* Module information */ +MODULE_AUTHOR("Sergey Lapin <sl...@ha...> Jan Herman <2h...@se...>"); +MODULE_DESCRIPTION("wm97xx battery driver"); +MODULE_LICENSE("GPL"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c 2007-03-19 20:19:05 UTC (rev 924) @@ -67,6 +67,8 @@ .bus = &platform_bus_type, .probe = palmld_ide_probe, .remove = palmld_ide_remove, + .suspend= NULL, + .resume = NULL, }; static int __init palmld_ide_init(void) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c 2007-03-19 20:19:05 UTC (rev 924) @@ -1,87 +1,185 @@ +/************************************************************************ + * PalmOne LifeDrive suspend/resume support * + * * + * Author: Jan Herman <2h...@se...> * + * Sergey Lapin <sla...@gm...> * + * Modification for Palm LifeDrive: Marek Vasut <mar...@gm...> * + * * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + ************************************************************************/ + #include <linux/kernel.h> #include <linux/device.h> #include <linux/pm.h> +#include <linux/fb.h> +#include <linux/platform_device.h> +#include <asm/mach-types.h> +#include <asm/hardware.h> +#include <asm/arch/pm.h> #include <asm/arch/pxa-pm_ll.h> #include <asm/arch/hardware.h> #include <asm/arch/pxa-regs.h> -static u32 *addr_a0200000; -static u32 *addr_a0200004; -static u32 *addr_a0200008; -static u32 save_a0200000; -static u32 save_a0200004; -static u32 save_a0200008; +#include <asm/arch/palmld-gpio.h> +#include <asm/arch/pxa27x_keyboard.h> -static void palmld_pxa_ll_pm_suspend(unsigned long resume_addr) +#define KPASMKP(col) (col/2==0 ? KPASMKP0 : col/2==1 ? KPASMKP1 : col/2==2 ? KPASMKP2 : KPASMKP3) +#define KPASMKPx_MKC(row, col) (1 << (row + 16*(col%2))) + +struct pm_save_data { + int brightness; + u32 rcnr; +}; - /* wake up on */ - PWER |= PWER_GPIO12; - //PFER |= 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; - - /* disable GPIO reset, palm bootloader will hang us */ - //PCFR |= PCFR_GPR_EN | PCFR_OPDE; - PCFR &= PCFR_GPR_EN; - - /* as set by POS */ - /*PGSR0 = 0x00020000; - PGSR1 = 0x00000000; - PGSR2 = 0x01004000; - PGSR3 = 0x00421380; - - PGSR2 |= (1<<30); - PGSR3 |= (1<<7) | (1<<8) | (1<<9); +static struct pm_save_data pm_save_data; - PSLR = 0xff400000; - */ - //PKWR |= GPIO_bit(0) | GPIO_bit(12) | GPIO_bit(3) | (1<<17); - //PKSR = 0xffffffff; // clear +#ifdef CONFIG_PM +static int palmld_suspend(struct device *dev, pm_message_t state) +{ + /* Wake-Up on RTC event, etc. */ + PWER |= PWER_RTC | PWER_WEP1; + /* Wake-Up on powerbutton */ + PWER |= PWER_GPIO12; + PRER |= PWER_GPIO12; - /* - addr_a0200000 = phys_to_virt(0xa0200000); - addr_a0200004 = phys_to_virt(0xa0200004); - addr_a0200008 = phys_to_virt(0xa0200008); + /* USB, in theory this can even wake us from deep sleep */ +// PWER |= PWER_GPIO3; +// PFER |= PWER_GPIO3; +// PRER |= PWER_GPIO3; - save_a0200000 = *addr_a0200000; - save_a0200004 = *addr_a0200004; - save_a0200008 = *addr_a0200008; - */ - /* - c: e3a00121 mov r0, #1073741832 ; 0x40000008 - 10: e280060f add r0, r0, #15728640 ; 0xf00000 - 14: e590f000 ldr pc, [r0] - */ - - /* - *addr_a0200000 = 0xe3a00121; // mov r0, #0x40000008 - *addr_a0200004 = 0xe280060f; // add r0, r0, #0xf00000 - *addr_a0200008 = 0xe590f000; // ldr pc, [r0] - */ + /* Wakeup by keyboard :) */ +// PKWR = 0xe0001; - PSPR = 0; /* should cause Palm bootloader to allow us to reboot */ + /* Enabled Deep-Sleep mode */ + PCFR |= PCFR_DS; + + /* Low power mode */ + PCFR |= PCFR_OPDE; + + + /* 3.6.8.1 */ + while(!(OSCC & OSCC_OOK)) + {} + + /* disable GPIO reset, palm bootloader will hang us */ + //PCFR |= PCFR_GPR_EN | PCFR_OPDE; + PCFR &= PCFR_GPR_EN; + + return 0; +} + +static int palmld_resume(struct device *dev) +{ + /* Disabled Deep-Sleep mode ?? */ + PCFR &= PCFR_DS; + + /* Re-enable GPIO reset */ + PCFR |= PCFR_GPR_EN; /* !! DO NOT REMOVE !! THIS IS NECCESARY FOR ENABLE PALM RESET !! */ + + + /* Here are all of special to resume PalmOne LifeDrive */ + + /* Turn on LCD power */ +// SET_PALMZ72_GPIO(LCD_POWER,1); + /* Turn on USB power */ +// SET_PALMZ72_GPIO(USB_POWER,1); + + return 0; +} +#else +#define palmld_suspend NULL +#define palmld_resume NULL +#endif + +static void palmld_pxa_ll_pm_suspend(unsigned long resume_addr) +{ + /* For future */ return; } static void palmld_pxa_ll_pm_resume(void) { - /* - *addr_a0200000 = save_a0200000; - *addr_a0200004 = save_a0200004; - *addr_a0200008 = save_a0200008; - */ - - /* re-enable GPIO reset */ - PCFR |= PCFR_GPR_EN; + /* For future */ } struct pxa_ll_pm_ops palmld_ll_pm_ops = { - .suspend = palmld_pxa_ll_pm_suspend, - .resume = palmld_pxa_ll_pm_resume, + .suspend = palmld_pxa_ll_pm_suspend, + .resume = palmld_pxa_ll_pm_resume, }; + +static int (*pxa_pm_enter_orig)(suspend_state_t state); + +static int lifedrive_enter_suspend(suspend_state_t state) +{ + /* Here we should implement wakeup conditions + If we have none, just return 1 to continue + sleeping */ + int data = 0; + + /* Do not suspend on active keypress */ + pxa_pm_enter_orig(state); + + printk(KERN_NOTICE "Returning from sleep due to GPIOs 100-102 or 13\n"); + printk(KERN_NOTICE "RCNR = %u pm_save_data.rcnr = %u\n", RCNR, pm_save_data.rcnr); + printk(KERN_NOTICE "Keys pressed: %d\n", data); + pm_save_data.rcnr = 0; + return 0; +} +static int lifedrive_pxa_pm_enter(suspend_state_t state) +{ + pm_save_data.rcnr = 0; + pxa_pm_enter_orig(state); + while (lifedrive_enter_suspend(state)) + {} + return 0; +} + + +static struct pm_ops lifedrive_pm_ops = { + .pm_disk_mode = PM_DISK_FIRMWARE, + .prepare = pxa_pm_prepare, + .enter = lifedrive_pxa_pm_enter, + .finish = pxa_pm_finish, +}; + +extern struct pm_ops pxa_pm_ops; + +static int palmld_pm_probe(struct device *dev) +{ + printk(KERN_NOTICE "PalmOne LifeDrive power management driver registered\n"); + return 0; +} + +struct device_driver palmld_pm_driver = { + .name = "palmld-pm", + .bus = &platform_bus_type, + .probe = palmld_pm_probe, + .suspend = palmld_suspend, + .resume = palmld_resume, +}; + +static int __init palmld_pm_init(void) +{ +pxa_pm_enter_orig=pxa_pm_ops.enter; + pxa_pm_ops.enter = pxa_pm_enter_orig; + return driver_register(&palmld_pm_driver); +} + +static void __exit palmld_pm_exit(void) +{ + pxa_pm_ops.enter = pxa_pm_enter_orig; + driver_unregister(&palmld_pm_driver); +} + +module_init(palmld_pm_init); +module_exit(palmld_pm_exit); + +MODULE_AUTHOR("Jan Herman <2h...@se...>, Sergey Lapin <sla...@gm...>"); +MODULE_DESCRIPTION("PalmOne LifeDrive power management driver"); +MODULE_LICENSE("GPL"); Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-03-18 19:56:23 UTC (rev 923) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-03-19 20:19:05 UTC (rev 924) @@ -41,6 +41,8 @@ #define GPIO_NR_PALMLD_ORANGE_LED 94 #define GPIO_NR_PALMLD_IDE_IRQ 95 +#define GPIO_NR_PALMLD_LCD_POWER 96 + #define GPIO_NR_PALMLD_KP_MKIN3 97 /* rotate-display, center, left */ #define GPIO_NR_PALMLD_IDE_RESET 98 Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h 2007-03-19 20:19:05 UTC (rev 924) @@ -0,0 +1,34 @@ +/* + * palmld-init.h + * + * Init values for PalmOne LifeDrive Handheld Computer + * + * Author: Marek Vasut <mar...@gm...> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * + * + */ + +#ifndef _INCLUDE_PALMLD_INIT_H_ + +#define _INCLUDE_PALMLD_INIT_H_ + + +// BATTERY + +#define PALMLD_BAT_MAX_VOLTAGE 4000 // 4.00V current voltage at max charge as from PalmOS +#define PALMLD_BAT_MIN_VOLTAGE 3600 // 3.60V critical voltage as from Zlauncher +#define PALMLD_BAT_MAX_CURRENT 0 // unknokn +#define PALMLD_BAT_MIN_CURRENT 0 // unknown +#define PALMLD_BAT_MAX_CHARGE 1 // unknown +#define PALMLD_BAT_MIN_CHARGE 1 // unknown +#define PALMLD_BAT_MEASURE_DELAY (HZ * 1) +#define PALMLD_MAX_LIFE_MINS 240 // my LifeDrive on-life in minutes + + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-03-20 16:12:28
|
Revision: 928 http://svn.sourceforge.net/hackndev/?rev=928&view=rev Author: marex_z71 Date: 2007-03-20 09:05:19 -0700 (Tue, 20 Mar 2007) Log Message: ----------- PalmLD: various cleanups and testing microdrive suspend/resume Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c 2007-03-19 23:47:26 UTC (rev 927) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_ide.c 2007-03-20 16:05:19 UTC (rev 928) @@ -57,13 +57,33 @@ if (hd) { ide_unregister(*hd); } - + kfree(hd); /* conserve battery where we can */ SET_PALMLD_GPIO(IDE_PWEN, 0); return 0; } +#ifdef CONFIG_PM +static int palmld_ide_suspend(struct platform_device *dev, pm_message_t state) +{ + printk("palmld_ide_suspend: going zzz\n"); + palmld_ide_remove(dev); + return 0; +} + +static int palmld_ide_resume(struct platform_device *dev) +{ + printk("palmld_ide_resume: resuming\n"); + palmld_ide_probe(dev); + return 0; +} +#else +#define palmld_suspend NULL +#define palmld_resume NULL +#endif + + static struct platform_driver palmld_ide_driver = { .driver = { .name = "palmld-ide", @@ -71,8 +91,8 @@ }, .probe = palmld_ide_probe, .remove = palmld_ide_remove, - .suspend= NULL, - .resume = NULL, + .suspend= palmld_ide_suspend, + .resume = palmld_ide_resume, }; static int __init palmld_ide_init(void) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c 2007-03-19 23:47:26 UTC (rev 927) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_pm.c 2007-03-20 16:05:19 UTC (rev 928) @@ -31,14 +31,6 @@ #define KPASMKP(col) (col/2==0 ? KPASMKP0 : col/2==1 ? KPASMKP1 : col/2==2 ? KPASMKP2 : KPASMKP3) #define KPASMKPx_MKC(row, col) (1 << (row + 16*(col%2))) -struct pm_save_data -{ - int brightness; - u32 rcnr; -}; - -static struct pm_save_data pm_save_data; - #ifdef CONFIG_PM static int palmld_suspend(struct device *dev, pm_message_t state) { @@ -67,8 +59,14 @@ while(!(OSCC & OSCC_OOK)) {} + /* Here are all of special for suspend PalmOne LifeDrive */ + + /* Turn off LCD power */ + SET_PALMLD_GPIO(LCD_POWER,0); + /* Turn screen off */ + SET_PALMLD_GPIO(SCREEN,0); + /* disable GPIO reset, palm bootloader will hang us */ - //PCFR |= PCFR_GPR_EN | PCFR_OPDE; PCFR &= PCFR_GPR_EN; return 0; @@ -86,9 +84,9 @@ /* Here are all of special to resume PalmOne LifeDrive */ /* Turn on LCD power */ -// SET_PALMZ72_GPIO(LCD_POWER,1); - /* Turn on USB power */ -// SET_PALMZ72_GPIO(USB_POWER,1); + SET_PALMLD_GPIO(LCD_POWER,1); + /* Turn screen on */ + SET_PALMLD_GPIO(SCREEN,1); return 0; } @@ -115,39 +113,6 @@ static int (*pxa_pm_enter_orig)(suspend_state_t state); -static int lifedrive_enter_suspend(suspend_state_t state) -{ - /* Here we should implement wakeup conditions - If we have none, just return 1 to continue - sleeping */ - int data = 0; - - /* Do not suspend on active keypress */ - pxa_pm_enter_orig(state); - - printk(KERN_NOTICE "Returning from sleep due to GPIOs 100-102 or 13\n"); - printk(KERN_NOTICE "RCNR = %u pm_save_data.rcnr = %u\n", RCNR, pm_save_data.rcnr); - printk(KERN_NOTICE "Keys pressed: %d\n", data); - pm_save_data.rcnr = 0; - return 0; -} -static int lifedrive_pxa_pm_enter(suspend_state_t state) -{ - pm_save_data.rcnr = 0; - pxa_pm_enter_orig(state); - while (lifedrive_enter_suspend(state)) - {} - return 0; -} - - -static struct pm_ops lifedrive_pm_ops = { - .pm_disk_mode = PM_DISK_FIRMWARE, - .prepare = pxa_pm_prepare, - .enter = lifedrive_pxa_pm_enter, - .finish = pxa_pm_finish, -}; - extern struct pm_ops pxa_pm_ops; static int palmld_pm_probe(struct device *dev) Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-03-19 23:47:26 UTC (rev 927) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-03-20 16:05:19 UTC (rev 928) @@ -29,6 +29,7 @@ #define GPIO_NR_PALMLD_EARPHONE_DETECT 13 #define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ #define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ +#define GPIO_NR_PALMLD_SCREEN 19 #define GPIO_NR_PALMLD_WM9712_IRQ 27 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-03-30 21:01:53
|
Revision: 948 http://svn.sourceforge.net/hackndev/?rev=948&view=rev Author: marex_z71 Date: 2007-03-30 14:01:50 -0700 (Fri, 30 Mar 2007) Log Message: ----------- PalmLD: Restart of works on USB2 driver, reg dumping code Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c Added Paths: ----------- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-03-29 18:54:56 UTC (rev 947) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-03-30 21:01:50 UTC (rev 948) @@ -6,95 +6,128 @@ #include <linux/device.h> #include <linux/platform_device.h> #include <linux/delay.h> -#include <linux/soc-device.h> #include <asm/mach-types.h> #include <asm/hardware.h> -#include <../drivers/pcmcia/soc_common.h> #include <asm/arch/pxa-regs.h> #include <asm/irq.h> #include <asm/arch/palmld-gpio.h> +#include <asm/arch/palmld-usb2.h> -/* -#define GET_GPIO(gpio) \ - (GPLR(gpio) & GPIO_bit(gpio)) -#define SET_GPIO(gpio, setp) \ -do { \ -if (setp) \ - GPSR(gpio) = GPIO_bit(gpio); \ -else \ - GPCR(gpio) = GPIO_bit(gpio); \ -} while (0) +u16 palmld_usb2_cmd_read(int addr) +{ + u16 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ + | (addr & PALMLD_USB2_ADDR_MASK); -static int socket_ready; + PALMLD_USB2_ADDR_FIFO6 = data; + + // ... wait for interrupt ... + udelay(100); + + return PALMLD_USB2_ADDR_FIFO6; +} -static struct platform_device palmld_pcmcia_device = { - .name = "pxa2xx-pcmcia", - .id = 0, - .dev = { - .platform_data = &palmld_pcmcia_ops, - .release = palmld_pcmcia_release - } -}; +u16 palmld_usb2_dumpregs(void) +{ + printk ("- CY7C68001 REGISTER DUMP -\n"); -*/ + printk (">> ADDRESS DUMP\n"); + printk ("FIFO2 %04x\n", PALMLD_USB2_ADDR_FIFO2); + printk ("FIFO4 %04x\n", PALMLD_USB2_ADDR_FIFO4); + printk ("FIFO6 %04x\n", PALMLD_USB2_ADDR_FIFO6); + printk ("FIFO8 %04x\n", PALMLD_USB2_ADDR_FIFO8); + printk ("CMD %04x\n", PALMLD_USB2_ADDR_CMD); + printk ("RESERVED1 %04x\n", PALMLD_USB2_ADDR_RESERVED1); + printk ("RESERVED2 %04x\n", PALMLD_USB2_ADDR_RESERVED2); + printk ("RESERVED3 %04x\n", PALMLD_USB2_ADDR_RESERVED3); -#define SX2_BASE PALMLD_USB_VIRT + printk ("\n\n>> REGISTER DUMP\n"); + printk ("*** GENERAL CONFIG\n"); + printk ("IFCONFIG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_IFCONFIG)); + printk ("FLAGSAB %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSAB)); + printk ("FLAGSCD %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSCD)); + printk ("POLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_POLAR)); + printk ("REVID %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_REVID)); -#define SX2_IF(x) (*((volatile u16 *)x)) + printk ("\n*** ENDPOINT CONFIG\n"); + printk ("EP2CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2CFG)); + printk ("EP4CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4CFG)); + printk ("EP6CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6CFG)); + printk ("EP8CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8CFG)); + printk ("EP2PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENH)); + printk ("EP2PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENL)); + printk ("EP4PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENH)); + printk ("EP4PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENL)); + printk ("EP6PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENH)); + printk ("EP6PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENL)); + printk ("EP8PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENH)); + printk ("EP8PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENL)); + printk ("EP2PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFH)); + printk ("EP2PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFL)); + printk ("EP4PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFH)); + printk ("EP4PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFL)); + printk ("EP6PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFH)); + printk ("EP6PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFL)); + printk ("EP8PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFH)); + printk ("EP8PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFL)); + printk ("EP2ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2ISOINPKTS)); + printk ("EP4ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4ISOINPKTS)); + printk ("EP6ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6ISOINPKTS)); + printk ("EP8ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8ISOINPKTS)); + + printk ("\n*** INPKTEND/FLUSH\n"); + printk ("INPKTEND/FLUSH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INPKTEND)); -#define SX2_FIFO2 SX2_IF(SX2_BASE + 0x0) -#define SX2_FIFO4 SX2_IF(SX2_BASE + 0x2) -#define SX2_FIFO6 SX2_IF(SX2_BASE + 0x4) -#define SX2_FIFO8 SX2_IF(SX2_BASE + 0x6) -#define SX2_CMD SX2_IF(SX2_BASE + 0x8) + printk ("\n*** USB CONFIG\n"); + printk ("USBFRAMEH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEH)); + printk ("USBFRAMEL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEL)); + printk ("MICROFRAME %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_MICROFRAME)); + printk ("FNADDR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FNADDR)); + + printk ("\n*** INTERRUPTS\n"); + printk ("INTENABLE %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INTENABLE)); + + printk ("\n*** DESCRIPTOR\n"); + printk ("DESC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_DESC)); + + printk ("\n*** ENDPOINT 0\n"); + printk ("EP0BUF %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BUF)); + printk ("SETUP %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_SETUP)); + printk ("EP0BC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BC)); + + printk ("\n*** UNINDEXED REG CTRL\n"); + printk ("UIRC0 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC0)); + printk ("UIRC1 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC1)); + printk ("UIRC2 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC2)); -#define SX2_CMD_READ (0x40) -#define SX2_CMD_ADDR (0x80) + printk ("\n*** UNINDEXED REGS IN XDATA\n"); + printk ("FIFOPINPOLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FIFOPINPOLAR)); + printk ("TOGCTL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_TOGCTL)); -#define SX2_ADDR_MASK (0x3f) + printk ("\n- END OF DUMP -\n"); - -#define SX2_REG_REVID (0x05) - -u16 sx2_cmd_read(int addr) -{ - u16 data = SX2_CMD_ADDR | SX2_CMD_READ | (addr & SX2_ADDR_MASK); - SX2_FIFO6 = data; - - // ... wait for interrupt ... - udelay(100); - - return SX2_FIFO6; + return 0; } -static int __init sx2_init(void) +static int __init palmld_usb2_init(void) { printk ("sx2_init()\n"); if(!machine_is_xscale_palmld()) return -ENODEV; - printk ("fifo2 %x\n", SX2_FIFO2); - printk ("fifo4 %x\n", SX2_FIFO4); - printk ("fifo6 %x\n", SX2_FIFO6); - printk ("fifo8 %x\n", SX2_FIFO8); - printk ("cmd %x\n", SX2_CMD); - printk ("res1 %x\n", SX2_IF(SX2_BASE + 10)); - printk ("res2 %x\n", SX2_IF(SX2_BASE + 12)); + palmld_usb2_dumpregs(); + + return -ENODEV; - printk ("Chip revision: %x\n", sx2_cmd_read(SX2_REG_REVID)); - - return -ENODEV; //platform_device_register (&palmld_pcmcia_device); } -static void __exit sx2_exit(void) +static void __exit palmld_usb2_exit(void) { - //platform_device_unregister (&palmld_pcmcia_device); } -module_init(sx2_init); -module_exit(sx2_exit); +module_init(palmld_usb2_init); +module_exit(palmld_usb2_exit); -MODULE_AUTHOR ("Alex Osborne <bob...@gm...>"); -MODULE_DESCRIPTION ("EZ-USB SX2 support for Palm LifeDrive"); +MODULE_AUTHOR ("Marek Vasut <mar...@gm...>"); +MODULE_DESCRIPTION ("USB2 driver for Palm LifeDrive"); MODULE_LICENSE ("GPL"); Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-03-30 21:01:50 UTC (rev 948) @@ -0,0 +1,125 @@ +/* + * palmld-usb2.h + * + * Cypress EZUSB SX2 - CY7C68001 External master register definitions + * SX2 is an USB2 controller in PalmOne LifeDrive Handheld Computer + * + * Author: Marek Vasut <mar...@gm...> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * + * + */ +#ifndef _INCLUDE_PALMLD_USB2_H_ + +#define _INCLUDE_PALMLD_USB2_H_ + +#include <asm/arch/palmld-gpio.h> + +/*************************************************** + * SX2 REGISTERS * + ***************************************************/ + +/* General configuration */ +#define PALMLD_USB2_REG_IFCONFIG 0x01 +#define PALMLD_USB2_REG_FLAGSAB 0x02 +#define PALMLD_USB2_REG_FLAGSCD 0x03 +#define PALMLD_USB2_REG_POLAR 0x04 +#define PALMLD_USB2_REG_REVID 0x05 + +/* Endpoint configuration */ +#define PALMLD_USB2_REG_EP2CFG 0x06 +#define PALMLD_USB2_REG_EP4CFG 0x07 +#define PALMLD_USB2_REG_EP6CFG 0x08 +#define PALMLD_USB2_REG_EP8CFG 0x09 +#define PALMLD_USB2_REG_EP2PKTLENH 0x0A +#define PALMLD_USB2_REG_EP2PKTLENL 0x0B +#define PALMLD_USB2_REG_EP4PKTLENH 0x0C +#define PALMLD_USB2_REG_EP4PKTLENL 0x0D +#define PALMLD_USB2_REG_EP6PKTLENH 0x0E +#define PALMLD_USB2_REG_EP6PKTLENL 0x0F +#define PALMLD_USB2_REG_EP8PKTLENH 0x10 +#define PALMLD_USB2_REG_EP8PKTLENL 0x11 +#define PALMLD_USB2_REG_EP2PFH 0x12 +#define PALMLD_USB2_REG_EP2PFL 0x13 +#define PALMLD_USB2_REG_EP4PFH 0x14 +#define PALMLD_USB2_REG_EP4PFL 0x15 +#define PALMLD_USB2_REG_EP6PFH 0x16 +#define PALMLD_USB2_REG_EP6PFL 0x17 +#define PALMLD_USB2_REG_EP8PFH 0x18 +#define PALMLD_USB2_REG_EP8PFL 0x19 +#define PALMLD_USB2_REG_EP2ISOINPKTS 0x1A +#define PALMLD_USB2_REG_EP4ISOINPKTS 0x1B +#define PALMLD_USB2_REG_EP6ISOINPKTS 0x1C +#define PALMLD_USB2_REG_EP8ISOINPKTS 0x1D + +/* Flags */ +#define PALMLD_USB2_REG_EP24FLAGS 0x1E +#define PALMLD_USB2_REG_EP68FLAGS 0x1F + +/* INPKTEND/FLUSH */ +#define PALMLD_USB2_REG_INPKTEND 0x20 +#define PALMLD_USB2_REG_FLUSH 0x20 + +/* USB Configuration */ +#define PALMLD_USB2_REG_USBFRAMEH 0x2A +#define PALMLD_USB2_REG_USBFRAMEL 0x2B +#define PALMLD_USB2_REG_MICROFRAME 0x2C +#define PALMLD_USB2_REG_FNADDR 0x2D + +/* Interrupts */ +#define PALMLD_USB2_REG_INTENABLE 0x2E + +/* Descriptor */ +#define PALMLD_USB2_REG_DESC 0x30 + +/* Endpoint 0 */ +#define PALMLD_USB2_REG_EP0BUF 0x31 +#define PALMLD_USB2_REG_SETUP 0x32 +#define PALMLD_USB2_REG_EP0BC 0x33 + +/* Un-indexed Register control */ +#define PALMLD_USB2_REG_UIRC0 0x3A +#define PALMLD_USB2_REG_UIRC1 0x3B +#define PALMLD_USB2_REG_UIRC2 0x3C + +/* Un-indexed Registers in XDATA space */ +#define PALMLD_USB2_REG_FIFOPINPOLAR 0xE609 +#define PALMLD_USB2_REG_TOGCTL 0xE683 + +/*************************************************** + * SX2 ADDRESS * + ***************************************************/ + +#define PALMLD_USB2_ADDR_BASE PALMLD_USB_VIRT + +#define PALMLD_USB2_ADDR_IF(x) (*((volatile u16 *)x)) + +#define PALMLD_USB2_ADDR_FIFO2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x0) +#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x2) +#define PALMLD_USB2_ADDR_FIFO6 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x4) +#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x6) +#define PALMLD_USB2_ADDR_CMD PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x8) +#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x10) +#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x12) +#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x14) + +/*************************************************** + * SX2 COMMANDS * + ***************************************************/ + +#define PALMLD_USB2_CMD_WRITE (0x00) +#define PALMLD_USB2_CMD_READ (0x40) +#define PALMLD_USB2_CMD_ADDR (0x80) + +/*************************************************** + * SX2 MISC * + ***************************************************/ + +#define PALMLD_USB2_ADDR_MASK (0x3f) + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-04-06 20:21:03
|
Revision: 951 http://svn.sourceforge.net/hackndev/?rev=951&view=rev Author: marex_z71 Date: 2007-04-06 13:20:59 -0700 (Fri, 06 Apr 2007) Log Message: ----------- PalmLD: Basic stone for USB2 driver ... this can enumerate with builtin descriptor Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-06 20:20:59 UTC (rev 951) @@ -14,98 +14,112 @@ #include <asm/arch/palmld-gpio.h> #include <asm/arch/palmld-usb2.h> -u16 palmld_usb2_cmd_read(int addr) +u16 palmld_usb2_cmd_read(int reg) { - u16 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ - | (addr & PALMLD_USB2_ADDR_MASK); + u8 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ + | (reg & PALMLD_USB2_ADDR_MASK); + PALMLD_USB2_ADDR_CMD = data; + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; +/* printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4); + printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8); + printk("REG 0x%02x CD 0x%02x\n",reg,PALMLD_USB2_ADDR_CMD); +*/ return 0; +} - PALMLD_USB2_ADDR_FIFO6 = data; - - // ... wait for interrupt ... - udelay(100); - - return PALMLD_USB2_ADDR_FIFO6; +int palmld_usb2_cmd_set_reg(int reg) +{ + /* initiate write to addr */ + printk("SETTING 0x%02x\n",(reg | PALMLD_USB2_CMD_ADDR)); + PALMLD_USB2_ADDR_CMD=(reg | PALMLD_USB2_CMD_ADDR); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; + return 0; } -u16 palmld_usb2_dumpregs(void) +int palmld_usb2_cmd_write(u8 data) { - printk ("- CY7C68001 REGISTER DUMP -\n"); + /* prepare data */ + u8 data1 = ((data & 0xf0)>>3); /* Upper nibble */ + u8 data2 = (data & 0x0f); /* Lower nibble */ - printk (">> ADDRESS DUMP\n"); - printk ("FIFO2 %04x\n", PALMLD_USB2_ADDR_FIFO2); - printk ("FIFO4 %04x\n", PALMLD_USB2_ADDR_FIFO4); - printk ("FIFO6 %04x\n", PALMLD_USB2_ADDR_FIFO6); - printk ("FIFO8 %04x\n", PALMLD_USB2_ADDR_FIFO8); - printk ("CMD %04x\n", PALMLD_USB2_ADDR_CMD); - printk ("RESERVED1 %04x\n", PALMLD_USB2_ADDR_RESERVED1); - printk ("RESERVED2 %04x\n", PALMLD_USB2_ADDR_RESERVED2); - printk ("RESERVED3 %04x\n", PALMLD_USB2_ADDR_RESERVED3); + /* initiate write to reg */ + printk("UPPER NIBBLE %02x\n",(data1 | PALMLD_USB2_CMD_WRITE)); + PALMLD_USB2_ADDR_CMD=(data1 | PALMLD_USB2_CMD_WRITE); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; - printk ("\n\n>> REGISTER DUMP\n"); - printk ("*** GENERAL CONFIG\n"); - printk ("IFCONFIG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_IFCONFIG)); - printk ("FLAGSAB %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSAB)); - printk ("FLAGSCD %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSCD)); - printk ("POLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_POLAR)); - printk ("REVID %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_REVID)); + printk("LOWER NIBBLE %02x\n",(data2 | PALMLD_USB2_CMD_WRITE)); + PALMLD_USB2_ADDR_CMD=(data2 | PALMLD_USB2_CMD_WRITE); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; - printk ("\n*** ENDPOINT CONFIG\n"); - printk ("EP2CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2CFG)); - printk ("EP4CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4CFG)); - printk ("EP6CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6CFG)); - printk ("EP8CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8CFG)); - printk ("EP2PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENH)); - printk ("EP2PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENL)); - printk ("EP4PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENH)); - printk ("EP4PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENL)); - printk ("EP6PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENH)); - printk ("EP6PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENL)); - printk ("EP8PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENH)); - printk ("EP8PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENL)); - printk ("EP2PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFH)); - printk ("EP2PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFL)); - printk ("EP4PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFH)); - printk ("EP4PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFL)); - printk ("EP6PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFH)); - printk ("EP6PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFL)); - printk ("EP8PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFH)); - printk ("EP8PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFL)); - printk ("EP2ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2ISOINPKTS)); - printk ("EP4ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4ISOINPKTS)); - printk ("EP6ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6ISOINPKTS)); - printk ("EP8ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8ISOINPKTS)); - - printk ("\n*** INPKTEND/FLUSH\n"); - printk ("INPKTEND/FLUSH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INPKTEND)); + return 0; +} - printk ("\n*** USB CONFIG\n"); - printk ("USBFRAMEH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEH)); - printk ("USBFRAMEL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEL)); - printk ("MICROFRAME %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_MICROFRAME)); - printk ("FNADDR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FNADDR)); - - printk ("\n*** INTERRUPTS\n"); - printk ("INTENABLE %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INTENABLE)); - - printk ("\n*** DESCRIPTOR\n"); - printk ("DESC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_DESC)); - - printk ("\n*** ENDPOINT 0\n"); - printk ("EP0BUF %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BUF)); - printk ("SETUP %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_SETUP)); - printk ("EP0BC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BC)); - - printk ("\n*** UNINDEXED REG CTRL\n"); - printk ("UIRC0 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC0)); - printk ("UIRC1 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC1)); - printk ("UIRC2 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC2)); +u8 palmld_usb2_test_cmd(void) { + /* RESET THE CHIP */ + SET_GPIO(118,0); + udelay(100); + SET_GPIO(118,1); + udelay(500); - printk ("\n*** UNINDEXED REGS IN XDATA\n"); - printk ("FIFOPINPOLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FIFOPINPOLAR)); - printk ("TOGCTL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_TOGCTL)); + /* ENUMERATE WITH BUILTIN DESCRIPTOR */ + /* select register 0x30 - descriptor RAM*/ + palmld_usb2_cmd_set_reg(0x30); + printk("SET ADDR to 0x30,GPIO86 %i\n",(GET_GPIO(86)?1:0)); + /* write descriptor length */ + palmld_usb2_cmd_write(0x06); + palmld_usb2_cmd_write(0x00); + printk("WRITE DESR size to 0x30,GPIO86 %i\n",(GET_GPIO(86)?1:0)); - printk ("\n- END OF DUMP -\n"); + /* write descriptor as described in SX2 docs */ + palmld_usb2_cmd_write(0x04); + palmld_usb2_cmd_write(0x0B); + palmld_usb2_cmd_write(0x04); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x02); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x00); + palmld_usb2_cmd_write(0x01); + + palmld_usb2_cmd_write(0x01); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x00); + palmld_usb2_cmd_write(0x00); + + /* A LOT OF DEBUGING CRAP */ +/* printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); +*/ + + for (;;) { + /* printk("%02x%02x|%02x%02x|%02x%02x|%02x%02x|%i|%i|%i|%i|%i|%i\n", + PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4, + PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8, + PALMLD_USB2_ADDR_CMD,PALMLD_USB2_ADDR_RESERVED1, + PALMLD_USB2_ADDR_RESERVED2,PALMLD_USB2_ADDR_RESERVED3, + (GET_GPIO(18)?1:0),(GET_GPIO(20)?1:0), + (GET_GPIO(53)?1:0),(GET_GPIO(86)?1:0), + (GET_GPIO(90)?1:0),(GET_GPIO(106)?1:0)); + */} + return 0; } @@ -115,10 +129,9 @@ if(!machine_is_xscale_palmld()) return -ENODEV; - palmld_usb2_dumpregs(); + palmld_usb2_test_cmd(); return -ENODEV; - } static void __exit palmld_usb2_exit(void) Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-04-06 20:20:59 UTC (rev 951) @@ -21,21 +21,20 @@ /* 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 -#define GPIO_NR_PALMLD_POWER_SWITCH 11 -#define GPIO_NR_PALMLD_EARPHONE_DETECT 13 -#define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ -#define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ -#define GPIO_NR_PALMLD_SCREEN 19 +#define GPIO_NR_PALMLD_GPIO_RESET 1 +#define GPIO_NR_PALMLD_POWER_DETECT 4 +#define GPIO_NR_PALMLD_HOTSYNC_BUTTON_N 10 +#define GPIO_NR_PALMLD_POWER_SWITCH 11 +#define GPIO_NR_PALMLD_EARPHONE_DETECT 13 +#define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ +#define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ +#define GPIO_NR_PALMLD_SCREEN 19 -#define GPIO_NR_PALMLD_WM9712_IRQ 27 +#define GPIO_NR_PALMLD_WM9712_IRQ 27 -#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_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 @@ -74,6 +73,13 @@ #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) +/* USB */ +#define GPIO_NR_PALMLD_USB_DETECT 3 +#define GPIO_NR_PALMLD_USB_READY 86 +#define GPIO_NR_PALMLD_USB_RESET 88 +#define GPIO_NR_PALMLD_USB_INT 106 +#define GPIO_NR_PALMLD_USB_POWER 118 + /* Utility macros */ #define GET_PALMLD_GPIO(gpio) \ (GPLR(GPIO_NR_PALMLD_ ## gpio) & GPIO_bit(GPIO_NR_PALMLD_ ## gpio)) @@ -97,5 +103,13 @@ #define GET_GPIO(gpio) (GPLR(gpio) & GPIO_bit(gpio)) +#define SET_GPIO(gpio, setp) \ +do { \ +if (setp) \ + GPSR(gpio) = GPIO_bit(gpio); \ +else \ + GPCR(gpio) = GPIO_bit(gpio); \ +} while (0) + #endif /* _PALMLD_GPIO_H_ */ Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h 2007-04-06 20:20:59 UTC (rev 951) @@ -22,7 +22,7 @@ // BATTERY #define PALMLD_BAT_MAX_VOLTAGE 4000 // 4.00V current voltage at max charge as from PalmOS -#define PALMLD_BAT_MIN_VOLTAGE 3600 // 3.60V critical voltage as from Zlauncher +#define PALMLD_BAT_MIN_VOLTAGE 3550 // 3.55V critical voltage #define PALMLD_BAT_MAX_CURRENT 0 // unknokn #define PALMLD_BAT_MIN_CURRENT 0 // unknown #define PALMLD_BAT_MAX_CHARGE 1 // unknown Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-06 20:20:59 UTC (rev 951) @@ -97,16 +97,18 @@ #define PALMLD_USB2_ADDR_BASE PALMLD_USB_VIRT -#define PALMLD_USB2_ADDR_IF(x) (*((volatile u16 *)x)) +#define PALMLD_USB2_ADDR_IF(x) (*((volatile u8 *)x)) +/* We have 16bit bus of the chip connected to 32 bit bus of CPU */ + #define PALMLD_USB2_ADDR_FIFO2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x0) -#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x2) +#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x1) #define PALMLD_USB2_ADDR_FIFO6 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x4) -#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x6) +#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x5) #define PALMLD_USB2_ADDR_CMD PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x8) -#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x10) -#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x12) -#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x14) +#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x9) +#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xc) +#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xd) /*************************************************** * SX2 COMMANDS * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-04-09 10:54:42
|
Revision: 953 http://svn.sourceforge.net/hackndev/?rev=953&view=rev Author: marex_z71 Date: 2007-04-09 03:54:38 -0700 (Mon, 09 Apr 2007) Log Message: ----------- PalmLD: Switch SX2 to Linux USB Gadget driver API Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c linux4palm/linux/trunk/drivers/usb/gadget/Kconfig linux4palm/linux/trunk/drivers/usb/gadget/Makefile Added Paths: ----------- linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.c linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/sx2.h Removed Paths: ------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-04-06 22:44:13 UTC (rev 952) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-04-09 10:54:38 UTC (rev 953) @@ -30,6 +30,7 @@ #include <asm/arch/pxa27x_keyboard.h> #include <asm/arch/pxapwm-bl.h> #include <asm/arch/pxa-pm_ll.h> +#include <asm/arch/sx2.h> #include <sound/driver.h> #include <sound/core.h> @@ -163,6 +164,30 @@ .id = -1, }; +/* + * Cypress EZUSB SX2 USB2.0 Controller + */ +static struct sx2_udc_mach_info palmldusb2_platform_data = { + .virt_base = PALMLD_USB_VIRT, + + .ready_pin = GPIO_NR_PALMLD_USB_READY, + .int_pin = 0, // gotta detect it + .reset_pin = GPIO_NR_PALMLD_USB_RESET, + .power_pin = GPIO_NR_PALMLD_USB_POWER, + + .sloe_pin = 0, // gotta detect it + .slrd_pin = 0, // gotta detect it + .slwr_pin = 0, // gotta detect it +}; + +static struct platform_device palmldusb2_device = { + .name = "sx2-udc", + .id = -1, + .dev = { + .platform_data = &palmldusb2_platform_data, + }, +}; + /** * Backlight */ @@ -258,7 +283,7 @@ static struct platform_device *devices[] __initdata = { &palmld_kbd, &palmld_ac97, &palmld_ide, &palmld_backlight, - &palmldled_device, &palmld_pm, + &palmldled_device, &palmldusb2_device, &palmld_pm, }; /********************************************************* Deleted: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-06 22:44:13 UTC (rev 952) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-09 10:54:38 UTC (rev 953) @@ -1,310 +0,0 @@ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/device.h> -#include <linux/platform_device.h> -#include <linux/delay.h> - -#include <asm/mach-types.h> -#include <asm/hardware.h> -#include <asm/arch/pxa-regs.h> -#include <asm/irq.h> -#include <asm/arch/palmld-gpio.h> -#include <asm/arch/palmld-usb2.h> - -u16 palmld_usb2_cmd_read(int reg) -{ - u8 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ - | (reg & PALMLD_USB2_ADDR_MASK); - PALMLD_USB2_ADDR_CMD = data; - while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { - }; -/* printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4); - printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8); - printk("REG 0x%02x CD 0x%02x\n",reg,PALMLD_USB2_ADDR_CMD); -*/ return 0; -} - -int palmld_usb2_cmd_set_reg(int reg) -{ - /* initiate write to addr */ - printk("SETTING 0x%02x\n",(reg | PALMLD_USB2_CMD_ADDR)); - PALMLD_USB2_ADDR_CMD=(reg | PALMLD_USB2_CMD_ADDR); - /* wait for READY line */ - while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { - }; - return 0; -} - -int palmld_usb2_cmd_write(u8 data) -{ - /* prepare data */ - u8 data1 = ((data & 0xf0)>>4); /* Upper nibble */ - u8 data2 = (data & 0x0f); /* Lower nibble */ - - /* initiate write to reg */ - printk("UPPER NIBBLE %02x\n",(data1 | PALMLD_USB2_CMD_WRITE)); - PALMLD_USB2_ADDR_CMD=(data1 | PALMLD_USB2_CMD_WRITE); - /* wait for READY line */ - while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { - }; - - printk("LOWER NIBBLE %02x\n",(data2 | PALMLD_USB2_CMD_WRITE)); - PALMLD_USB2_ADDR_CMD=(data2 | PALMLD_USB2_CMD_WRITE); - /* wait for READY line */ - while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { - }; - - return 0; -} - -u8 palmld_usb2_test_cmd(void) { - /* RESET THE CHIP */ - SET_GPIO(118,0); - udelay(100); - SET_GPIO(118,1); - udelay(500); - - /* ENUMERATE WITH BUILTIN DESCRIPTOR */ - /* select register 0x30 - descriptor RAM*/ - palmld_usb2_cmd_set_reg(0x30); - /* write descriptor length */ - palmld_usb2_cmd_write(0xa0); - palmld_usb2_cmd_write(0x00); - - /* write descriptor as described in SX2 docs */ - /* Device Descriptor */ - palmld_usb2_cmd_write(18); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(64); - palmld_usb2_cmd_write(0x12); - palmld_usb2_cmd_write(0x34); - palmld_usb2_cmd_write(0x56); - palmld_usb2_cmd_write(0x78); - palmld_usb2_cmd_write(0xcd); - palmld_usb2_cmd_write(0xab); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(01); - /* Device qualifier */ - palmld_usb2_cmd_write(10); - palmld_usb2_cmd_write(06); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(64); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(00); - - /* High Speed Config */ - palmld_usb2_cmd_write(9); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(46); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(0x0A); - palmld_usb2_cmd_write(50); - /* Interface descr */ - palmld_usb2_cmd_write(9); - palmld_usb2_cmd_write(04); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(04); - palmld_usb2_cmd_write(0xFF); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x04); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x86); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x88); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(0x00); - - /* Full Speed Config */ - palmld_usb2_cmd_write(9); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(46); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(01); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(0x0A); - palmld_usb2_cmd_write(50); - /* Interface descr */ - palmld_usb2_cmd_write(9); - palmld_usb2_cmd_write(04); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write(04); - palmld_usb2_cmd_write(0xFF); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x02); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x40); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x04); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x40); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x86); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x40); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - /* Endpoint descr */ - palmld_usb2_cmd_write(07); - palmld_usb2_cmd_write(05); - palmld_usb2_cmd_write(0x88); - palmld_usb2_cmd_write(02); - palmld_usb2_cmd_write(0x40); - palmld_usb2_cmd_write(0x00); - palmld_usb2_cmd_write(0x00); - - /* String descr 0 */ - palmld_usb2_cmd_write(04); - palmld_usb2_cmd_write(03); - palmld_usb2_cmd_write(0x09); - palmld_usb2_cmd_write(0x04); - - /* String descr 1 */ - palmld_usb2_cmd_write(16); - palmld_usb2_cmd_write(03); - palmld_usb2_cmd_write('C'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('y'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('p'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('r'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('e'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('s'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('s'); - palmld_usb2_cmd_write(00); - - /* String descr 1 */ - palmld_usb2_cmd_write(20); - palmld_usb2_cmd_write(3); - palmld_usb2_cmd_write('C'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('Y'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('7'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('C'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('6'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('8'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('0'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('0'); - palmld_usb2_cmd_write(00); - palmld_usb2_cmd_write('1'); - palmld_usb2_cmd_write(00); - - - /* A LOT OF DEBUGING CRAP */ -/* printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); - printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); -*/ - - for (;;) { - /* printk("%02x%02x|%02x%02x|%02x%02x|%02x%02x|%i|%i|%i|%i|%i|%i\n", - PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4, - PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8, - PALMLD_USB2_ADDR_CMD,PALMLD_USB2_ADDR_RESERVED1, - PALMLD_USB2_ADDR_RESERVED2,PALMLD_USB2_ADDR_RESERVED3, - (GET_GPIO(18)?1:0),(GET_GPIO(20)?1:0), - (GET_GPIO(53)?1:0),(GET_GPIO(86)?1:0), - (GET_GPIO(90)?1:0),(GET_GPIO(106)?1:0)); - */} - - return 0; -} - -static int __init palmld_usb2_init(void) -{ - printk ("sx2_init()\n"); - - if(!machine_is_xscale_palmld()) return -ENODEV; - - palmld_usb2_test_cmd(); - - return -ENODEV; -} - -static void __exit palmld_usb2_exit(void) -{ -} - -module_init(palmld_usb2_init); -module_exit(palmld_usb2_exit); - -MODULE_AUTHOR ("Marek Vasut <mar...@gm...>"); -MODULE_DESCRIPTION ("USB2 driver for Palm LifeDrive"); -MODULE_LICENSE ("GPL"); Modified: linux4palm/linux/trunk/drivers/usb/gadget/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/usb/gadget/Kconfig 2007-04-06 22:44:13 UTC (rev 952) +++ linux4palm/linux/trunk/drivers/usb/gadget/Kconfig 2007-04-09 10:54:38 UTC (rev 953) @@ -148,6 +148,19 @@ depends on USB_GADGET_PXA27X default n +config USB_GADGET_SX2 + boolean "Cypress EZUSB SX2" + depends on ARCH_PXA + help + Cypress EZUSB SX2 driver + +config USB_SX2 + tristate + depends on USB_GADGET_SX2 + default USB_GADGET + select USB_GADGET_SELECTED + + config USB_GADGET_GOKU boolean "Toshiba TC86C001 'Goku-S'" depends on PCI Modified: linux4palm/linux/trunk/drivers/usb/gadget/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/usb/gadget/Makefile 2007-04-06 22:44:13 UTC (rev 952) +++ linux4palm/linux/trunk/drivers/usb/gadget/Makefile 2007-04-09 10:54:38 UTC (rev 953) @@ -4,6 +4,7 @@ obj-$(CONFIG_USB_DUMMY_HCD) += dummy_hcd.o obj-$(CONFIG_USB_NET2280) += net2280.o obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o +obj-$(CONFIG_USB_SX2) += sx2_udc.o obj-$(CONFIG_USB_GOKU) += goku_udc.o obj-$(CONFIG_USB_OMAP) += omap_udc.o obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o Added: linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.c =================================================================== --- linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.c (rev 0) +++ linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.c 2007-04-09 10:54:38 UTC (rev 953) @@ -0,0 +1,434 @@ +/* + * linux/drivers/usb/gadget/sx2_udc.c + * Cypress EZUSB SX2 high speed USB device controller + * + * Copyright (C) 2007 Marek Vasut + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/ioport.h> +#include <linux/types.h> +#include <linux/version.h> +#include <linux/errno.h> +#include <linux/delay.h> +#include <linux/sched.h> +#include <linux/slab.h> +#include <linux/init.h> +#include <linux/timer.h> +#include <linux/list.h> +#include <linux/interrupt.h> +#include <linux/proc_fs.h> +#include <linux/mm.h> +#include <linux/platform_device.h> +#include <linux/dma-mapping.h> + +#include <asm/byteorder.h> +#include <asm/dma.h> +#include <asm/io.h> +#include <asm/irq.h> +#include <asm/system.h> +#include <asm/mach-types.h> +#include <asm/unaligned.h> +#include <asm/hardware.h> + +#include <asm/arch/gpio.h> + +#include <linux/usb_ch9.h> +#include <linux/usb_gadget.h> + +#include <asm/arch/sx2.h> +#include <asm/arch/palmld-gpio.h> + +#include "sx2_udc.h" + +struct sx2_udc_mach_info sx2_mach; + +/* + TESTING STUFF + */ +int sx2_cmd_set_reg(int reg); +int sx2_cmd_write(u8 data); + +int sx2_enum(void) +{ +printk("sx2_mach: %08x\n",sx2_mach.virt_base); +ssleep(10); + /* ENUMERATE WITH BUILTIN DESCRIPTOR */ + /* select register 0x30 - descriptor RAM*/ + sx2_cmd_set_reg(0x30); + /* write descriptor length */ + sx2_cmd_write(0xa0); + sx2_cmd_write(0x00); + + /* write descriptor as described in SX2 docs */ + /* Device Descriptor */ + sx2_cmd_write(18); + sx2_cmd_write(01); + sx2_cmd_write(00); + sx2_cmd_write(02); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(64); + sx2_cmd_write(0x25); + sx2_cmd_write(0x05); + sx2_cmd_write(0xab); + sx2_cmd_write(0xcd); + sx2_cmd_write(0x12); + sx2_cmd_write(0x34); + sx2_cmd_write(01); + sx2_cmd_write(02); + sx2_cmd_write(00); + sx2_cmd_write(01); + /* Device qualifier */ + sx2_cmd_write(10); + sx2_cmd_write(06); + sx2_cmd_write(00); + sx2_cmd_write(02); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(64); + sx2_cmd_write(01); + sx2_cmd_write(00); + + /* High Speed Config */ + sx2_cmd_write(9); + sx2_cmd_write(02); + sx2_cmd_write(46); + sx2_cmd_write(00); + sx2_cmd_write(01); + sx2_cmd_write(01); + sx2_cmd_write(00); + sx2_cmd_write(0x0A); + sx2_cmd_write(50); + /* Interface descr */ + sx2_cmd_write(9); + sx2_cmd_write(04); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(04); + sx2_cmd_write(0xFF); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + sx2_cmd_write(00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x02); + sx2_cmd_write(02); + sx2_cmd_write(0x00); + sx2_cmd_write(0x02); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x04); + sx2_cmd_write(02); + sx2_cmd_write(0x00); + sx2_cmd_write(0x02); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x86); + sx2_cmd_write(02); + sx2_cmd_write(0x00); + sx2_cmd_write(0x02); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x88); + sx2_cmd_write(02); + sx2_cmd_write(0x00); + sx2_cmd_write(0x02); + sx2_cmd_write(0x00); + + /* Full Speed Config */ + sx2_cmd_write(9); + sx2_cmd_write(02); + sx2_cmd_write(46); + sx2_cmd_write(00); + sx2_cmd_write(01); + sx2_cmd_write(01); + sx2_cmd_write(00); + sx2_cmd_write(0x0A); + sx2_cmd_write(50); + /* Interface descr */ + sx2_cmd_write(9); + sx2_cmd_write(04); + sx2_cmd_write(00); + sx2_cmd_write(00); + sx2_cmd_write(04); + sx2_cmd_write(0xFF); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + sx2_cmd_write(00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x02); + sx2_cmd_write(02); + sx2_cmd_write(0x40); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x04); + sx2_cmd_write(02); + sx2_cmd_write(0x40); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x86); + sx2_cmd_write(02); + sx2_cmd_write(0x40); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + /* Endpoint descr */ + sx2_cmd_write(07); + sx2_cmd_write(05); + sx2_cmd_write(0x88); + sx2_cmd_write(02); + sx2_cmd_write(0x40); + sx2_cmd_write(0x00); + sx2_cmd_write(0x00); + + /* String descr 0 */ + sx2_cmd_write(04); + sx2_cmd_write(03); + sx2_cmd_write(0x09); + sx2_cmd_write(0x04); + + /* String descr 1 */ + sx2_cmd_write(16); + sx2_cmd_write(03); + sx2_cmd_write('C'); + sx2_cmd_write(00); + sx2_cmd_write('y'); + sx2_cmd_write(00); + sx2_cmd_write('p'); + sx2_cmd_write(00); + sx2_cmd_write('r'); + sx2_cmd_write(00); + sx2_cmd_write('e'); + sx2_cmd_write(00); + sx2_cmd_write('s'); + sx2_cmd_write(00); + sx2_cmd_write('s'); + sx2_cmd_write(00); + + /* String descr 2 */ + sx2_cmd_write(20); + sx2_cmd_write(03); + sx2_cmd_write('C'); + sx2_cmd_write(00); + sx2_cmd_write('Y'); + sx2_cmd_write(00); + sx2_cmd_write('7'); + sx2_cmd_write(00); + sx2_cmd_write('C'); + sx2_cmd_write(00); + sx2_cmd_write('6'); + sx2_cmd_write(00); + sx2_cmd_write('8'); + sx2_cmd_write(00); + sx2_cmd_write('0'); + sx2_cmd_write(00); + sx2_cmd_write('0'); + sx2_cmd_write(00); + sx2_cmd_write('1'); + sx2_cmd_write(00); + return 0; +} + +u16 sx2_cmd_read(int reg) +{ + u8 data = SX2_CMD_ADDR | SX2_CMD_READ + | (reg & SX2_ADDR_MASK); + + printk("READING 0x%02x\n",reg); + SX2_ADDR_CMD=data; +// while((gpio_get_value(sx2_udc.mach->ready_pin)?1:0)==0) { + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + printk("WAITING FOR IRQ\n"); + }; + printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,SX2_ADDR_FIFO2,SX2_ADDR_FIFO4); + printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,SX2_ADDR_FIFO6,SX2_ADDR_FIFO8); + printk("REG 0x%02x CD 0x%02x\n",reg,SX2_ADDR_CMD); + return 0; +} + +int sx2_cmd_set_reg(int reg) +{ + /* initiate write to addr */ + printk("SETTING 0x%02x\n",(reg | SX2_CMD_ADDR)); + SX2_ADDR_CMD=(reg | SX2_CMD_ADDR); + /* wait for READY line */ +// while((gpio_get_value(sx2_udc.mach->ready_pin)?1:0)==0) { + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + printk("WAITING FOR IRQ\n"); + }; + + return 0; +} + +int sx2_cmd_write(u8 data) +{ + /* prepare data */ + u8 data1 = ((data & 0xf0)>>4); /* Upper nibble */ + u8 data2 = (data & 0x0f); /* Lower nibble */ + + /* initiate write to reg */ + printk("UPPER NIBBLE %02x\n",(data1 | SX2_CMD_WRITE)); + SX2_ADDR_CMD=(data1 | SX2_CMD_WRITE); + /* wait for READY line */ +// while((gpio_get_value(sx2_udc.mach->ready_pin)?1:0)==0) { + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + printk("WAITING FOR IRQ\n"); + }; + + printk("LOWER NIBBLE %02x\n",(data2 | SX2_CMD_WRITE)); + SX2_ADDR_CMD=(data2 | SX2_CMD_WRITE); + /* wait for READY line */ +// while((gpio_get_value(sx2_udc.mach->ready_pin)?1:0)==0) { + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + printk("WAITING FOR IRQ\n"); + }; + + return 0; +} + + + + + +/* + GADGET LEVEL HANDLING STUFF + */ + +static const char driver_name [] = "sx2_udc"; + +int usb_gadget_register_driver(struct usb_gadget_driver *driver) +{ +printk("SX2: usb_gadget_register_driver\n"); +return 0; +} +EXPORT_SYMBOL(usb_gadget_register_driver); + +int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) +{ +printk("SX2: usb_gadget_unregister_driver\n"); +return 0; +} +EXPORT_SYMBOL(usb_gadget_unregister_driver); + + + + + + + + + +/* + HARDWARE LEVEL HANDLING STUFF + */ +static int sx2_udc_probe(struct platform_device *pdev) +{ + static struct sx2_dev *usb; +/* +INIT THE CONTROLLER - POWER UP ETC +*/ + /* FIXME - this cant be static :-E */ + if(!request_mem_region(SX2_ADDR_BASE, 0x10000, "sx2-udc")) + return -EBUSY; + + usb = kmalloc(sizeof(struct sx2_dev), GFP_KERNEL); + if(!usb) + return -ENOMEM; + + memset(usb, 0,sizeof(struct sx2_dev)); + platform_set_drvdata(pdev, usb); + + usb->dev = &(pdev->dev); + usb->mach = pdev->dev.platform_data; + sx2_mach = *(usb->mach); + +/* Now power down and up the chip */ + gpio_set_value(usb->mach->power_pin,0); + udelay(100); + gpio_set_value(usb->mach->power_pin,1); + udelay(500); + sx2_enum(); + printk("SX2: sx2_udc_probe DONE\n"); + return 0; +} + +static int sx2_udc_remove(struct platform_device *pdev) +{ + platform_set_drvdata(pdev, 0); + +printk("SX2: sx2_udc_remove\n"); + return 0; +} + +/*-------------------------------------------------------------------------*/ + +static struct platform_driver udc_driver = { + .probe = sx2_udc_probe, + .remove = __exit_p(sx2_udc_remove), + .suspend = NULL, + .resume = NULL, + .driver = { + .owner = THIS_MODULE, + .name = "sx2-udc", + }, +}; + +static int __init udc_init(void) +{ + return platform_driver_register(&udc_driver); +} +module_init(udc_init); + +static void __exit udc_exit(void) +{ + platform_driver_unregister(&udc_driver); +} +module_exit(udc_exit); + +MODULE_DESCRIPTION("Cypress EZUSB SX2 Peripheral Controller"); +MODULE_AUTHOR("Marek Vasut"); +MODULE_LICENSE("GPL"); + + + + + + + + + + + Added: linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.h =================================================================== --- linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.h (rev 0) +++ linux4palm/linux/trunk/drivers/usb/gadget/sx2_udc.h 2007-04-09 10:54:38 UTC (rev 953) @@ -0,0 +1,170 @@ +/* + * sx2_udc.h + * + * Cypress EZUSB SX2 - CY7C68001 External master register definitions + * + * Author: Marek Vasut <mar...@gm...> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * + * + */ +#ifndef _INCLUDE_SX2_UDC_H_ + +#define _INCLUDE_SX2_UDC_H_ + +/*************************************************** + * SX2 REGISTERS * + ***************************************************/ + +/* General configuration */ +#define SX2_REG_IFCONFIG 0x01 +#define SX2_REG_FLAGSAB 0x02 +#define SX2_REG_FLAGSCD 0x03 +#define SX2_REG_POLAR 0x04 +#define SX2_REG_REVID 0x05 + +/* Endpoint configuration */ +#define SX2_REG_EP2CFG 0x06 +#define SX2_REG_EP4CFG 0x07 +#define SX2_REG_EP6CFG 0x08 +#define SX2_REG_EP8CFG 0x09 +#define SX2_REG_EP2PKTLENH 0x0A +#define SX2_REG_EP2PKTLENL 0x0B +#define SX2_REG_EP4PKTLENH 0x0C +#define SX2_REG_EP4PKTLENL 0x0D +#define SX2_REG_EP6PKTLENH 0x0E +#define SX2_REG_EP6PKTLENL 0x0F +#define SX2_REG_EP8PKTLENH 0x10 +#define SX2_REG_EP8PKTLENL 0x11 +#define SX2_REG_EP2PFH 0x12 +#define SX2_REG_EP2PFL 0x13 +#define SX2_REG_EP4PFH 0x14 +#define SX2_REG_EP4PFL 0x15 +#define SX2_REG_EP6PFH 0x16 +#define SX2_REG_EP6PFL 0x17 +#define SX2_REG_EP8PFH 0x18 +#define SX2_REG_EP8PFL 0x19 +#define SX2_REG_EP2ISOINPKTS 0x1A +#define SX2_REG_EP4ISOINPKTS 0x1B +#define SX2_REG_EP6ISOINPKTS 0x1C +#define SX2_REG_EP8ISOINPKTS 0x1D + +/* Flags */ +#define SX2_REG_EP24FLAGS 0x1E +#define SX2_REG_EP68FLAGS 0x1F + +/* INPKTEND/FLUSH */ +#define SX2_REG_INPKTEND 0x20 +#define SX2_REG_FLUSH 0x20 + +/* USB Configuration */ +#define SX2_REG_USBFRAMEH 0x2A +#define SX2_REG_USBFRAMEL 0x2B +#define SX2_REG_MICROFRAME 0x2C +#define SX2_REG_FNADDR 0x2D + +/* Interrupts */ +#define SX2_REG_INTENABLE 0x2E + +/* Descriptor */ +#define SX2_REG_DESC 0x30 + +/* Endpoint 0 */ +#define SX2_REG_EP0BUF 0x31 +#define SX2_REG_SETUP 0x32 +#define SX2_REG_EP0BC 0x33 + +/* Un-indexed Register control */ +#define SX2_REG_UIRC0 0x3A +#define SX2_REG_UIRC1 0x3B +#define SX2_REG_UIRC2 0x3C + +/* Un-indexed Registers in XDATA space */ +#define SX2_REG_FIFOPINPOLAR 0xE609 +#define SX2_REG_TOGCTL 0xE683 +#define SX2_REG_CT1 0xE6FB + +/*************************************************** + * SX2 ADDRESS * + ***************************************************/ +#define SX2_ADDR_BASE 0xf0000000 + +#define SX2_ADDR_IF(x) (*((volatile u8 *)x)) + +/* We have 16bit bus of the chip connected to 32 bit bus of CPU */ + +#define SX2_ADDR_FIFO2 SX2_ADDR_IF (SX2_ADDR_BASE + 0x00) +#define SX2_ADDR_FIFO4 SX2_ADDR_IF (SX2_ADDR_BASE + 0x01) +#define SX2_ADDR_FIFO6 SX2_ADDR_IF (SX2_ADDR_BASE + 0x04) +#define SX2_ADDR_FIFO8 SX2_ADDR_IF (SX2_ADDR_BASE + 0x05) +#define SX2_ADDR_CMD SX2_ADDR_IF (SX2_ADDR_BASE + 0x08) +#define SX2_ADDR_RESERVED1 SX2_ADDR_IF (SX2_ADDR_BASE + 0x09) +#define SX2_ADDR_RESERVED2 SX2_ADDR_IF (SX2_ADDR_BASE + 0x0C) +#define SX2_ADDR_RESERVED3 SX2_ADDR_IF (SX2_ADDR_BASE + 0x0D) + +/*************************************************** + * SX2 COMMANDS * + ***************************************************/ + +#define SX2_CMD_WRITE (0x00) +#define SX2_CMD_READ (0x40) +#define SX2_CMD_ADDR (0x80) + +/*************************************************** + * SX2 MISC * + ***************************************************/ + +#define SX2_ADDR_MASK (0x3f) + +struct sx2_dev { + struct device *dev; + struct sx2_udc_mach_info *mach; + spinlock_t lock; + /* + * EP0 write thread. + */ + void (*wrint)(struct sx2_dev *); + struct usb_buf *wrbuf; + unsigned char *wrptr; + unsigned int wrlen; + + /* + * EP0 statistics. + */ + unsigned long ep0_wr_fifo_errs; + unsigned long ep0_wr_bytes; + unsigned long ep0_wr_packets; + unsigned long ep0_rd_fifo_errs; + unsigned long ep0_rd_bytes; + unsigned long ep0_rd_packets; + unsigned long ep0_stall_sent; + unsigned long ep0_early_irqs; + + /* + * EP1 .. n + */ + struct { + unsigned int buflen; + void *pktcpu; + unsigned int pktlen; + unsigned int pktrem; + + void *cb_data; + void (*cb_func)(void *data, int flag, int size); + + u32 udccs; + unsigned int maxpktsize; + unsigned int configured; + unsigned int host_halt; + unsigned long fifo_errs; + unsigned long bytes; + unsigned long packets; + } ep[4]; +}; + +#endif Deleted: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-06 22:44:13 UTC (rev 952) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-09 10:54:38 UTC (rev 953) @@ -1,127 +0,0 @@ -/* - * palmld-usb2.h - * - * Cypress EZUSB SX2 - CY7C68001 External master register definitions - * SX2 is an USB2 controller in PalmOne LifeDrive Handheld Computer - * - * Author: Marek Vasut <mar...@gm...> - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * - * - */ -#ifndef _INCLUDE_PALMLD_USB2_H_ - -#define _INCLUDE_PALMLD_USB2_H_ - -#include <asm/arch/palmld-gpio.h> - -/*************************************************** - * SX2 REGISTERS * - ***************************************************/ - -/* General configuration */ -#define PALMLD_USB2_REG_IFCONFIG 0x01 -#define PALMLD_USB2_REG_FLAGSAB 0x02 -#define PALMLD_USB2_REG_FLAGSCD 0x03 -#define PALMLD_USB2_REG_POLAR 0x04 -#define PALMLD_USB2_REG_REVID 0x05 - -/* Endpoint configuration */ -#define PALMLD_USB2_REG_EP2CFG 0x06 -#define PALMLD_USB2_REG_EP4CFG 0x07 -#define PALMLD_USB2_REG_EP6CFG 0x08 -#define PALMLD_USB2_REG_EP8CFG 0x09 -#define PALMLD_USB2_REG_EP2PKTLENH 0x0A -#define PALMLD_USB2_REG_EP2PKTLENL 0x0B -#define PALMLD_USB2_REG_EP4PKTLENH 0x0C -#define PALMLD_USB2_REG_EP4PKTLENL 0x0D -#define PALMLD_USB2_REG_EP6PKTLENH 0x0E -#define PALMLD_USB2_REG_EP6PKTLENL 0x0F -#define PALMLD_USB2_REG_EP8PKTLENH 0x10 -#define PALMLD_USB2_REG_EP8PKTLENL 0x11 -#define PALMLD_USB2_REG_EP2PFH 0x12 -#define PALMLD_USB2_REG_EP2PFL 0x13 -#define PALMLD_USB2_REG_EP4PFH 0x14 -#define PALMLD_USB2_REG_EP4PFL 0x15 -#define PALMLD_USB2_REG_EP6PFH 0x16 -#define PALMLD_USB2_REG_EP6PFL 0x17 -#define PALMLD_USB2_REG_EP8PFH 0x18 -#define PALMLD_USB2_REG_EP8PFL 0x19 -#define PALMLD_USB2_REG_EP2ISOINPKTS 0x1A -#define PALMLD_USB2_REG_EP4ISOINPKTS 0x1B -#define PALMLD_USB2_REG_EP6ISOINPKTS 0x1C -#define PALMLD_USB2_REG_EP8ISOINPKTS 0x1D - -/* Flags */ -#define PALMLD_USB2_REG_EP24FLAGS 0x1E -#define PALMLD_USB2_REG_EP68FLAGS 0x1F - -/* INPKTEND/FLUSH */ -#define PALMLD_USB2_REG_INPKTEND 0x20 -#define PALMLD_USB2_REG_FLUSH 0x20 - -/* USB Configuration */ -#define PALMLD_USB2_REG_USBFRAMEH 0x2A -#define PALMLD_USB2_REG_USBFRAMEL 0x2B -#define PALMLD_USB2_REG_MICROFRAME 0x2C -#define PALMLD_USB2_REG_FNADDR 0x2D - -/* Interrupts */ -#define PALMLD_USB2_REG_INTENABLE 0x2E - -/* Descriptor */ -#define PALMLD_USB2_REG_DESC 0x30 - -/* Endpoint 0 */ -#define PALMLD_USB2_REG_EP0BUF 0x31 -#define PALMLD_USB2_REG_SETUP 0x32 -#define PALMLD_USB2_REG_EP0BC 0x33 - -/* Un-indexed Register control */ -#define PALMLD_USB2_REG_UIRC0 0x3A -#define PALMLD_USB2_REG_UIRC1 0x3B -#define PALMLD_USB2_REG_UIRC2 0x3C - -/* Un-indexed Registers in XDATA space */ -#define PALMLD_USB2_REG_FIFOPINPOLAR 0xE609 -#define PALMLD_USB2_REG_TOGCTL 0xE683 - -/*************************************************** - * SX2 ADDRESS * - ***************************************************/ - -#define PALMLD_USB2_ADDR_BASE PALMLD_USB_VIRT - -#define PALMLD_USB2_ADDR_IF(x) (*((volatile u8 *)x)) - -/* We have 16bit bus of the chip connected to 32 bit bus of CPU */ - -#define PALMLD_USB2_ADDR_FIFO2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x0) -#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x1) -#define PALMLD_USB2_ADDR_FIFO6 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x4) -#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x5) -#define PALMLD_USB2_ADDR_CMD PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x8) -#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x9) -#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xc) -#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xd) - -/*************************************************** - * SX2 COMMANDS * - ***************************************************/ - -#define PALMLD_USB2_CMD_WRITE (0x00) -#define PALMLD_USB2_CMD_READ (0x40) -#define PALMLD_USB2_CMD_ADDR (0x80) - -/*************************************************** - * SX2 MISC * - ***************************************************/ - -#define PALMLD_USB2_ADDR_MASK (0x3f) - -#endif Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/sx2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/sx2.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/sx2.h 2007-04-09 10:54:38 UTC (rev 953) @@ -0,0 +1,21 @@ +/* + * linux/include/asm-arm/arch-pxa/sx2.h + * + * This supports machine-specific differences in how the Cypress SX2 + * USB Device Controller (UDC) is wired. + * + */ + +struct sx2_udc_mach_info { + u32 virt_base; + + int ready_pin; + int int_pin; + int reset_pin; + int power_pin; + + int sloe_pin; + int slrd_pin; + int slwr_pin; +}; + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-04-19 18:09:09
|
Revision: 958 http://svn.sourceforge.net/hackndev/?rev=958&view=rev Author: marex_z71 Date: 2007-04-19 11:09:06 -0700 (Thu, 19 Apr 2007) Log Message: ----------- PalmTC: Update to 2.6.20 ... most of code updated, ptc_ucb1400 still broken Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc_keyboard.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.c linux4palm/linux/trunk/drivers/usb/gadget/pxa2xx_udc.c Added Paths: ----------- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/ptc_ucb1400.h Removed Paths: ------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc-gpio.h linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.h Deleted: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc-gpio.h =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc-gpio.h 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc-gpio.h 2007-04-19 18:09:06 UTC (rev 958) @@ -1,26 +0,0 @@ -/* - * palmtc-gpio.h - * - * Authors: Holger Bocklet <bit...@gm...> - * - */ - -#ifndef _PALMTC_GPIO_H_ -#define _PALMTC_GPIO_H_ - -#include <asm/arch/pxa-regs.h> - -/* Palm Tungsten C GPIOs */ -#define GPIO_NR_PALMTC_EARPHONE_DETECT 2 -#define GPIO_NR_PALMLD_USB_DETECT 4 -#define GPIO_NR_PALMLD_POWER_DETECT 5 -#define GPIO_NR_PALMTC_HOTSYNC_BUTTON 7 -#define GPIO_NR_PALMTC_SD_DETECT 12 // low->high wenn out, high->low when inserted -#define GPIO_NR_PALMLD_BL_POWER 16 - -//#define GPIO_NR_PALMLD_STD_RXD 46 /* IRDA */ -//#define GPIO_NR_PALMLD_STD_TXD 47 - -#define IRQ_GPIO_PALMTC_SD_DETECT IRQ_GPIO(GPIO_NR_PALMTC_SD_DETECT) - -#endif /* _PALMTC_GPIO_H_ */ Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc.c 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc.c 2007-04-19 18:09:06 UTC (rev 958) @@ -18,14 +18,15 @@ #include <linux/device.h> #include <linux/platform_device.h> #include <linux/fb.h> +#include <linux/irq.h> #include <asm/arch/pxa-dmabounce.h> #include <asm/arch/pxafb.h> #include <asm/arch/pxa-regs.h> #include <asm/arch/pxapwm-bl.h> +#include <asm/arch/palmtc-gpio.h> #include "../generic.h" -#include "palmtc-gpio.h" #define DEBUG @@ -40,28 +41,36 @@ CKEN &= ~CKEN1_PWM1; } -static struct pxafb_mach_info palmtclcd __initdata = { - .pixclock = 0, - .xres = 320, - .yres = 320, - .bpp = 16, - .hsync_len = 4, - .left_margin = 30, - .right_margin = 7, - .vsync_len = 4, - .upper_margin = 6, - .lower_margin = 7, - .sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, +static struct pxafb_mode_info palmtc_lcd_modes[] = { +{ + /* pixclock is set by lccr3 below */ + .pixclock = 0, + .xres = 320, + .yres = 320, + .bpp = 16, + .hsync_len = 4, + .vsync_len = 4, - .lccr0 = 0x07B008F9, - .lccr3 = 0x04700004, + /* fixme: these are the margins PalmOS has set, + * they seem to work but could be better. + */ + .left_margin = 30, + .right_margin = 7, + .upper_margin = 6, + .lower_margin = 7, +}, +}; +static struct pxafb_mach_info palmtc_lcd_screen = { + .modes = palmtc_lcd_modes, + .num_modes = ARRAY_SIZE(palmtc_lcd_modes), + .lccr0 = 0x07B008F9, + .lccr3 = 0x04700004, + .pxafb_backlight_power = palmtc_backlight_power, }; - - -static int palmtc_mci_init(struct device *dev, irqreturn_t (*palmtc_detect_int)(int, void *, struct pt_regs *), void *data) +static int palmtc_mci_init(struct device *dev, irqreturn_t (*palmtc_detect_int)(int, void *), void *data) { int err; @@ -144,7 +153,7 @@ static void __init palmtc_init(void) { - set_pxa_fb_info(&palmtclcd); + set_pxa_fb_info( &palmtc_lcd_screen ); GCR &= ~GCR_PRIRDY_IEN; pxa_set_mci_info( &palmtc_mci_platform_data ); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc_keyboard.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc_keyboard.c 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/palmtc_keyboard.c 2007-04-19 18:09:06 UTC (rev 958) @@ -20,6 +20,7 @@ #include <linux/delay.h> #include <linux/reboot.h> #include <linux/sched.h> +#include <linux/irq.h> #include <asm/mach/arch.h> #include <asm/mach-types.h> @@ -153,13 +154,13 @@ static spinlock_t kbd_lock = SPIN_LOCK_UNLOCKED; -static irqreturn_t palmtc_kbd_irq_handler(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t palmtc_kbd_irq_handler(int irq, void *dev_id) { queue_work(palmtc_kbd_workqueue, &palmtc_kbd_task); return IRQ_HANDLED; } -static void palmtc_kbd_queuework(void *data) +static void palmtc_kbd_queuework(struct work_struct *data) { unsigned long tdiff_msec, flags; int gpio, row, col; @@ -344,7 +345,7 @@ input_register_device(keyboard_dev); palmtc_kbd_workqueue = create_workqueue("palmtckbdw"); - INIT_WORK(&palmtc_kbd_task, palmtc_kbd_queuework, NULL); + INIT_WORK(&palmtc_kbd_task, palmtc_kbd_queuework); #ifdef USE_RELEASE_TIMER init_timer (&key_release_timer); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.c 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.c 2007-04-19 18:09:06 UTC (rev 958) @@ -23,7 +23,6 @@ #include <linux/jiffies.h> #include <linux/moduleparam.h> #include <linux/wait.h> -#include <linux/config.h> #include <linux/errno.h> #include <linux/kthread.h> #include <linux/workqueue.h> @@ -32,19 +31,19 @@ #include <linux/ctype.h> #include <linux/time.h> #include <linux/mutex.h> +#include <linux/freezer.h> #include <asm/delay.h> #include <asm/arch/hardware.h> #include <asm/arch/pxa-regs.h> #include <asm/arch/irqs.h> +#include <asm/arch/ptc_ucb1400.h> #include <asm/apm.h> #include <sound/driver.h> #include <sound/core.h> #include <sound/ac97_codec.h> -#include "ptc_ucb1400.h" - #define PALMTC_UCB_DEBUG #ifdef PALMTC_UCB_DEBUG @@ -59,8 +58,8 @@ struct ucb1400 { - struct device *dev; - ac97_t *ac97; + struct device *dev; + ac97_t *ac97; struct input_dev *idev; struct task_struct *thread; //wait_queue_head_t pen_irq_wait; @@ -531,7 +530,7 @@ } // ISR for ac97, shared with pxa2xx-ac97, and later with ucb1400-gpio and ucb1400-adc -static irqreturn_t ucb1400_irq(int irqnr, void *devid, struct pt_regs *regs) +static irqreturn_t ucb1400_irq(int irqnr, void *devid) { u32 status; struct ucb1400 *ucb = (struct ucb1400 *) devid; @@ -549,7 +548,7 @@ } -static void palmtc_ucb1400_irq_queuework(void *data) +static void palmtc_ucb1400_irq_queuework(struct work_struct *data) { struct ucb1400 *ucb = (struct ucb1400 *) data; u16 val,val1,val2; @@ -693,7 +692,7 @@ input_set_abs_params(ucb->idev, ABS_PRESSURE, UCB_TS_PRESSURE_MIN, UCB_TS_PRESSURE_MAX, 1, 1); ucb->idev->name = "Palm Tungsten C touchscreen (ucb1400)"; - ucb->idev->dev = dev; +/* ucb->idev->dev = dev; */ input_register_device(ucb->idev); // clear ucb1400-ints if there are @@ -726,7 +725,7 @@ } // init workqueue for irq-handling ucb->palmtc_ucb1400_workqueue = create_workqueue("kpalmtcucbw"); - INIT_WORK(&ucb->palmtc_ucb1400_work, palmtc_ucb1400_irq_queuework, ucb); + INIT_WORK(&ucb->palmtc_ucb1400_work, palmtc_ucb1400_irq_queuework); //adc val=ucb1400_reg_read(ucb, UCB_CSR2); Deleted: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.h =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.h 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtc/ptc_ucb1400.h 2007-04-19 18:09:06 UTC (rev 958) @@ -1,122 +0,0 @@ -/* - * linux/drivers/mfd/ucb1400.h - * - * Copyright (C) 2001 Russell King, All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License. - */ - -/* ucb1400 aclink register mappings: */ - -#define UCB_IO_DATA 0x5a -#define UCB_IO_DIR 0x5c -#define UCB_IE_RIS 0x5e -#define UCB_IE_FAL 0x60 -#define UCB_IE_STATUS 0x62 -#define UCB_IE_CLEAR 0x62 -#define UCB_TS_CR 0x64 -#define UCB_ADC_CR 0x66 -#define UCB_ADC_DATA 0x68 -#define UCB_CSR1 0x6a -#define UCB_CSR2 0x6c -#define UCB_IE_EXTRA 0x70 - -#define UCB_CS_GPIO_AC97_INT (1 << 2) - -#define UCB_ADC_DAT(x) ((x) & 0x3ff) - -#define UCB_IO_0 (1 << 0) -#define UCB_IO_1 (1 << 1) -#define UCB_IO_2 (1 << 2) -#define UCB_IO_3 (1 << 3) -#define UCB_IO_4 (1 << 4) -#define UCB_IO_5 (1 << 5) -#define UCB_IO_6 (1 << 6) -#define UCB_IO_7 (1 << 7) -#define UCB_IO_8 (1 << 8) -#define UCB_IO_9 (1 << 9) - -#define UCB_IE_ADC (1 << 11) -#define UCB_IE_TSPX (1 << 12) -#define UCB_IE_TSMX (1 << 13) -#define UCB_IE_TCLIP (1 << 14) -#define UCB_IE_ACLIP (1 << 15) -#define UCB_IE_IO (0x3FF) - -#define UCB_TC_B_VOICE_ENA (1 << 3) -#define UCB_TC_B_CLIP (1 << 4) -#define UCB_TC_B_ATT (1 << 6) -#define UCB_TC_B_SIDE_ENA (1 << 11) -#define UCB_TC_B_MUTE (1 << 13) -#define UCB_TC_B_IN_ENA (1 << 14) -#define UCB_TC_B_OUT_ENA (1 << 15) - -#define UCB_AC_B_LOOP (1 << 8) -#define UCB_AC_B_MUTE (1 << 13) -#define UCB_AC_B_IN_ENA (1 << 14) -#define UCB_AC_B_OUT_ENA (1 << 15) - -#define UCB_TS_CR_TSMX_POW (1 << 0) -#define UCB_TS_CR_TSPX_POW (1 << 1) -#define UCB_TS_CR_TSMY_POW (1 << 2) -#define UCB_TS_CR_TSPY_POW (1 << 3) -#define UCB_TS_CR_TSMX_GND (1 << 4) -#define UCB_TS_CR_TSPX_GND (1 << 5) -#define UCB_TS_CR_TSMY_GND (1 << 6) -#define UCB_TS_CR_TSPY_GND (1 << 7) -#define UCB_TS_CR_MODE_INT (0 << 8) -#define UCB_TS_CR_MODE_PRES (1 << 8) -#define UCB_TS_CR_MODE_POS (2 << 8) -#define UCB_TS_CR_BIAS_ENA (1 << 11) -#define UCB_TS_CR_TSPX (1 << 12) -#define UCB_TS_CR_TSMX (1 << 13) - -#define UCB_ADC_SYNC_ENA (1 << 0) -#define UCB_ADC_VREFBYP_CON (1 << 1) -#define UCB_ADC_INP_TSPX (0 << 2) -#define UCB_ADC_INP_TSMX (1 << 2) -#define UCB_ADC_INP_TSPY (2 << 2) -#define UCB_ADC_INP_TSMY (3 << 2) -#define UCB_ADC_INP_AD0 (4 << 2) -#define UCB_ADC_INP_AD1 (5 << 2) -#define UCB_ADC_INP_AD2 (6 << 2) -#define UCB_ADC_INP_AD3 (7 << 2) -#define UCB_ADC_EXT_REF (1 << 5) -#define UCB_ADC_START (1 << 7) -#define UCB_ADC_ENA (1 << 15) - -#define UCB_ADC_FILTER_ENA (1 << 12) - -#define UCB_ADC_DATA_MASK 0x3ff -#define UCB_ADC_DATA_VALID (1 << 15) - -#define UCB_ID_1400 0x4304 - -#define UCB_MODE 0x0d -#define UCB_MODE_DYN_VFLAG_ENA (1 << 12) -#define UCB_MODE_AUD_OFF_CAN (1 << 13) - -#define UCB_NOSYNC 0 -#define UCB_SYNC 1 - -#define UCB_RISING (1 << 0) -#define UCB_FALLING (1 << 1) - - -// constants on palm tc -#define UCB_TS_X_MIN 100 -#define UCB_TS_X_MAX 870 -#define UCB_TS_Y_MIN 270 -#define UCB_TS_Y_MAX 970 -#define UCB_TS_PRESSURE_MIN 0 -#define UCB_TS_PRESSURE_MAX 740 -#define UCB_TS_FUZZ 15 - -#define UCB_BATT_HIGH 560 // adc "ticks" not mV ! -#define UCB_BATT_LOW 490 -#define UCB_BATT_CRITICAL 480 - -#define UCB_BATT_DURATION 600 // battery duration in minutes -#define UCB_ADC_TIMEOUT 50 Modified: linux4palm/linux/trunk/drivers/usb/gadget/pxa2xx_udc.c =================================================================== --- linux4palm/linux/trunk/drivers/usb/gadget/pxa2xx_udc.c 2007-04-18 10:12:50 UTC (rev 957) +++ linux4palm/linux/trunk/drivers/usb/gadget/pxa2xx_udc.c 2007-04-19 18:09:06 UTC (rev 958) @@ -2525,7 +2525,7 @@ /* * probe - binds to the platform device */ -static int __init pxa2xx_udc_probe(struct platform_device *pdev) +static int pxa2xx_udc_probe(struct platform_device *pdev) { struct pxa2xx_udc *dev = &memory; int retval, out_dma = 1, vbus_irq; @@ -2677,7 +2677,7 @@ pullup_off(); } -static int __exit pxa2xx_udc_remove(struct platform_device *pdev) +static int pxa2xx_udc_remove(struct platform_device *pdev) { struct pxa2xx_udc *dev = platform_get_drvdata(pdev); Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h 2007-04-19 18:09:06 UTC (rev 958) @@ -0,0 +1,26 @@ +/* + * palmtc-gpio.h + * + * Authors: Holger Bocklet <bit...@gm...> + * + */ + +#ifndef _PALMTC_GPIO_H_ +#define _PALMTC_GPIO_H_ + +#include <asm/arch/pxa-regs.h> + +/* Palm Tungsten C GPIOs */ +#define GPIO_NR_PALMTC_EARPHONE_DETECT 2 +#define GPIO_NR_PALMLD_USB_DETECT 4 +#define GPIO_NR_PALMLD_POWER_DETECT 5 +#define GPIO_NR_PALMTC_HOTSYNC_BUTTON 7 +#define GPIO_NR_PALMTC_SD_DETECT 12 // low->high when out, high->low when inserted +#define GPIO_NR_PALMLD_BL_POWER 16 + +//#define GPIO_NR_PALMLD_STD_RXD 46 /* IRDA */ +//#define GPIO_NR_PALMLD_STD_TXD 47 + +#define IRQ_GPIO_PALMTC_SD_DETECT IRQ_GPIO(GPIO_NR_PALMTC_SD_DETECT) + +#endif /* _PALMTC_GPIO_H_ */ Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/ptc_ucb1400.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/ptc_ucb1400.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/ptc_ucb1400.h 2007-04-19 18:09:06 UTC (rev 958) @@ -0,0 +1,122 @@ +/* + * linux/drivers/mfd/ucb1400.h + * + * Copyright (C) 2001 Russell King, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License. + */ + +/* ucb1400 aclink register mappings: */ + +#define UCB_IO_DATA 0x5a +#define UCB_IO_DIR 0x5c +#define UCB_IE_RIS 0x5e +#define UCB_IE_FAL 0x60 +#define UCB_IE_STATUS 0x62 +#define UCB_IE_CLEAR 0x62 +#define UCB_TS_CR 0x64 +#define UCB_ADC_CR 0x66 +#define UCB_ADC_DATA 0x68 +#define UCB_CSR1 0x6a +#define UCB_CSR2 0x6c +#define UCB_IE_EXTRA 0x70 + +#define UCB_CS_GPIO_AC97_INT (1 << 2) + +#define UCB_ADC_DAT(x) ((x) & 0x3ff) + +#define UCB_IO_0 (1 << 0) +#define UCB_IO_1 (1 << 1) +#define UCB_IO_2 (1 << 2) +#define UCB_IO_3 (1 << 3) +#define UCB_IO_4 (1 << 4) +#define UCB_IO_5 (1 << 5) +#define UCB_IO_6 (1 << 6) +#define UCB_IO_7 (1 << 7) +#define UCB_IO_8 (1 << 8) +#define UCB_IO_9 (1 << 9) + +#define UCB_IE_ADC (1 << 11) +#define UCB_IE_TSPX (1 << 12) +#define UCB_IE_TSMX (1 << 13) +#define UCB_IE_TCLIP (1 << 14) +#define UCB_IE_ACLIP (1 << 15) +#define UCB_IE_IO (0x3FF) + +#define UCB_TC_B_VOICE_ENA (1 << 3) +#define UCB_TC_B_CLIP (1 << 4) +#define UCB_TC_B_ATT (1 << 6) +#define UCB_TC_B_SIDE_ENA (1 << 11) +#define UCB_TC_B_MUTE (1 << 13) +#define UCB_TC_B_IN_ENA (1 << 14) +#define UCB_TC_B_OUT_ENA (1 << 15) + +#define UCB_AC_B_LOOP (1 << 8) +#define UCB_AC_B_MUTE (1 << 13) +#define UCB_AC_B_IN_ENA (1 << 14) +#define UCB_AC_B_OUT_ENA (1 << 15) + +#define UCB_TS_CR_TSMX_POW (1 << 0) +#define UCB_TS_CR_TSPX_POW (1 << 1) +#define UCB_TS_CR_TSMY_POW (1 << 2) +#define UCB_TS_CR_TSPY_POW (1 << 3) +#define UCB_TS_CR_TSMX_GND (1 << 4) +#define UCB_TS_CR_TSPX_GND (1 << 5) +#define UCB_TS_CR_TSMY_GND (1 << 6) +#define UCB_TS_CR_TSPY_GND (1 << 7) +#define UCB_TS_CR_MODE_INT (0 << 8) +#define UCB_TS_CR_MODE_PRES (1 << 8) +#define UCB_TS_CR_MODE_POS (2 << 8) +#define UCB_TS_CR_BIAS_ENA (1 << 11) +#define UCB_TS_CR_TSPX (1 << 12) +#define UCB_TS_CR_TSMX (1 << 13) + +#define UCB_ADC_SYNC_ENA (1 << 0) +#define UCB_ADC_VREFBYP_CON (1 << 1) +#define UCB_ADC_INP_TSPX (0 << 2) +#define UCB_ADC_INP_TSMX (1 << 2) +#define UCB_ADC_INP_TSPY (2 << 2) +#define UCB_ADC_INP_TSMY (3 << 2) +#define UCB_ADC_INP_AD0 (4 << 2) +#define UCB_ADC_INP_AD1 (5 << 2) +#define UCB_ADC_INP_AD2 (6 << 2) +#define UCB_ADC_INP_AD3 (7 << 2) +#define UCB_ADC_EXT_REF (1 << 5) +#define UCB_ADC_START (1 << 7) +#define UCB_ADC_ENA (1 << 15) + +#define UCB_ADC_FILTER_ENA (1 << 12) + +#define UCB_ADC_DATA_MASK 0x3ff +#define UCB_ADC_DATA_VALID (1 << 15) + +#define UCB_ID_1400 0x4304 + +#define UCB_MODE 0x0d +#define UCB_MODE_DYN_VFLAG_ENA (1 << 12) +#define UCB_MODE_AUD_OFF_CAN (1 << 13) + +#define UCB_NOSYNC 0 +#define UCB_SYNC 1 + +#define UCB_RISING (1 << 0) +#define UCB_FALLING (1 << 1) + + +// constants on palm tc +#define UCB_TS_X_MIN 100 +#define UCB_TS_X_MAX 870 +#define UCB_TS_Y_MIN 270 +#define UCB_TS_Y_MAX 970 +#define UCB_TS_PRESSURE_MIN 0 +#define UCB_TS_PRESSURE_MAX 740 +#define UCB_TS_FUZZ 15 + +#define UCB_BATT_HIGH 560 // adc "ticks" not mV ! +#define UCB_BATT_LOW 490 +#define UCB_BATT_CRITICAL 480 + +#define UCB_BATT_DURATION 600 // battery duration in minutes +#define UCB_ADC_TIMEOUT 50 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pet...@us...> - 2007-05-01 14:43:11
|
Revision: 963 http://svn.sourceforge.net/hackndev/?rev=963&view=rev Author: petrblaha Date: 2007-05-01 07:43:07 -0700 (Tue, 01 May 2007) Log Message: ----------- Modified Paths: -------------- linux4palm/linux/trunk/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Kconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c linux4palm/linux/trunk/arch/arm/mach-pxa/pxa27x.c linux4palm/linux/trunk/drivers/leds/leds-palmt650.c linux4palm/linux/trunk/drivers/misc/Kconfig linux4palm/linux/trunk/drivers/misc/Makefile linux4palm/linux/trunk/drivers/video/logo/Makefile linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt650-gpio.h Added Paths: ----------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650_pm.c Modified: linux4palm/linux/trunk/Makefile =================================================================== --- linux4palm/linux/trunk/Makefile 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/Makefile 2007-05-01 14:43:07 UTC (rev 963) @@ -183,7 +183,7 @@ # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile ARCH := arm -CROSS_COMPILE ?= arm-softfloat-linux-gnu- +CROSS_COMPILE ?= arm-none-eabi- # Architecture as present in compile.h UTS_MACHINE := $(ARCH) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Kconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Kconfig 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Kconfig 2007-05-01 14:43:07 UTC (rev 963) @@ -6,3 +6,9 @@ Palm Treo 650. Currently there is only basic support for this PDA. +config MACH_XSCALE_PALMTREO650_PM + tristate "Palm Treo 650 Power Management support" + depends on MACH_XSCALE_PALMTREO650 + default y if MACH_XSCALE_PALMTREO650 + help + Enables support for suspend/resume the PalmOne treo 650. Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Makefile =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Makefile 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/Makefile 2007-05-01 14:43:07 UTC (rev 963) @@ -2,5 +2,5 @@ # Makefile for Palm Treo 650 support # -obj-$(CONFIG_MACH_XSCALE_PALMTREO650) += palmt650.o - +obj-$(CONFIG_MACH_XSCALE_PALMTREO650) += palmt650.o +obj-$(CONFIG_MACH_XSCALE_PALMTREO650_PM) += palmt650_pm.o Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c 2007-05-01 14:43:07 UTC (rev 963) @@ -96,9 +96,7 @@ static void palmt650_irda_transceiver_mode(struct device *dev, int mode) { -#if 0 - SET_PALMT650_GPIO(IRDA_SD, mode & IR_OFF); -#endif +/* SET_PALMT650_GPIO(IRDA_SD, mode & IR_OFF); */ } static struct pxaficp_platform_data palmt650_ficp_platform_data = { @@ -109,7 +107,6 @@ /********************************************************* * LEDs *********************************************************/ - static struct platform_device palmt650_led = { .name = "palmt650-led", .id = -1, @@ -188,68 +185,68 @@ .keycodes = { { /* row 0 */ KEY_O, // "O" - KEY_LEFT, // "5-Way Left" }, - KEY_RIGHTSHIFT, // "Alternate" }, + KEY_DOWN, // "5-Way Left" }, + -1, // "Alternate" }, KEY_L, // "L" }, KEY_A, // "A" }, KEY_Q, // "Q" }, - KEY_RIGHTCTRL, // "Right Shift" }, + KEY_RIGHTCTRL, // "Right Shift" }, }, { /* row 1 */ KEY_P, // "P" }, - KEY_RIGHT, // "5-Way Right" }, + KEY_UP, // "5-Way Right" }, KEY_LEFTSHIFT, //"Left Shift" }, KEY_Z, // "Z" }, KEY_S, // "S" }, KEY_W, // "W" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 2 */ - KEY_F1, // "Phone" }, - KEY_UP, // "5-Way Up" }, + -1, // "Phone" }, + KEY_LEFT, // "5-Way Up" }, KEY_0, // "0" }, KEY_X, // "X" }, KEY_D, // "D" }, KEY_E, // "E" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 3 */ - KEY_F2, // "Calendar" }, - KEY_DOWN, // "5-Way Down" }, - KEY_SPACE, // "Space" }, + KEY_F10, // "Calendar" }, + KEY_RIGHT, // "5-Way Down" }, + KEY_SPACE, // "Space" }, KEY_C, // "C" }, KEY_F, // "F" }, KEY_R, // "R" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 4 */ - KEY_F3, // "Mail" }, - KEY_SELECT, // "5-Way Center" }, - KEY_HOME, // "Unused" }, + KEY_F12, // "Mail" }, + KEY_ENTER, // "5-Way Center" }, + KEY_F9, // "HOME" }, KEY_V, // "V" }, KEY_G, // "G" }, KEY_T, // "T" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 5 */ - KEY_F4, // "Off" }, + -1, // "Off" }, KEY_VOLUMEUP, // "Volume Up" }, - KEY_DOT, // "." }, + KEY_DOT, // "." }, KEY_B, // "B" }, KEY_H, // "H" }, KEY_Y, // "Y" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 6 */ - KEY_F5, // "Mute" }, + KEY_F11, // "Mute" }, KEY_VOLUMEDOWN, // "Volume Down" }, - KEY_KPENTER, // "Return" }, + KEY_ENTER, // "Return" }, KEY_N, // "N" }, KEY_J, // "J" }, KEY_U, // "U" }, - -1, // "Unused" }, + -1, // "Unused" }, }, { /* row 7 */ KEY_RIGHTALT, // "Alt" }, - KEY_MENU, // "Unused" }, - KEY_BACKSPACE, // "P" }, + -1, // "Unused" }, + KEY_BACKSPACE, // "P" }, KEY_M, // "M" KEY_K, // "K" KEY_I, // "I" - -1, // "Unused" }, + -1, // "Unused" }, }, }, @@ -282,7 +279,9 @@ static struct platform_device *devices[] __initdata = { - &palmt650_kbd, &palmt650_ac97, &palmt650_bl, + &palmt650_kbd, + &palmt650_ac97, + &palmt650_bl, &palmt650_led, }; @@ -344,8 +343,8 @@ pxa_set_udc_info( &palmt650_udc_mach_info ); platform_add_devices(devices, ARRAY_SIZE(devices)); -#if 0 /* configure power switch to resume from standby */ +#if 0 PWER |= PWER_GPIO12; PRER |= PWER_GPIO12; #endif @@ -360,4 +359,3 @@ .timer = &pxa_timer, .init_machine = palmt650_init, MACHINE_END - Added: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650_pm.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650_pm.c (rev 0) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650_pm.c 2007-05-01 14:43:07 UTC (rev 963) @@ -0,0 +1,134 @@ +/************************************************************************ + * PalmOne Zire72 suspend/resume support * + * * + * Authors: Jan Herman <2h...@se...> * + * Sergey Lapin <sla...@gm...> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License version 2 as * + * published by the Free Software Foundation. * + * * + ************************************************************************/ + +#include <linux/kernel.h> +#include <linux/device.h> +#include <linux/pm.h> +#include <linux/fb.h> +#include <linux/platform_device.h> +#include <asm/mach-types.h> +#include <asm/hardware.h> + +#include <asm/arch/pm.h> +#include <asm/arch/pxa-pm_ll.h> +#include <asm/arch/hardware.h> +#include <asm/arch/pxa-regs.h> + +#include <asm/arch/palmt650-gpio.h> +#include <asm/arch/pxa27x_keyboard.h> + +#ifdef CONFIG_PM +static int palmt650_suspend(struct device *dev, pm_message_t state) +{ + /* Wake-Up on RTC event, etc. */ + PWER |= PWER_RTC | PWER_WEP1; + + /* Wakeup by keyboard :) */ + PKWR = 0xe0000; + + /* Enabled Deep-Sleep mode */ + PCFR |= PCFR_DS; + + /* Low power mode */ + PCFR |= PCFR_OPDE; + + /* 3.6.8.1 */ + while(!(OSCC & OSCC_OOK)) + {} + + /* Turn off LCD power */ + SET_PALMT650_GPIO(LCD_POWER,0); + /* Turn screen off */ + SET_PALMT650_GPIO(LCD_SCREEN,0); + /* Turn off USB power */ +/* SET_PALMT650_GPIO(USB_POWER,0); */ + + + /* disable GPIO reset - DO NOT REMOVE! */ + PCFR = PCFR_GPROD; +/* PCFR &= PCFR_GPR_EN; */ + + return 0; +} + +static int palmt650_resume(struct device *dev) +{ + + /* Disabled Deep-Sleep mode ?? */ + PCFR &= PCFR_DS; + + /* Re-enable GPIO reset */ + PCFR |= PCFR_GPR_EN; /* !! DO NOT REMOVE !! THIS IS NECCESARY FOR ENABLE PALM RESET !! */ + + + /* Here are all of special to resume PalmOne treo 650 */ + + /* Turn on LCD power */ + SET_PALMT650_GPIO(LCD_POWER,1); + /* Turn screen on */ + SET_PALMT650_GPIO(LCD_SCREEN,1); + /* Turn on USB power */ +/* SET_PALMT650_GPIO(USB_POWER,1); */ + + return 0; +} +#else +#define palmt650_suspend NULL +#define palmt650_resume NULL +#endif + +static void palmt650_pxa_ll_pm_suspend(unsigned long resume_addr) +{ + /* For future */ + return; +} + +static void palmt650_pxa_ll_pm_resume(void) +{ + /* For future */ +} + +struct pxa_ll_pm_ops palmt650_ll_pm_ops = { + .suspend = palmt650_pxa_ll_pm_suspend, + .resume = palmt650_pxa_ll_pm_resume, +}; + +static int palmt650_pm_probe(struct device *dev) +{ + printk(KERN_NOTICE "PalmOne Treo 650 power management driver registered\n"); + return 0; +} + +struct device_driver palmt650_pm_driver = { + .name = "palmt650-pm", + .bus = &platform_bus_type, + .probe = palmt650_pm_probe, + .suspend = palmt650_suspend, + .resume = palmt650_resume, +}; + +static int __init palmt650_pm_init(void) +{ + return driver_register(&palmt650_pm_driver); +} + +static void __exit palmt650_pm_exit(void) +{ + driver_unregister(&palmt650_pm_driver); +} + +module_init(palmt650_pm_init); +module_exit(palmt650_pm_exit); + +MODULE_AUTHOR("Jan Herman <2h...@se...>, Sergey Lapin <sla...@gm...>"); +MODULE_DESCRIPTION("PalmOne Treo 650 power management driver"); +MODULE_LICENSE("GPL"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/pxa27x.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/pxa27x.c 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/pxa27x.c 2007-05-01 14:43:07 UTC (rev 963) @@ -139,7 +139,8 @@ extern void pxa_cpu_standby(void); extern void pxa_cpu_suspend(unsigned int); #if defined(CONFIG_MACH_XSCALE_PALMLD) || defined(CONFIG_MACH_XSCALE_PALMTX) \ - || defined(CONFIG_MACH_PALMZ72) || defined(CONFIG_MACH_XSCALE_PALMTT5) + || defined(CONFIG_MACH_PALMZ72) || defined(CONFIG_MACH_XSCALE_PALMTT5) \ + || defined(CONFIG_MACH_XSCALE_PALMTREO650) /* For safety. suspend_mem puts the device in an unresetable state. * On TX one needs to desolder the battery to get out of it. */ Modified: linux4palm/linux/trunk/drivers/leds/leds-palmt650.c =================================================================== --- linux4palm/linux/trunk/drivers/leds/leds-palmt650.c 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/drivers/leds/leds-palmt650.c 2007-05-01 14:43:07 UTC (rev 963) @@ -7,7 +7,6 @@ * */ -#include <linux/config.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> @@ -97,6 +96,7 @@ }; #ifdef CONFIG_PM + static int palmt650_led_suspend(struct platform_device *dev, pm_message_t state) { led_classdev_suspend(&palmt650_green_led); @@ -148,10 +148,12 @@ asic6_write(0x12, 0xe3); /* FIXME: should be moved to seperate phone driver */ +/* printk("Attempting to reset phone module...\n"); asic6_write(0x48, asic6_read(0x48) & ~0x40); msleep(5); asic6_write(0x48, asic6_read(0x48) | 0x40); +*/ return ret; vibra_err: Modified: linux4palm/linux/trunk/drivers/misc/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/misc/Kconfig 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/drivers/misc/Kconfig 2007-05-01 14:43:07 UTC (rev 963) @@ -34,6 +34,13 @@ Say Y here to enable monitoring of battery and charger using sysfs interface. +config ASIC6ED + tristate "ASIC6ED" + depends on ARCH_PXA + default n + help + ASIC6 register editor, only for debugging or testing!!! + config GPIOED tristate "GPIOED" depends on ARCH_PXA Modified: linux4palm/linux/trunk/drivers/misc/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/misc/Makefile 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/drivers/misc/Makefile 2007-05-01 14:43:07 UTC (rev 963) @@ -15,6 +15,7 @@ obj-$(CONFIG_BATTCHARGE_MONITOR) += battchargemon.o obj-$(CONFIG_GPIOED) += gpioed.o obj-$(CONFIG_GPIOEDNG) += gpioed-ng.o +obj-$(CONFIG_ASIC6ED) += asic6ed.o obj-$(CONFIG_MCP) += mcp-core.o obj-$(CONFIG_MCP_SA1100) += mcp-sa1100.o Modified: linux4palm/linux/trunk/drivers/video/logo/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/video/logo/Makefile 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/drivers/video/logo/Makefile 2007-05-01 14:43:07 UTC (rev 963) @@ -13,7 +13,6 @@ obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o obj-$(CONFIG_LOGO_M32R_CLUT224) += logo_m32r_clut224.o - # How to generate logo's # Use logo-cfiles to retrieve list of .c files to be built Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt650-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt650-gpio.h 2007-04-30 11:41:31 UTC (rev 962) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt650-gpio.h 2007-05-01 14:43:07 UTC (rev 963) @@ -33,11 +33,14 @@ #define ASIC6_LED2_AUTOSTOP __REG16(0x080000aa) /* Palm Treo 650 GPIOs */ -#define GPIO_NR_PALMT650_POWER_DETECT 15 +#define GPIO_NR_PALMT650_POWER_DETECT 0 #define GPIO_NR_PALMT650_VIBRATE_EN 26 #define GPIO_NR_PALMT650_SILENT_SWITCH 33 #define GPIO_NR_PALMT650_WM9712_IRQ 90 #define GPIO_NR_PALMT650_SD_DETECT_N 113 /* SD card inserted; RE FE; Input */ +#define GPIO_NR_PALMT650_LCD_POWER 20 +#define GPIO_NR_PALMT650_LCD_SCREEN 77 +#define GPIO_NR_PALMT650_USB_DETECT 9 #define GPIO_NR_PALMT650_KP_MKIN0 100 #define GPIO_NR_PALMT650_KP_MKIN1 101 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-01 15:31:46
|
Revision: 964 http://svn.sourceforge.net/hackndev/?rev=964&view=rev Author: marex_z71 Date: 2007-05-01 08:31:44 -0700 (Tue, 01 May 2007) Log Message: ----------- l4p: fix what previous commit screwed, make a few things look better Modified Paths: -------------- linux4palm/linux/trunk/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c linux4palm/linux/trunk/drivers/misc/Kconfig linux4palm/linux/trunk/drivers/misc/Makefile linux4palm/linux/trunk/drivers/video/logo/Makefile Modified: linux4palm/linux/trunk/Makefile =================================================================== --- linux4palm/linux/trunk/Makefile 2007-05-01 14:43:07 UTC (rev 963) +++ linux4palm/linux/trunk/Makefile 2007-05-01 15:31:44 UTC (rev 964) @@ -183,7 +183,7 @@ # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile ARCH := arm -CROSS_COMPILE ?= arm-none-eabi- +CROSS_COMPILE ?= arm-softfloat-linux-gnu- # Architecture as present in compile.h UTS_MACHINE := $(ARCH) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c 2007-05-01 14:43:07 UTC (rev 963) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt650/palmt650.c 2007-05-01 15:31:44 UTC (rev 964) @@ -149,7 +149,8 @@ static int udc_is_connected(void) { - return 1111;//GPLR(GPIO_PALMLD_USB_DETECT) & GPIO_bit(GPIO_PALMLD_USB_DETECT); + return 1111; /* GPLR(GPIO_PALMLD_USB_DETECT) & + GPIO_bit(GPIO_PALMLD_USB_DETECT); */ } static void udc_enable(int cmd) @@ -184,69 +185,69 @@ .nr_cols = 7, .keycodes = { { /* row 0 */ - KEY_O, // "O" - KEY_DOWN, // "5-Way Left" }, - -1, // "Alternate" }, - KEY_L, // "L" }, - KEY_A, // "A" }, - KEY_Q, // "Q" }, - KEY_RIGHTCTRL, // "Right Shift" }, + KEY_O, /* "O" */ + KEY_DOWN, /* "5-Way Left" */ + -1, /* "Alternate" */ + KEY_L, /* "L" */ + KEY_A, /* "A" */ + KEY_Q, /* "Q" */ + KEY_RIGHTCTRL, /* "Right Shift" */ }, { /* row 1 */ - KEY_P, // "P" }, - KEY_UP, // "5-Way Right" }, - KEY_LEFTSHIFT, //"Left Shift" }, - KEY_Z, // "Z" }, - KEY_S, // "S" }, - KEY_W, // "W" }, - -1, // "Unused" }, + KEY_P, /* "P" */ + KEY_UP, /* "5-Way Right" */ + KEY_LEFTSHIFT, /* "Left Shift" */ + KEY_Z, /* "Z" */ + KEY_S, /* "S" */ + KEY_W, /* "W" */ + -1, /* "Unused" */ }, { /* row 2 */ - -1, // "Phone" }, - KEY_LEFT, // "5-Way Up" }, - KEY_0, // "0" }, - KEY_X, // "X" }, - KEY_D, // "D" }, - KEY_E, // "E" }, - -1, // "Unused" }, + -1, /* "Phone" */ + KEY_LEFT, /* "5-Way Up" */ + KEY_0, /* "0" */ + KEY_X, /* "X" */ + KEY_D, /* "D" */ + KEY_E, /* "E" */ + -1, /* "Unused" */ }, { /* row 3 */ - KEY_F10, // "Calendar" }, - KEY_RIGHT, // "5-Way Down" }, - KEY_SPACE, // "Space" }, - KEY_C, // "C" }, - KEY_F, // "F" }, - KEY_R, // "R" }, - -1, // "Unused" }, + KEY_F10, /* "Calendar" */ + KEY_RIGHT, /* "5-Way Down" */ + KEY_SPACE, /* "Space" */ + KEY_C, /* "C" */ + KEY_F, /* "F" */ + KEY_R, /* "R" */ + -1, /* "Unused" */ }, { /* row 4 */ - KEY_F12, // "Mail" }, - KEY_ENTER, // "5-Way Center" }, - KEY_F9, // "HOME" }, - KEY_V, // "V" }, - KEY_G, // "G" }, - KEY_T, // "T" }, - -1, // "Unused" }, + KEY_F12, /* "Mail" */ + KEY_ENTER, /* "5-Way Center" */ + KEY_F9, /* "HOME" */ + KEY_V, /* "V" */ + KEY_G, /* "G" */ + KEY_T, /* "T" */ + -1, /* "Unused" */ }, { /* row 5 */ - -1, // "Off" }, - KEY_VOLUMEUP, // "Volume Up" }, - KEY_DOT, // "." }, - KEY_B, // "B" }, - KEY_H, // "H" }, - KEY_Y, // "Y" }, - -1, // "Unused" }, + -1, /* "Off" */ + KEY_VOLUMEUP, /* "Volume Up" */ + KEY_DOT, /* "." */ + KEY_B, /* "B" */ + KEY_H, /* "H" */ + KEY_Y, /* "Y" */ + -1, /* "Unused" */ }, { /* row 6 */ - KEY_F11, // "Mute" }, - KEY_VOLUMEDOWN, // "Volume Down" }, - KEY_ENTER, // "Return" }, - KEY_N, // "N" }, - KEY_J, // "J" }, - KEY_U, // "U" }, - -1, // "Unused" }, + KEY_F11, /* "Mute" */ + KEY_VOLUMEDOWN, /* "Volume Down" */ + KEY_ENTER, /* "Return" */ + KEY_N, /* "N" */ + KEY_J, /* "J" */ + KEY_U, /* "U" */ + -1, /* "Unused" */ }, { /* row 7 */ - KEY_RIGHTALT, // "Alt" }, - -1, // "Unused" }, - KEY_BACKSPACE, // "P" }, - KEY_M, // "M" - KEY_K, // "K" - KEY_I, // "I" - -1, // "Unused" }, + KEY_RIGHTALT, /* "Alt" */ + -1, /* "Unused" */ + KEY_BACKSPACE, /* "P" */ + KEY_M, /* "M"*/ + KEY_K, /* "K"*/ + KEY_I, /* "I"*/ + -1, /* "Unused" */ }, }, @@ -299,8 +300,8 @@ .vsync_len = 1, /* fixme: these are the margins PalmOS has set, - * they seem to work but could be better. - */ + * they seem to work but could be better. + */ .left_margin = 20, .right_margin = 8, .upper_margin = 8, @@ -311,9 +312,9 @@ static struct pxafb_mach_info palmt650_lcd __initdata = { .lccr0 = 0x4000080, .lccr3 = 0x4700003, - //.pxafb_backlight_power = palm_backlight_power, - // - // + + /* .pxafb_backlight_power = palm_backlight_power, */ + .num_modes = 1, .modes = &palmt650_lcd_mode, }; @@ -343,8 +344,8 @@ pxa_set_udc_info( &palmt650_udc_mach_info ); platform_add_devices(devices, ARRAY_SIZE(devices)); +#if 0 /* configure power switch to resume from standby */ -#if 0 PWER |= PWER_GPIO12; PRER |= PWER_GPIO12; #endif Modified: linux4palm/linux/trunk/drivers/misc/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/misc/Kconfig 2007-05-01 14:43:07 UTC (rev 963) +++ linux4palm/linux/trunk/drivers/misc/Kconfig 2007-05-01 15:31:44 UTC (rev 964) @@ -34,13 +34,6 @@ Say Y here to enable monitoring of battery and charger using sysfs interface. -config ASIC6ED - tristate "ASIC6ED" - depends on ARCH_PXA - default n - help - ASIC6 register editor, only for debugging or testing!!! - config GPIOED tristate "GPIOED" depends on ARCH_PXA Modified: linux4palm/linux/trunk/drivers/misc/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/misc/Makefile 2007-05-01 14:43:07 UTC (rev 963) +++ linux4palm/linux/trunk/drivers/misc/Makefile 2007-05-01 15:31:44 UTC (rev 964) @@ -15,7 +15,6 @@ obj-$(CONFIG_BATTCHARGE_MONITOR) += battchargemon.o obj-$(CONFIG_GPIOED) += gpioed.o obj-$(CONFIG_GPIOEDNG) += gpioed-ng.o -obj-$(CONFIG_ASIC6ED) += asic6ed.o obj-$(CONFIG_MCP) += mcp-core.o obj-$(CONFIG_MCP_SA1100) += mcp-sa1100.o Modified: linux4palm/linux/trunk/drivers/video/logo/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/video/logo/Makefile 2007-05-01 14:43:07 UTC (rev 963) +++ linux4palm/linux/trunk/drivers/video/logo/Makefile 2007-05-01 15:31:44 UTC (rev 964) @@ -13,6 +13,7 @@ obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o obj-$(CONFIG_LOGO_M32R_CLUT224) += logo_m32r_clut224.o + # How to generate logo's # Use logo-cfiles to retrieve list of .c files to be built This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-06-02 16:03:10
|
Revision: 1018 http://svn.sourceforge.net/hackndev/?rev=1018&view=rev Author: marex_z71 Date: 2007-06-02 09:03:07 -0700 (Sat, 02 Jun 2007) Log Message: ----------- PalmLD: GPIO Keys stuff Modified Paths: -------------- 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/mach-pxa/palmld/palmld.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-06-02 12:02:54 UTC (rev 1017) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-06-02 16:03:07 UTC (rev 1018) @@ -306,7 +306,27 @@ }, }; +/******************************** + * GPIO Key - Voice Memo Button * + ********************************/ +#ifdef CONFIG_KEYBOARD_GPIO +static struct gpio_keys_button palmld_pxa_buttons[] = { + {KEY_F7, GPIO_NR_PALMLD_POWER_SWITCH, 0, "Power switch" }, +}; +static struct gpio_keys_platform_data palmld_pxa_keys_data = { + .buttons = palmld_pxa_buttons, + .nbuttons = ARRAY_SIZE(palmld_pxa_buttons), +}; + +static struct platform_device palmld_pxa_keys = { + .name = "gpio-keys", + .dev = { + .platform_data = &palmld_pxa_keys_data, + }, +}; +#endif + /******************** * Power Management * ********************/ Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-06-02 12:02:54 UTC (rev 1017) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-06-02 16:03:07 UTC (rev 1018) @@ -24,7 +24,7 @@ #define GPIO_NR_PALMLD_GPIO_RESET 1 #define GPIO_NR_PALMLD_POWER_DETECT 4 #define GPIO_NR_PALMLD_HOTSYNC_BUTTON_N 10 -#define GPIO_NR_PALMLD_POWER_SWITCH 11 +#define GPIO_NR_PALMLD_POWER_SWITCH 12 #define GPIO_NR_PALMLD_EARPHONE_DETECT 13 #define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ #define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <med...@us...> - 2007-06-06 02:47:23
|
Revision: 1022 http://svn.sourceforge.net/hackndev/?rev=1022&view=rev Author: medaglia Date: 2007-06-05 19:47:21 -0700 (Tue, 05 Jun 2007) Log Message: ----------- Small fixes to have this kernel building for Palm T|E2. Modified Paths: -------------- linux4palm/linux/trunk/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2_ac97.c Modified: linux4palm/linux/trunk/Makefile =================================================================== --- linux4palm/linux/trunk/Makefile 2007-06-03 10:06:21 UTC (rev 1021) +++ linux4palm/linux/trunk/Makefile 2007-06-06 02:47:21 UTC (rev 1022) @@ -183,7 +183,7 @@ # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile ARCH := arm -CROSS_COMPILE ?= arm-softfloat-linux-gnu- +CROSS_COMPILE ?= arm-none-eabi- # Architecture as present in compile.h UTS_MACHINE := $(ARCH) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2.c 2007-06-03 10:06:21 UTC (rev 1021) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2.c 2007-06-06 02:47:21 UTC (rev 1022) @@ -39,14 +39,14 @@ #include <sound/ac97_codec.h> #include "../generic.h" -#include "../drivers/serial/pxa-serial.h" +//#include "../drivers/serial/pxa-serial.h" #define DEBUG /** * IRDA */ - +#if 0 static void palmte2_irda_configure (struct uart_pxa_port *up, int enable) { @@ -114,6 +114,8 @@ .get_txrx = palmte2_irda_get_txrx, }; +#endif + struct platform_device palmte2_buttons = { .name = "palmte2-buttons", .id = -1, @@ -184,8 +186,8 @@ } } - -static struct pxafb_mach_info palmte2lcd __initdata = { +static struct pxafb_mode_info palmte2_lcd_modes[] = { +{ .pixclock = 0, .xres = 320, .yres = 320, @@ -199,6 +201,14 @@ .lower_margin = 5, .sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, +// .sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, +}, +}; + +static struct pxafb_mach_info palmte2_lcd_screen = { + .modes = palmte2_lcd_modes, + .num_modes = ARRAY_SIZE(palmte2_lcd_modes), + .lccr0 = 0x000000F9, .lccr3 = 0x04700006, .pxafb_backlight_power = palm_backlight_power, @@ -208,9 +218,9 @@ { GCR &= ~GCR_PRIRDY_IEN; - set_pxa_fb_info(&palmte2lcd); + set_pxa_fb_info(&palmte2_lcd_screen); - stuart_device.dev.platform_data = &palmte2_pxa_irda_funcs; +// stuart_device.dev.platform_data = &palmte2_pxa_irda_funcs; platform_add_devices(devices, ARRAY_SIZE(devices)); /* @@ -221,7 +231,7 @@ MACHINE_START(TUNGE2, "Palm Tungsten E2") /* Maintainer: Carlos E. Medaglia Dyonisio <ca...@ne...> */ - .phys_ram = 0xa0000000, + //.phys_ram = 0xa0000000, .phys_io = 0x40000000, .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, .map_io = pxa_map_io, Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2_ac97.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2_ac97.c 2007-06-03 10:06:21 UTC (rev 1021) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmte2/palmte2_ac97.c 2007-06-06 02:47:21 UTC (rev 1022) @@ -21,7 +21,8 @@ #include <asm/arch/pxa-regs.h> #include <asm/arch/irqs.h> /* XXX: Should be changed! */ -#include <asm/arch-pxa/palmld-ac97.h> +//#include <asm/arch-pxa/palmld-ac97.h> +#include <linux/wm97xx.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-05 12:51:50
|
Revision: 971 http://svn.sourceforge.net/hackndev/?rev=971&view=rev Author: marex_z71 Date: 2007-05-05 05:51:48 -0700 (Sat, 05 May 2007) Log Message: ----------- PalmLD: added bluetooth stuff Modified Paths: -------------- 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/mach-pxa/palmld/palmld.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-05-04 17:18:21 UTC (rev 970) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld.c 2007-05-05 12:51:48 UTC (rev 971) @@ -31,6 +31,7 @@ #include <asm/arch/pxapwm-bl.h> #include <asm/arch/pxa-pm_ll.h> #include <asm/arch/sx2.h> +#include <asm/arch/serial.h> #include <sound/driver.h> #include <sound/core.h> @@ -97,7 +98,54 @@ }; +/* Bluetooth */ +void bcm2035_bt_reset(int on) +{ + printk(KERN_NOTICE "Switch BT reset %d\n", on); + if (on) + SET_PALMLD_GPIO( BT_RESET, 1 ); + else + SET_PALMLD_GPIO( BT_RESET, 0 ); +} +EXPORT_SYMBOL(bcm2035_bt_reset); + +void bcm2035_bt_power(int on) +{ + printk(KERN_NOTICE "Switch BT power %d\n", on); + if (on) + SET_PALMLD_GPIO( BT_POWER, 1 ); + else + SET_PALMLD_GPIO( BT_POWER, 0 ); +} +EXPORT_SYMBOL(bcm2035_bt_power); + + +struct bcm2035_bt_funcs { + void (*configure) ( int state ); +}; + +static struct bcm2035_bt_funcs bt_funcs; + +static void +bcm2035_bt_configure( int state ) +{ + if (bt_funcs.configure != NULL) + bt_funcs.configure( state ); +} + +static struct platform_pxa_serial_funcs bcm2035_pxa_bt_funcs = { + .configure = bcm2035_bt_configure, +}; + +static struct platform_device bcm2035_bt = { + .name = "bcm2035-bt", + .id = -1, + .dev = { + .platform_data = &bt_funcs, + }, +}; + /** * AC97 audio controller */ @@ -283,7 +331,7 @@ static struct platform_device *devices[] __initdata = { &palmld_kbd, &palmld_ac97, &palmld_ide, &palmld_backlight, - &palmldled_device, &palmldusb2_device, &palmld_pm, + &palmldled_device, &palmldusb2_device, &palmld_pm, &bcm2035_bt, }; /********************************************************* @@ -375,6 +423,7 @@ pxa_gpio_mode(GPIO31_SYNC_AC97_MD); set_pxa_fb_info( &palmld_lcd_screen ); + pxa_set_btuart_info(&bcm2035_pxa_bt_funcs); pxa_set_mci_info( &palmld_mci_platform_data ); platform_add_devices( devices, ARRAY_SIZE(devices) ); pxa_set_ficp_info( &palmld_ficp_platform_data ); Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-05-04 17:18:21 UTC (rev 970) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-05-05 12:51:48 UTC (rev 971) @@ -80,6 +80,19 @@ #define GPIO_NR_PALMLD_USB_INT 106 #define GPIO_NR_PALMLD_USB_POWER 118 +/* Bluetooth */ +#define GPIO_NR_PALMLD_BT_POWER 17 +#define GPIO_NR_PALMLD_BT_RXD 42 +#define GPIO_NR_PALMLD_BT_TXD 43 +#define GPIO_NR_PALMLD_BT_CTS 44 +#define GPIO_NR_PALMLD_BT_RTS 45 +#define GPIO_NR_PALMLD_BT_RESET 83 + +#define GPIO_NR_PALMLD_BT_RXD_MD (GPIO_NR_PALMLD_BT_RXD | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMLD_BT_TXD_MD (GPIO_NR_PALMLD_BT_TXD | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMLD_BT_UART_CTS_MD (GPIO_NR_PALMLD_BT_CTS | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMLD_BT_UART_RTS_MD (GPIO_NR_PALMLD_BT_RTS | GPIO_ALT_FN_2_OUT) + /* Utility macros */ #define GET_PALMLD_GPIO(gpio) \ (GPLR(GPIO_NR_PALMLD_ ## gpio) & GPIO_bit(GPIO_NR_PALMLD_ ## gpio)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-22 19:06:26
|
Revision: 989 http://svn.sourceforge.net/hackndev/?rev=989&view=rev Author: marex_z71 Date: 2007-05-22 12:06:24 -0700 (Tue, 22 May 2007) Log Message: ----------- PalmT5: added bluetooth stuff Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/configs/palmt5_defconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-gpio.h Modified: linux4palm/linux/trunk/arch/arm/configs/palmt5_defconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/configs/palmt5_defconfig 2007-05-22 11:23:20 UTC (rev 988) +++ linux4palm/linux/trunk/arch/arm/configs/palmt5_defconfig 2007-05-22 19:06:24 UTC (rev 989) @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.20-hnd0 -# Wed Apr 18 11:05:47 2007 +# Tue May 22 19:25:18 2007 # CONFIG_ARM=y # CONFIG_GENERIC_TIME is not set @@ -413,15 +413,22 @@ # CONFIG_PXA_FICP=y CONFIG_BT=m -# CONFIG_BT_L2CAP is not set -# CONFIG_BT_SCO is not set +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m # # Bluetooth device drivers # CONFIG_BT_HCIUART=m -# CONFIG_BT_HCIUART_H4 is not set +CONFIG_BT_HCIUART_H4=y # CONFIG_BT_HCIUART_BCSP is not set +CONFIG_BT_BCM2035UART=m # CONFIG_BT_HCIVHCI is not set CONFIG_IEEE80211=m # CONFIG_IEEE80211_DEBUG is not set @@ -620,6 +627,7 @@ # CONFIG_TOUCHSCREEN_ADC is not set # CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set # CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_PALMTC is not set CONFIG_TOUCHSCREEN_WM97XX=m # CONFIG_TOUCHSCREEN_WM9705 is not set CONFIG_TOUCHSCREEN_WM9712=y Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5.c 2007-05-22 11:23:20 UTC (rev 988) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5.c 2007-05-22 19:06:24 UTC (rev 989) @@ -36,6 +36,7 @@ #include <asm/arch/irda.h> #include <asm/arch/pxa27x_keyboard.h> #include <asm/arch/pxapwm-bl.h> +#include <asm/arch/serial.h> #include "../generic.h" #include <../drivers/pcmcia/soc_common.h> @@ -256,15 +257,61 @@ .udc_command = palmt5_udc_command, }; +/* Bluetooth */ +void bcm2035_bt_reset(int on) +{ + printk(KERN_NOTICE "Switch BT reset %d\n", on); + if (on) + SET_PALMT5_GPIO( BT_RESET, 1 ); + else + SET_PALMT5_GPIO( BT_RESET, 0 ); +} +EXPORT_SYMBOL(bcm2035_bt_reset); +void bcm2035_bt_power(int on) +{ + printk(KERN_NOTICE "Switch BT power %d\n", on); + if (on) + SET_PALMT5_GPIO( BT_POWER, 1 ); + else + SET_PALMT5_GPIO( BT_POWER, 0 ); +} +EXPORT_SYMBOL(bcm2035_bt_power); + + +struct bcm2035_bt_funcs { + void (*configure) ( int state ); +}; + +static struct bcm2035_bt_funcs bt_funcs; + +static void +bcm2035_bt_configure( int state ) +{ + if (bt_funcs.configure != NULL) + bt_funcs.configure( state ); +} + +static struct platform_pxa_serial_funcs bcm2035_pxa_bt_funcs = { + .configure = bcm2035_bt_configure, +}; + +static struct platform_device bcm2035_bt = { + .name = "bcm2035-bt", + .id = -1, + .dev = { + .platform_data = &bt_funcs, + }, +}; + /************************* * AC97 audio controller * *************************/ static pxa2xx_audio_ops_t palmt5_audio_ops = { /* - .startup = palmld_audio_startup, + .startup = palmt5_audio_startup, .shutdown = mst_audio_shutdown, .suspend = mst_audio_suspend, .resume = mst_audio_resume, @@ -294,6 +341,7 @@ &palmt5_ac97, &palmt5_pm, &palmt5_backlight, + &bcm2035_bt, }; /*************** @@ -372,6 +420,7 @@ pxa_gpio_mode(GPIO31_SYNC_AC97_MD); set_pxa_fb_info ( &palmt5_lcd_screen ); + pxa_set_btuart_info(&bcm2035_pxa_bt_funcs); pxa_set_mci_info ( &palmt5_mci_platform_data ); pxa_set_udc_info ( &palmt5_udc_mach_info ); pxa_set_ficp_info ( &palmt5_ficp_platform_data ); Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-gpio.h 2007-05-22 11:23:20 UTC (rev 988) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-gpio.h 2007-05-22 19:06:24 UTC (rev 989) @@ -68,6 +68,19 @@ #define GPIO_NR_PALMT5_BL_POWER 84 #define GPIO_NR_PALMT5_LCD_POWER 96 +/* Bluetooth */ +#define GPIO_NR_PALMT5_BT_POWER 17 +#define GPIO_NR_PALMT5_BT_RXD 42 +#define GPIO_NR_PALMT5_BT_TXD 43 +#define GPIO_NR_PALMT5_BT_CTS 44 +#define GPIO_NR_PALMT5_BT_RTS 45 +#define GPIO_NR_PALMT5_BT_RESET 83 + +#define GPIO_NR_PALMT5_BT_RXD_MD (GPIO_NR_PALMT5_BT_RXD | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMT5_BT_TXD_MD (GPIO_NR_PALMT5_BT_TXD | GPIO_ALT_FN_2_OUT) +#define GPIO_NR_PALMT5_BT_UART_CTS_MD (GPIO_NR_PALMT5_BT_CTS | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMT5_BT_UART_RTS_MD (GPIO_NR_PALMT5_BT_RTS | GPIO_ALT_FN_2_OUT) + /* INTERRUPTS */ #define IRQ_GPIO_PALMT5_SD_DETECT_N IRQ_GPIO(GPIO_NR_PALMT5_SD_DETECT_N) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-27 17:42:06
|
Revision: 998 http://svn.sourceforge.net/hackndev/?rev=998&view=rev Author: marex_z71 Date: 2007-05-27 10:42:01 -0700 (Sun, 27 May 2007) Log Message: ----------- PalmLD: PalmLD specific fixes, PalmLD battery, WM97xx fixes, new defconfig Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c linux4palm/linux/trunk/include/linux/wm97xx.h Removed Paths: ------------- linux4palm/linux/trunk/include/linux/wm9712_ts.h Modified: linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig 2007-05-27 17:00:31 UTC (rev 997) +++ linux4palm/linux/trunk/arch/arm/configs/palmld_defconfig 2007-05-27 17:42:01 UTC (rev 998) @@ -1,11 +1,14 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.20-hnd0 -# Tue Feb 27 17:46:56 2007 +# Linux kernel version: 2.6.21-hnd0 +# Sun May 27 14:49:20 2007 # CONFIG_ARM=y -# CONFIG_GENERIC_TIME is not set +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set CONFIG_GENERIC_HARDIRQS=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HARDIRQS_SW_RESEND=y @@ -15,6 +18,7 @@ # CONFIG_ARCH_HAS_ILOG2_U64 is not set CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y CONFIG_ARCH_MTD_XIP=y CONFIG_VECTORS_BASE=0xffff0000 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" @@ -34,6 +38,7 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set # CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_TASKSTATS is not set @@ -42,6 +47,7 @@ # CONFIG_IKCONFIG is not set CONFIG_SYSFS_DEPRECATED=y # CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y # CONFIG_INITRAMFS_SOURCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y @@ -120,6 +126,7 @@ # CONFIG_ARCH_IXP2000 is not set # CONFIG_ARCH_IXP23XX is not set # CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_NS9XXX is not set # CONFIG_ARCH_PNX4008 is not set CONFIG_ARCH_PXA=y # CONFIG_ARCH_RPC is not set @@ -128,6 +135,8 @@ # CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_LH7A40X is not set # CONFIG_ARCH_OMAP is not set +# CONFIG_BOARD_IRQ_MAP_SMALL is not set +# CONFIG_BOARD_IRQ_MAP_BIG is not set # # Intel PXA2xx Implementations @@ -156,6 +165,7 @@ # CONFIG_MACH_BLUEANGEL is not set # CONFIG_MACH_HTCBEETLES is not set # CONFIG_MACH_HW6900 is not set +# CONFIG_MACH_HTCATHENA is not set # CONFIG_ARCH_AXIMX3 is not set # CONFIG_ARCH_AXIMX5 is not set # CONFIG_MACH_X50 is not set @@ -177,6 +187,8 @@ # CONFIG_MACH_PALMZ72 is not set # CONFIG_MACH_OMAP_PALMTC is not set # CONFIG_MACH_ZIRE31 is not set +CONFIG_GPIOED=m +CONFIG_GPIOEDNG=m # CONFIG_PXA_SHARPSL is not set # CONFIG_MACH_TRIZEPS4 is not set CONFIG_PXA27x=y @@ -203,20 +215,12 @@ # CONFIG_ARM_THUMB=y # CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set CONFIG_IWMMXT=y # CONFIG_ARMBOOT_PROC is not set CONFIG_XSCALE_PMU=y -# CONFIG_KEXEC is not set # -# Compaq/iPAQ Drivers -# - -# -# Compaq/HP iPAQ Drivers -# - -# # Bus support # @@ -252,6 +256,7 @@ # CONFIG_SPARSEMEM_STATIC is not set CONFIG_SPLIT_PTLOCK_CPUS=4096 # CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 CONFIG_ALIGNMENT_TRAP=y # @@ -261,6 +266,8 @@ CONFIG_ZBOOT_ROM_BSS=0x0 CONFIG_CMDLINE="" # CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set +# CONFIG_TXTOFFSET_DELTA is not set # # CPU Frequency scaling @@ -293,7 +300,7 @@ # CONFIG_PM_DEBUG is not set # CONFIG_DPM_DEBUG is not set # CONFIG_PM_SYSFS_DEPRECATED is not set -CONFIG_APM=y +CONFIG_APM_EMULATION=y # # Networking @@ -310,7 +317,9 @@ CONFIG_XFRM=y # CONFIG_XFRM_USER is not set # CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set @@ -437,6 +446,7 @@ # CONFIG_BT_HCIUART_BCSP is not set # CONFIG_BT_HCIDTL1 is not set # CONFIG_BT_HCIBT3C is not set +CONFIG_BT_BCM2035UART=m # CONFIG_BT_HCIBLUECARD is not set # CONFIG_BT_HCIBTUART is not set # CONFIG_BT_HCIVHCI is not set @@ -520,6 +530,7 @@ # CONFIG_MTD_COMPLEX_MAPPINGS is not set # CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_IPAQ is not set # CONFIG_MTD_IMPA7 is not set # CONFIG_MTD_SHARP_SL is not set # CONFIG_MTD_PLATRAM is not set @@ -557,6 +568,7 @@ # # Plug and Play support # +# CONFIG_PNPACPI is not set # # Block devices @@ -569,7 +581,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_BLK_DEV_INITRD=y # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set @@ -597,7 +608,6 @@ CONFIG_IDE_GENERIC=y # CONFIG_IDE_ARM is not set # CONFIG_BLK_DEV_IDEDMA is not set -# CONFIG_IDEDMA_AUTO is not set # CONFIG_BLK_DEV_HD is not set # @@ -753,8 +763,10 @@ # CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_GPIODEV_KEYS is not set +# CONFIG_GPIODEV_DIAGONAL is not set CONFIG_KEYBOARD_PXA27x=y +CONFIG_KEYBOARD_GPIO=y # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set CONFIG_INPUT_TOUCHSCREEN=y @@ -765,8 +777,6 @@ # CONFIG_TOUCHSCREEN_PENMOUNT is not set # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set # CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_ADC is not set -# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set # CONFIG_TOUCHSCREEN_UCB1400 is not set # CONFIG_TOUCHSCREEN_PALMTC is not set CONFIG_TOUCHSCREEN_WM97XX=m @@ -811,6 +821,7 @@ # CONFIG_SERIAL_PXA_IR is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_RS232_SERIAL is not set CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 @@ -829,6 +840,7 @@ CONFIG_SA1100_RTC=y # CONFIG_DTLK is not set # CONFIG_R3964 is not set +# CONFIG_TIHTC is not set # # PCMCIA character devices @@ -866,10 +878,12 @@ # CONFIG_HWMON_VID is not set # -# Hardware Monitoring - Battery +# Hardware Monitoring - external power and batteries # -# CONFIG_BATTERY is not set -# CONFIG_ADC_BATTERY is not set +CONFIG_EXTERNAL_POWER=m +CONFIG_BATTERY=m +CONFIG_PDA_POWER=m +CONFIG_APM_POWER=m # # L3 serial bus support @@ -877,20 +891,6 @@ # CONFIG_L3 is not set # -# SoC drivers -# -# CONFIG_SOC_MQ11XX is not set -# CONFIG_SOC_T7L66XB is not set -# CONFIG_SOC_TC6387XB is not set -# CONFIG_SOC_TC6393XB is not set -# CONFIG_SOC_SAMCOP is not set -# CONFIG_SOC_HAMCOP is not set -# CONFIG_HTC_ASIC2 is not set -# CONFIG_HTC_ASIC3 is not set -# CONFIG_HTC_ASIC3_DS1WM is not set -# CONFIG_SOC_TSC2200 is not set - -# # Misc devices # # CONFIG_BATTCHARGE_MONITOR is not set @@ -898,12 +898,25 @@ # # Multimedia Capabilities Port drivers # -# CONFIG_MCP is not set -# CONFIG_ADC_ADS7846_SSP is not set -# CONFIG_ADC_AD7877 is not set -# CONFIG_TIFM_CORE is not set +# CONFIG_ADC is not set # +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_ASIC2 is not set +# CONFIG_HTC_ASIC3 is not set +# CONFIG_HTC_ASIC3_DS1WM is not set +# CONFIG_SOC_SAMCOP is not set +# CONFIG_SOC_HAMCOP is not set +# CONFIG_SOC_MQ11XX is not set +# CONFIG_SOC_T7L66XB is not set +# CONFIG_SOC_TC6387XB is not set +# CONFIG_SOC_TC6393XB is not set +# CONFIG_SOC_TSC2101 is not set +# CONFIG_SOC_TSC2200 is not set + +# # LED devices # CONFIG_NEW_LEDS=y @@ -938,15 +951,26 @@ # # Graphics support # +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=m +CONFIG_LCD_CLASS_DEVICE=m +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_PXAPWM=m +CONFIG_FB=y CONFIG_FIRMWARE_EDID=y -CONFIG_FB=y +# CONFIG_FB_DDC is not set CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SVGALIB is not set # CONFIG_FB_MACMODES is not set # CONFIG_FB_BACKLIGHT is not set # CONFIG_FB_MODE_HELPERS is not set CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# # CONFIG_FB_IMAGEON is not set # CONFIG_FB_S1D13XXX is not set CONFIG_FB_PXA=y @@ -962,21 +986,22 @@ CONFIG_DUMMY_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -# CONFIG_FONTS is not set +CONFIG_FONTS=y CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set # # Logo configuration # # CONFIG_LOGO is not set -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_BACKLIGHT_CLASS_DEVICE=m -CONFIG_BACKLIGHT_DEVICE=y -CONFIG_LCD_CLASS_DEVICE=m -CONFIG_LCD_DEVICE=y -# CONFIG_BACKLIGHT_CORGI is not set -CONFIG_BACKLIGHT_PXAPWM=m # # Sound @@ -1040,6 +1065,7 @@ # HID Devices # CONFIG_HID=y +# CONFIG_HID_DEBUG is not set # # USB support @@ -1056,7 +1082,29 @@ # # USB Gadget Support # -# CONFIG_USB_GADGET is not set +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +# CONFIG_USB_GADGET_PXA27X is not set +CONFIG_USB_GADGET_SX2=y +CONFIG_USB_SX2=m +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_MQ11XX is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +# CONFIG_USB_GADGET_DUALSPEED is not set +CONFIG_USB_ZERO=m +# CONFIG_USB_ETH is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_CHAR is not set # # MMC/SD Card support @@ -1065,7 +1113,6 @@ # CONFIG_MMC_DEBUG is not set CONFIG_MMC_BLOCK=y CONFIG_MMC_PXA=y -# CONFIG_MMC_TIFM_SD is not set # CONFIG_MMC_TMIO is not set # CONFIG_MMC_SAMCOP is not set @@ -1073,10 +1120,32 @@ # Real Time Clock # CONFIG_RTC_LIB=y -# CONFIG_RTC_CLASS is not set +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" CONFIG_RTC_EPOCH=1904 +# CONFIG_RTC_DEBUG is not set # +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set + +# +# RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_SA1100=y +# CONFIG_RTC_DRV_TEST is not set +# CONFIG_RTC_DRV_V3020 is not set + +# # File systems # CONFIG_EXT2_FS=y @@ -1271,8 +1340,10 @@ # CONFIG_CRYPTO_GF128MUL is not set CONFIG_CRYPTO_ECB=m CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_TWOFISH is not set # CONFIG_CRYPTO_SERPENT is not set @@ -1286,6 +1357,7 @@ # CONFIG_CRYPTO_DEFLATE is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set # CONFIG_CRYPTO_TEST is not set # @@ -1303,4 +1375,5 @@ CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_PLIST=y -CONFIG_IOMAP_COPY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c 2007-05-27 17:00:31 UTC (rev 997) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c 2007-05-27 17:42:01 UTC (rev 998) @@ -8,7 +8,6 @@ * * ************************************************************************/ - #include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> @@ -18,8 +17,9 @@ #include <linux/device.h> #include <linux/workqueue.h> #include <linux/battery.h> +#include <linux/apm-emulation.h> +#include <linux/wm97xx.h> -#include <asm/apm.h> #include <asm/delay.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> @@ -27,19 +27,17 @@ #include <asm/arch/hardware.h> #include <asm/arch/pxa-regs.h> #include <asm/arch/irqs.h> +#include <asm/arch/palmld-gpio.h> +#include <asm/arch/palmld-init.h> #include <sound/driver.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/initval.h> -#include <linux/wm97xx.h> -#include <asm/arch/palmld-gpio.h> -#include <asm/arch/palmld-init.h> - struct palmld_battery_dev { - struct wm97xx * wm; + struct wm97xx *wm; int battery_registered; int current_voltage; int previous_voltage; @@ -48,7 +46,7 @@ struct palmld_battery_dev bat; -#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) +#if defined(CONFIG_APM_EMULATION) || defined(CONFIG_APM_MODULE) /* original APM hook */ static void (*apm_get_power_status_orig)(struct apm_power_info *info); #endif @@ -83,6 +81,17 @@ } } +int palmld_battery_get_capacity(struct battery *b) +{ + if (bat.battery_registered){ + return ((palmld_battery_get_voltage(b)-palmld_battery_min_voltage(b)) + /(palmld_battery_max_voltage(b)-palmld_battery_min_voltage(b))); + } + else{ + printk("palmld_battery: cannot get capacity -> battery driver unregistered\n"); + return 0; + } +} int palmld_battery_get_status(struct battery *b) { @@ -101,13 +110,53 @@ return BATTERY_STATUS_DISCHARGING; } +int tmp; + +static void *palmld_battery_get_property(struct battery *b, enum battery_property bp) +{ + switch (bp) { + case BATTERY_PROP_VOLTAGE_MAX_DESIGN: + tmp = palmld_battery_max_voltage(b); + return &tmp; + case BATTERY_PROP_VOLTAGE_MIN_DESIGN: + tmp = palmld_battery_min_voltage(b); + return &tmp; + case BATTERY_PROP_CHARGE_FULL_DESIGN: + tmp = 100; + return &tmp; + case BATTERY_PROP_CHARGE_EMPTY_DESIGN: + tmp = 0; + return &tmp; + case BATTERY_PROP_CHARGE_NOW: + tmp = palmld_battery_get_capacity(b); + return &tmp; + case BATTERY_PROP_VOLTAGE_NOW: + tmp = palmld_battery_get_voltage(b); + return &tmp; + case BATTERY_PROP_STATUS: + tmp = palmld_battery_get_status(b); + return &tmp; + default: break; + }; + + return NULL; +} + +static enum battery_property palmld_battery_props[] = { + BATTERY_PROP_VOLTAGE_MAX_DESIGN, + BATTERY_PROP_VOLTAGE_MIN_DESIGN, + BATTERY_PROP_CHARGE_FULL_DESIGN, + BATTERY_PROP_CHARGE_EMPTY_DESIGN, + BATTERY_PROP_CHARGE_NOW, + BATTERY_PROP_VOLTAGE_NOW, + BATTERY_PROP_STATUS, +}; + struct battery palmld_battery = { - .name = "palmld_battery", - .id = "battery0", - .get_min_voltage = palmld_battery_min_voltage, - .get_max_voltage = palmld_battery_max_voltage, - .get_voltage = palmld_battery_get_voltage, - .get_status = palmld_battery_get_status, + .name = "palmld_battery", + .get_property = palmld_battery_get_property, + .properties = palmld_battery_props, + .num_properties = ARRAY_SIZE(palmld_battery_props), }; static int palmld_wm97xx_probe(struct device *dev) @@ -125,7 +174,7 @@ static void palmld_wm97xx_shutdown(struct device *dev) { -#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) +#if defined(CONFIG_APM_EMULATION) || defined(CONFIG_APM_MODULE) apm_get_power_status = apm_get_power_status_orig; #endif } @@ -154,7 +203,7 @@ .shutdown = palmld_wm97xx_shutdown }; -#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) +#if defined(CONFIG_APM_EMULATION) || defined(CONFIG_APM_MODULE) /* APM status query callback implementation */ static void palmld_apm_get_power_status(struct apm_power_info *info) @@ -200,14 +249,14 @@ /* register battery to APM layer */ bat.battery_registered = 0; - if(battery_class_register(&palmld_battery)) { + if(battery_register(NULL, &palmld_battery)) { printk(KERN_ERR "palmld_ac97_probe: could not register battery class\n"); } else { bat.battery_registered = 1; printk("Battery registered\n"); } -#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) +#if defined(CONFIG_APM_EMULATION) || defined(CONFIG_APM_MODULE) apm_get_power_status_orig = apm_get_power_status; apm_get_power_status = palmld_apm_get_power_status; #endif @@ -223,7 +272,7 @@ static void __exit palmld_wm97xx_exit(void) { /* TODO - recover APM callback to original state */ - battery_class_unregister(&palmld_battery); + battery_unregister(&palmld_battery); driver_unregister(&palmld_wm97xx_driver); } @@ -231,6 +280,7 @@ module_exit(palmld_wm97xx_exit); /* Module information */ -MODULE_AUTHOR("Sergey Lapin <sl...@ha...> Jan Herman <2h...@se...>"); +MODULE_AUTHOR("Sergey Lapin <sl...@ha...> Jan Herman <2h...@se...>" + "Marek Vasut <mar...@gm..."); MODULE_DESCRIPTION("wm97xx battery driver"); MODULE_LICENSE("GPL"); Deleted: linux4palm/linux/trunk/include/linux/wm9712_ts.h =================================================================== --- linux4palm/linux/trunk/include/linux/wm9712_ts.h 2007-05-27 17:00:31 UTC (rev 997) +++ linux4palm/linux/trunk/include/linux/wm9712_ts.h 2007-05-27 17:42:01 UTC (rev 998) @@ -1,29 +0,0 @@ -/* - * Support for the WM9712 AC97 touchscreen codec. - * - * Author: Alex Osborne <bob...@gm...> - * Created: 2006-06-10 - * - */ - -#ifndef __LINUX_WM9712_TS_H -#define __LINUX_WM9712_TS_H - -#include <sound/ac97_codec.h> - -struct wm9712_platform_data { - int pendown_irq; - int interrupt_irq; - - int x_axis_max; - int x_axis_min; - - int y_axis_max; - int y_axis_min; - - int pressure_min; - int pressure_max; - int pressure_threshold; -} - -#endif Modified: linux4palm/linux/trunk/include/linux/wm97xx.h =================================================================== --- linux4palm/linux/trunk/include/linux/wm97xx.h 2007-05-27 17:00:31 UTC (rev 997) +++ linux4palm/linux/trunk/include/linux/wm97xx.h 2007-05-27 17:42:01 UTC (rev 998) @@ -243,7 +243,7 @@ u16 dig_save[3]; /* saved during aux reading */ struct wm97xx_codec_drv *codec; /* attached codec driver*/ struct input_dev* input_dev; /* touchscreen input device */ - ac97_t *ac97; /* ALSA codec access */ + struct snd_ac97 *ac97; /* ALSA codec access */ struct device *dev; /* ALSA device */ struct device *battery_dev; struct device *touch_dev; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-27 23:36:15
|
Revision: 1006 http://svn.sourceforge.net/hackndev/?rev=1006&view=rev Author: marex_z71 Date: 2007-05-27 16:36:07 -0700 (Sun, 27 May 2007) Log Message: ----------- PalmT3: Make this compile again, needs revision though!! Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c linux4palm/linux/trunk/drivers/mfd/tsc2101.c linux4palm/linux/trunk/drivers/mmc/wbsd-palmt3.c Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2007-05-27 22:05:00 UTC (rev 1005) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2007-05-27 23:36:07 UTC (rev 1006) @@ -24,10 +24,10 @@ #include <linux/jiffies.h> #include <linux/platform_device.h> #include <linux/battchargemon.h> +#include <linux/apm-emulation.h> #include <asm/io.h> #include <asm/irq.h> -#include <asm/apm.h> #include <asm/arch/hardware.h> #include <asm/arch/pxa-regs.h> Modified: linux4palm/linux/trunk/drivers/mfd/tsc2101.c =================================================================== --- linux4palm/linux/trunk/drivers/mfd/tsc2101.c 2007-05-27 22:05:00 UTC (rev 1005) +++ linux4palm/linux/trunk/drivers/mfd/tsc2101.c 2007-05-27 23:36:07 UTC (rev 1006) @@ -18,7 +18,9 @@ #include <linux/interrupt.h> #include <linux/module.h> #include <linux/slab.h> -#include <linux/soc/tsc2101.h> +#include <linux/soc/tsc2101.h> +#include <linux/irq.h> +#include <linux/platform_device.h> #include "tsc2101.h" extern void tsc2101_ts_setup(struct device *dev); @@ -239,11 +241,11 @@ static int tsc2101_suspend(struct device *dev, u32 state, u32 level) { struct tsc2101_data *devdata = dev_get_drvdata(dev); - - if (level == SUSPEND_POWER_DOWN) { +/* comment this out like in old driver, it's sick though */ +/* if (level == SUSPEND_POWER_DOWN) { */ tsc2101_ts_disable(devdata); devdata->platform->suspend(); - } +/* } */ return 0; } @@ -252,10 +254,11 @@ { struct tsc2101_data *devdata = dev_get_drvdata(dev); - if (level == RESUME_POWER_ON) { +/* comment this out like in old driver, it's sick though */ +/* if (level == RESUME_POWER_ON) { */ devdata->platform->resume(); tsc2101_ts_enable(devdata); - } +/* } */ return 0; } Modified: linux4palm/linux/trunk/drivers/mmc/wbsd-palmt3.c =================================================================== --- linux4palm/linux/trunk/drivers/mmc/wbsd-palmt3.c 2007-05-27 22:05:00 UTC (rev 1005) +++ linux4palm/linux/trunk/drivers/mmc/wbsd-palmt3.c 2007-05-27 23:36:07 UTC (rev 1006) @@ -1369,9 +1369,9 @@ mmc->max_hw_segs = MAX_HW_SEGMENTS; mmc->max_phys_segs = MAX_PHYS_SEGMENTS; - mmc->max_sectors = SAFE_MAX_SECTORS; +/* mmc->max_sectors = SAFE_MAX_SECTORS; mmc->max_seg_size = MAX_SEGMENT_SIZE; - +*/ dev_set_drvdata(dev, mmc); init_timer(&host->delayed_timer); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-05-28 15:50:50
|
Revision: 1008 http://svn.sourceforge.net/hackndev/?rev=1008&view=rev Author: marex_z71 Date: 2007-05-28 08:50:47 -0700 (Mon, 28 May 2007) Log Message: ----------- l4p: battery driver fixes + correction of palmt5 battery voltage (thanx snua12) Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5_battery.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_battery.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_battery.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-init.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c 2007-05-28 14:30:17 UTC (rev 1007) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_battery.c 2007-05-28 15:50:47 UTC (rev 1008) @@ -84,8 +84,8 @@ int palmld_battery_get_capacity(struct battery *b) { if (bat.battery_registered){ - return ((palmld_battery_get_voltage(b)-palmld_battery_min_voltage(b)) - /(palmld_battery_max_voltage(b)-palmld_battery_min_voltage(b))); + return (((palmld_battery_get_voltage(b)-palmld_battery_min_voltage(b)) + /(palmld_battery_max_voltage(b)-palmld_battery_min_voltage(b)))*100); } else{ printk("palmld_battery: cannot get capacity -> battery driver unregistered\n"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5_battery.c 2007-05-28 14:30:17 UTC (rev 1007) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt5/palmt5_battery.c 2007-05-28 15:50:47 UTC (rev 1008) @@ -83,8 +83,8 @@ int palmt5_battery_get_capacity(struct battery *b) { if (bat.battery_registered){ - return ((palmt5_battery_get_voltage(b)-palmt5_battery_min_voltage(b)) - /(palmt5_battery_max_voltage(b)-palmt5_battery_min_voltage(b))); + return (((palmt5_battery_get_voltage(b)-palmt5_battery_min_voltage(b)) + /(palmt5_battery_max_voltage(b)-palmt5_battery_min_voltage(b)))*100); } else{ printk("palmt5_battery: cannot get capacity -> battery driver unregistered\n"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_battery.c 2007-05-28 14:30:17 UTC (rev 1007) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx_battery.c 2007-05-28 15:50:47 UTC (rev 1008) @@ -88,8 +88,8 @@ int palmtx_battery_get_capacity(struct battery *b) { if (bat.battery_registered){ - return ((palmtx_battery_get_voltage(b)-palmtx_battery_min_voltage(b)) - /(palmtx_battery_max_voltage(b)-palmtx_battery_min_voltage(b))); + return (((palmtx_battery_get_voltage(b)-palmtx_battery_min_voltage(b)) + /(palmtx_battery_max_voltage(b)-palmtx_battery_min_voltage(b)))*100); } else{ printk("palmtx_battery: cannot get capacity -> battery driver unregistered\n"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_battery.c 2007-05-28 14:30:17 UTC (rev 1007) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_battery.c 2007-05-28 15:50:47 UTC (rev 1008) @@ -88,8 +88,8 @@ int palmz72_battery_get_capacity(struct battery *b) { if (bat.battery_registered){ - return ((palmz72_battery_get_voltage(b)-palmz72_battery_min_voltage(b)) - /(palmz72_battery_max_voltage(b)-palmz72_battery_min_voltage(b))); + return (((palmz72_battery_get_voltage(b)-palmz72_battery_min_voltage(b)) + /(palmz72_battery_max_voltage(b)-palmz72_battery_min_voltage(b)))*100); } else{ printk("palmz72_battery: cannot get capacity -> battery driver unregistered\n"); Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-init.h 2007-05-28 14:30:17 UTC (rev 1007) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmt5-init.h 2007-05-28 15:50:47 UTC (rev 1008) @@ -52,7 +52,7 @@ // BATTERY -#define PALMT5_BAT_MAX_VOLTAGE 4100 // 3.99v current voltage at max charge as from Filez +#define PALMT5_BAT_MAX_VOLTAGE 4000 // 4.00v current voltage at max charge as from Filez #define PALMT5_BAT_MIN_VOLTAGE 3550 // 3.55v critical voltage as from FileZ #define PALMT5_BAT_MAX_CURRENT 0 // unknokn #define PALMT5_BAT_MIN_CURRENT 0 // unknown This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mis...@us...> - 2007-06-13 15:59:46
|
Revision: 1034 http://svn.sourceforge.net/hackndev/?rev=1034&view=rev Author: miska_tx Date: 2007-06-13 08:59:41 -0700 (Wed, 13 Jun 2007) Log Message: ----------- Some patches to aufs to make it possible to compile it. Modified Paths: -------------- linux4palm/linux/trunk/fs/aufs/Kconfig linux4palm/linux/trunk/fs/aufs/sysaufs.c linux4palm/linux/trunk/fs/aufs/wkq.c linux4palm/linux/trunk/include/linux/aufs_type.h Modified: linux4palm/linux/trunk/fs/aufs/Kconfig =================================================================== --- linux4palm/linux/trunk/fs/aufs/Kconfig 2007-06-13 15:16:08 UTC (rev 1033) +++ linux4palm/linux/trunk/fs/aufs/Kconfig 2007-06-13 15:59:41 UTC (rev 1034) @@ -10,7 +10,26 @@ different from Unionfs while keeping the basic features. See Unionfs for the basic features. if AUFS -comment "These options are generated automatically for 2.6.21-hnd1" +config AUFS_NWKQ_DEF + int "Number of aufs kernel threads" + depends on AUFS + default "4" + help + Those threads stay in the system and handle the special I/O requests + from aufs. The default value is 4. If you enable CONFIG_SYSFS, you can + check this value through <sysfs>/module/aufs/parameters/nwkq. So how + many threads is enough? You can check it by <sysfs>/fs/aufs/stat, + if you enable CONFIG_AUFS_SUSAUFS too. It shows the maximum number of the + enqueued work at a time per a thread. Usually they are all small numbers or + 0. If your work- load is heavy and you feel the response is low, then check + these values. If there are no zero and any of them is larger than 2 or 3, + you should set 'nwkq' module parameter greater then the default value. + But the reason of the bad response is in your branch filesystem, to + increase the number of aufs thread will not help you. The last number in + <sysfs>/fs/aufs/stat after comma is the maxi- mum number of the 'no-wait' + enqueued work at a time. Aufs enqueues such work to the system global + workqueue called 'events', but doesn't wait for its completion. Usually they + does no harm the time-performance of aufs. config AUFS_FAKE_DM bool "Use simplified (fake) nameidata" depends on AUFS Modified: linux4palm/linux/trunk/fs/aufs/sysaufs.c =================================================================== --- linux4palm/linux/trunk/fs/aufs/sysaufs.c 2007-06-13 15:16:08 UTC (rev 1033) +++ linux4palm/linux/trunk/fs/aufs/sysaufs.c 2007-06-13 15:59:41 UTC (rev 1034) @@ -596,7 +596,7 @@ return err; } -void __exit sysaufs_fin(void) +void sysaufs_fin(void) { mutex_lock(&aufs_sbilist_mtx); unreg(&aufs_subsys, g_array, ARRAY_SIZE(g_array), &fs_subsys); Modified: linux4palm/linux/trunk/fs/aufs/wkq.c =================================================================== --- linux4palm/linux/trunk/fs/aufs/wkq.c 2007-06-13 15:16:08 UTC (rev 1033) +++ linux4palm/linux/trunk/fs/aufs/wkq.c 2007-06-13 15:59:41 UTC (rev 1034) @@ -91,8 +91,12 @@ old = wkq->max_busy; if (new <= old) break; +#ifdef __LINUX_ARM_ARCH__ + } while (atomic_cmpxchg((atomic_t *)(&wkq->max_busy), old, new) == old); +#else } while (cmpxchg(&wkq->max_busy, old, new) == old); #endif +#endif } static int enqueue(struct au_wkq *wkq, struct au_wkinfo *wkinfo) Modified: linux4palm/linux/trunk/include/linux/aufs_type.h =================================================================== --- linux4palm/linux/trunk/include/linux/aufs_type.h 2007-06-13 15:16:08 UTC (rev 1033) +++ linux4palm/linux/trunk/include/linux/aufs_type.h 2007-06-13 15:59:41 UTC (rev 1034) @@ -27,12 +27,10 @@ /* ---------------------------------------------------------------------- */ +typedef short aufs_bindex_t; #ifdef CONFIG_AUFS_BRANCH_MAX_127 -typedef char aufs_bindex_t; #define AUFS_BRANCH_MAX 127 -#else -typedef short aufs_bindex_t; -#ifdef CONFIG_AUFS_BRANCH_MAX_511 +#elif CONFIG_AUFS_BRANCH_MAX_511 #define AUFS_BRANCH_MAX 511 #elif defined(CONFIG_AUFS_BRANCH_MAX_1023) #define AUFS_BRANCH_MAX 1023 @@ -41,7 +39,6 @@ #else #error unknown CONFIG_AUFS_BRANCH_MAX value #endif -#endif #define AUFS_NAME "aufs" #define AUFS_FSTYPE AUFS_NAME @@ -56,7 +53,11 @@ #define AUFS_DIRWH_DEF 3 #define AUFS_RDCACHE_DEF 10 /* seconds */ #define AUFS_WKQ_NAME AUFS_NAME "d" +#ifdef CONFIG_AUFS_NWKQ_DEF +#define AUFS_NWKQ_DEF CONFIG_AUFS_NWKQ_DEF +#else #define AUFS_NWKQ_DEF 4 +#endif #ifdef CONFIG_AUFS_COMPAT #define AUFS_DIROPQ_NAME "__dir_opaque" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2007-06-14 16:04:47
|
Revision: 1036 http://svn.sourceforge.net/hackndev/?rev=1036&view=rev Author: marex_z71 Date: 2007-06-14 09:03:49 -0700 (Thu, 14 Jun 2007) Log Message: ----------- PalmTC: corrected GPIO functions Modified Paths: -------------- linux4palm/linux/trunk/drivers/input/touchscreen/palmtc_ts.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h Modified: linux4palm/linux/trunk/drivers/input/touchscreen/palmtc_ts.c =================================================================== --- linux4palm/linux/trunk/drivers/input/touchscreen/palmtc_ts.c 2007-06-14 15:47:55 UTC (rev 1035) +++ linux4palm/linux/trunk/drivers/input/touchscreen/palmtc_ts.c 2007-06-14 16:03:49 UTC (rev 1036) @@ -459,8 +459,8 @@ int ucb1400_battery_get_status(struct battery *b) { - int ac_connected = gpio_get_value(GPIO_NR_PALMTC_POWER_DETECT); - int usb_connected = !gpio_get_value(GPIO_NR_PALMTC_USB_DETECT); + int ac_connected = !(gpio_get_value(GPIO_NR_PALMTC_CRADLE_DETECT_N)); + int usb_connected = gpio_get_value(GPIO_NR_PALMTC_USB_DETECT); ucb1400_adc_enable(bat.ucb); if (ucb1400_adc_read(bat.ucb, UCB_ADC_INP_AD0) <= 0) Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h 2007-06-14 15:47:55 UTC (rev 1035) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtc-gpio.h 2007-06-14 16:03:49 UTC (rev 1036) @@ -12,15 +12,55 @@ /* Palm Tungsten C GPIOs */ #define GPIO_NR_PALMTC_EARPHONE_DETECT 2 -#define GPIO_NR_PALMTC_USB_DETECT 4 -#define GPIO_NR_PALMTC_POWER_DETECT 5 +#define GPIO_NR_PALMTC_CRADLE_DETECT_N 4 +#define GPIO_NR_PALMTC_USB_DETECT 5 #define GPIO_NR_PALMTC_HOTSYNC_BUTTON 7 #define GPIO_NR_PALMTC_SD_DETECT 12 // low->high when out, high->low when inserted #define GPIO_NR_PALMTC_BL_POWER 16 +#define GPIO_NR_PALMTC_USB_POWER 36 //#define GPIO_NR_PALMLD_STD_RXD 46 /* IRDA */ //#define GPIO_NR_PALMLD_STD_TXD 47 #define IRQ_GPIO_PALMTC_SD_DETECT IRQ_GPIO(GPIO_NR_PALMTC_SD_DETECT) +/* Utility macros */ + +#define GET_PALMTC_GPIO(gpio) \ + (GPLR(GPIO_NR_PALMTC_ ## gpio) & GPIO_bit(GPIO_NR_PALMTC_ ## gpio)) + +#define SET_PALMTC_GPIO(gpio, setp) \ + do { \ + if (setp) \ + GPSR(GPIO_NR_PALMTC_ ## gpio) = GPIO_bit(GPIO_NR_PALMTC_ ## gpio); \ + else \ + GPCR(GPIO_NR_PALMTC_ ## gpio) = GPIO_bit(GPIO_NR_PALMTC_ ## gpio); \ + } while (0) + +#define SET_PALMTC_GPIO_N(gpio, setp) \ + do { \ + if (setp) \ + GPCR(GPIO_NR_PALMTC_ ## gpio) = GPIO_bit(GPIO_NR_PALMTC_ ## gpio); \ + else \ + GPSR(GPIO_NR_PALMTC_ ## gpio) = GPIO_bit(GPIO_NR_PALMTC_ ## gpio); \ + } while (0) + +#define GET_GPIO(gpio) (GPLR(gpio) & GPIO_bit(gpio)) + +#define SET_GPIO(gpio, setp) \ + do { \ + if (setp) \ + GPSR(gpio) = GPIO_bit(gpio); \ + else \ + GPCR(gpio) = GPIO_bit(gpio); \ + } while (0) + +#define SET_GPIO_N(gpio, setp) \ + do { \ + if (setp) \ + GPCR(gpio) = GPIO_bit(gpio); \ + else \ + GPSR(gpio) = GPIO_bit(gpio); \ + } while (0) + #endif /* _PALMTC_GPIO_H_ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hap...@us...> - 2007-06-26 10:48:59
|
Revision: 1077 http://svn.sourceforge.net/hackndev/?rev=1077&view=rev Author: happy-slapin Date: 2007-06-26 03:48:55 -0700 (Tue, 26 Jun 2007) Log Message: ----------- PXA270+OV9640: moving platform code out Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/Kconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/gpio_map.txt linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.c linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/Kconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/Kconfig 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/Kconfig 2007-06-26 10:48:55 UTC (rev 1077) @@ -15,6 +15,7 @@ config PALMZ72_BATTERY tristate "Palm Zire 72 Battery support" select TOUCHSCREEN_WM97XX + select POWER_SUPPLY depends on MACH_PALMZ72 default m help Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/gpio_map.txt =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/gpio_map.txt 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/gpio_map.txt 2007-06-26 10:48:55 UTC (rev 1077) @@ -111,7 +111,7 @@ GPIO109 0 O 00 GPIO110 0 O 00 GPIO111 0 O 00 -GPIO112 0 O 00 +GPIO112 0 O 00 CAMERA? GPIO113 1 O 00 GPIO114 1 O 00 GPIO115 0 I 00 @@ -119,4 +119,4 @@ GPIO117 1 O 01 SCL GPIO118 1 O 01 SDA GPIO119 0 O 00 -GPIO120 0 O 00 +GPIO120 0 O 00 CAMERA? Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-06-26 10:48:55 UTC (rev 1077) @@ -447,6 +447,42 @@ platform_add_devices( devices, ARRAY_SIZE(devices) ); } +/*********************************************************************** + * + * OV9640 Functions + * + ***********************************************************************/ +void ov9640_gpio_init(void) +{ + set_GPIO_mode(81 | GPIO_ALT_FN_2_IN); /* CIF_DD[0] */ + set_GPIO_mode(55 | GPIO_ALT_FN_1_IN); /* CIF_DD[1] */ + set_GPIO_mode(51 | GPIO_ALT_FN_1_IN); /* CIF_DD[2] */ + set_GPIO_mode(50 | GPIO_ALT_FN_1_IN); /* CIF_DD[3] */ + set_GPIO_mode(52 | GPIO_ALT_FN_1_IN); /* CIF_DD[4] */ + set_GPIO_mode(48 | GPIO_ALT_FN_1_IN); /* CIF_DD[5] */ + set_GPIO_mode(93 | GPIO_ALT_FN_1_IN); /* CIF_DD[6] */ + set_GPIO_mode(108 | GPIO_ALT_FN_1_IN); /* CIF_DD[7] */ + set_GPIO_mode(53 | GPIO_ALT_FN_2_OUT); /* CIF_MCLK */ + set_GPIO_mode(54 | GPIO_ALT_FN_3_IN); /* CIF_PCLK */ + set_GPIO_mode(85 | GPIO_ALT_FN_3_IN); /* CIF_LV */ + set_GPIO_mode(84 | GPIO_ALT_FN_3_IN); /* CIF_FV */ + +#if 0 + set_GPIO_mode(50 | GPIO_OUT); /*CIF_PD */ + set_GPIO_mode(19 | GPIO_IN); /*CIF_RST */ +#endif + + return; +} + +EXPORT_SYMBOL_GPL(ov9640_gpio_init) +/*********************************************************************** + * + * end of OV9640 Functions + * + ***********************************************************************/ + + MACHINE_START(PALMZ72, "Palm Zire 72") /********************************************************/ Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c 2007-06-26 10:48:55 UTC (rev 1077) @@ -15,6 +15,7 @@ #include <linux/pm.h> #include <linux/fb.h> #include <linux/platform_device.h> +#include <linux/delay.h> #include <asm/mach-types.h> #include <asm/hardware.h> @@ -52,6 +53,9 @@ /* Turn off USB power */ SET_PALMZ72_GPIO(USB_POWER,0); + SET_PALMZ72_GPIO(BL_POWER, 0); + mdelay(50); + /* disable GPIO reset - DO NOT REMOVE! */ PCFR &= PCFR_GPR_EN; @@ -77,6 +81,9 @@ SET_PALMZ72_GPIO(SCREEN,1); /* Turn on USB power */ SET_PALMZ72_GPIO(USB_POWER,1); + /* Hack - something seems to switch it off in-between */ + SET_PALMZ72_GPIO(BL_POWER, 1); + mdelay(50); return 0; } Modified: linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.c =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.c 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.c 2007-06-26 10:48:55 UTC (rev 1077) @@ -337,41 +337,6 @@ mdelay(100); } -/*********************************************************************** - * - * OV9640 Functions - * - ***********************************************************************/ -static void ov9640_gpio_init() -{ - - set_GPIO_mode(27 | GPIO_ALT_FN_3_IN); /* CIF_DD[0] */ - set_GPIO_mode(114 | GPIO_ALT_FN_1_IN); /* CIF_DD[1] */ - set_GPIO_mode(51 | GPIO_ALT_FN_1_IN); /* CIF_DD[2] */ - set_GPIO_mode(115 | GPIO_ALT_FN_2_IN); /* CIF_DD[3] */ - set_GPIO_mode(95 | GPIO_ALT_FN_2_IN); /* CIF_DD[4] */ - set_GPIO_mode(94 | GPIO_ALT_FN_2_IN); /* CIF_DD[5] */ - set_GPIO_mode(17 | GPIO_ALT_FN_2_IN); /* CIF_DD[6] */ - set_GPIO_mode(108 | GPIO_ALT_FN_1_IN); /* CIF_DD[7] */ - set_GPIO_mode(23 | GPIO_ALT_FN_1_OUT); /* CIF_MCLK */ - set_GPIO_mode(54 | GPIO_ALT_FN_3_IN); /* CIF_PCLK */ - set_GPIO_mode(85 | GPIO_ALT_FN_3_IN); /* CIF_LV */ - set_GPIO_mode(84 | GPIO_ALT_FN_3_IN); /* CIF_FV */ - set_GPIO_mode(50 | GPIO_OUT); /*CIF_PD */ - set_GPIO_mode(19 | GPIO_IN); /*CIF_RST */ - - - return; - -} - -/*********************************************************************** - * - * end of OV9640 Functions - * - ***********************************************************************/ - - int i2c_ov9640_init(void) { int res; Modified: linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.h =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.h 2007-06-26 10:15:26 UTC (rev 1076) +++ linux4palm/linux/trunk/drivers/i2c/chips/i2c-ov9640.h 2007-06-26 10:48:55 UTC (rev 1077) @@ -40,5 +40,7 @@ int blockaddr; /* current using block address. */ unsigned long last_updated; /* In jiffies */ }; +void ov9640_gpio_init(void); + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hap...@us...> - 2007-06-30 15:52:47
|
Revision: 1098 http://svn.sourceforge.net/hackndev/?rev=1098&view=rev Author: happy-slapin Date: 2007-06-30 08:52:40 -0700 (Sat, 30 Jun 2007) Log Message: ----------- z72: making stuff work for now Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c linux4palm/linux/trunk/drivers/media/video/pxa_camera_ioctl.c linux4palm/linux/trunk/drivers/usb/storage/sddr55.c linux4palm/linux/trunk/drivers/usb/storage/sddr55.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-06-30 12:03:02 UTC (rev 1097) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-06-30 15:52:40 UTC (rev 1098) @@ -406,7 +406,7 @@ .reset_gpio = 34, .power_gpio = 32, }; - +#if 0 static struct platform_device ov9640 = { .name = "ov96xx", .id = -1, @@ -414,8 +414,8 @@ .platform_data = &ov9640_data, }, }; +#endif - /**************** * Init Machine * ****************/ @@ -430,7 +430,9 @@ #endif &palmz72_led_device, &bcm2035_bt, +#if 0 &ov9640, +#endif }; /*********************************************************************** @@ -453,40 +455,22 @@ pxa_gpio_mode(85 | GPIO_ALT_FN_3_IN); /* CIF_LV */ pxa_gpio_mode(84 | GPIO_ALT_FN_3_IN); /* CIF_FV */ +#if 0 pxa_gpio_mode(32 | GPIO_OUT); pxa_gpio_mode(34 | GPIO_OUT); -#if 0 set_GPIO_mode(50 | GPIO_OUT); /*CIF_PD */ set_GPIO_mode(19 | GPIO_IN); /*CIF_RST */ #endif - - return; } -#if 0 -void ov9640_set_powerdown_gpio(void) -{ - /* Not implemented */ -} -void ov9640_clear_powerdown_gpio(void) -{ - /* Not implemented */ -} -EXPORT_SYMBOL_GPL(ov9640_gpio_init); -EXPORT_SYMBOL_GPL(ov9640_set_powerdown_gpio); -EXPORT_SYMBOL_GPL(ov9640_clear_powerdown_gpio); /*********************************************************************** * * end of OV9640 Functions * ***********************************************************************/ -#endif - static void __init palmz72_init(void) { - GCR &= ~GCR_PRIRDY_IEN; - // disable interrupt to prevent WM9712 constantly interrupting the CPU // and preventing the boot process to complete (Thanx Alex & Shadowmite!) Modified: linux4palm/linux/trunk/drivers/media/video/pxa_camera_ioctl.c =================================================================== --- linux4palm/linux/trunk/drivers/media/video/pxa_camera_ioctl.c 2007-06-30 12:03:02 UTC (rev 1097) +++ linux4palm/linux/trunk/drivers/media/video/pxa_camera_ioctl.c 2007-06-30 15:52:40 UTC (rev 1098) @@ -104,6 +104,7 @@ } return 0; } + static int pxa_camera_VIDIOCGWIN(p_camera_context_t cam_ctx, void * param) { struct video_window vw; @@ -116,6 +117,7 @@ } return 0; } + static int pxa_camera_VIDIOCSWIN(p_camera_context_t cam_ctx, void * param) { struct video_window vw; @@ -147,6 +149,7 @@ return camera_set_capture_format(cam_ctx); } + static int pxa_camera_VIDIOCSPICT(p_camera_context_t cam_ctx, void * param) { struct video_picture vp; Modified: linux4palm/linux/trunk/drivers/usb/storage/sddr55.c =================================================================== --- linux4palm/linux/trunk/drivers/usb/storage/sddr55.c 2007-06-30 12:03:02 UTC (rev 1097) +++ linux4palm/linux/trunk/drivers/usb/storage/sddr55.c 2007-06-30 15:52:40 UTC (rev 1098) @@ -1,6 +1,6 @@ /* Driver for SanDisk SDDR-55 SmartMedia reader * - * $Id:$ + * $Id$ * * SDDR55 driver v0.1: * Modified: linux4palm/linux/trunk/drivers/usb/storage/sddr55.h =================================================================== --- linux4palm/linux/trunk/drivers/usb/storage/sddr55.h 2007-06-30 12:03:02 UTC (rev 1097) +++ linux4palm/linux/trunk/drivers/usb/storage/sddr55.h 2007-06-30 15:52:40 UTC (rev 1098) @@ -1,7 +1,7 @@ /* Driver for SanDisk SDDR-55 SmartMedia reader * Header File * - * $Id:$ + * $Id$ * * Current development and maintenance by: * (c) 2002 Simon Munton This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sle...@us...> - 2007-07-05 11:04:07
|
Revision: 1105 http://svn.sourceforge.net/hackndev/?rev=1105&view=rev Author: sleep_walker Date: 2007-07-05 04:03:48 -0700 (Thu, 05 Jul 2007) Log Message: ----------- palmtt3: cumulative patch - led support, power button initial support Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c linux4palm/linux/trunk/drivers/i2c/chips/Kconfig linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c linux4palm/linux/trunk/drivers/input/misc/Kconfig linux4palm/linux/trunk/drivers/input/misc/Makefile linux4palm/linux/trunk/drivers/leds/Kconfig linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -36,9 +36,10 @@ #include <asm/arch/pxa-pm_ll.h> #include <asm/arch/pxapwm-bl.h> + #include "../generic.h" -// FIXME move this to include/asm/arch/plamt3.h some time +// FIXME move this to include/asm/arch/palmtt3.h some time #define PALMT3_GPIO_TSC2101_SS (24) #define PALMT3_GPIO_PENDOWN (37) #define PALMT3_IRQ_GPIO_PENDOWN IRQ_GPIO(PALMT3_GPIO_PENDOWN) @@ -201,6 +202,19 @@ .period = 0x12B, }; +/*** LEDs ***/ +static struct platform_device palmtt3_led_device = { + .name = "palmtt3-led", + .id = -1, +}; + +/*** Power button ***/ +static struct platform_device palmtt3_power_button = { + .name = "palmtt3-pwr_btn", + .id = -1, +}; + + static struct platform_device palmt3_backlight_device = { .name = "pxapwm-bl", .dev = { @@ -215,7 +229,7 @@ void palmt3_suspend(unsigned long ret) { unsigned long * addr; - + addr = (unsigned long *) 0xC0000000; _PM_backup[0] = *addr; *addr = 0xFEEDC0DE; @@ -260,6 +274,8 @@ &tsc2101_device, &palmt3_btn_device, &palmt3_backlight_device, + &palmtt3_led_device, + &palmtt3_power_button, }; static void __init palmt3_init(void) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -230,7 +230,7 @@ unsigned long flags, ret; buttons_dev = input_allocate_device(); - buttons_dev->evbit[0] = BIT(EV_KEY); + buttons_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); buttons_dev->name = "Palm T|T3 buttons"; buttons_dev->id.bustype = BUS_HOST; Modified: linux4palm/linux/trunk/drivers/i2c/chips/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -115,7 +115,7 @@ # and having mostly OMAP-specific board support config TPS65010 tristate "TPS6501x Power Management chips" - depends on I2C && (ARCH_OMAP || MACH_T3XSCALE) + depends on I2C && (ARCH_OMAP || (MACH_T3XSCALE && INPUT_PALMTT3_PWRBTN)) default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK help If you say yes here you get support for the TPS6501x series of Modified: linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -40,6 +40,11 @@ #ifdef CONFIG_MACH_T3XSCALE // T3 patch // FIXME xscale GPIOs #include <asm/arch/irqs.h> + +#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) +extern int palmtt3_pwr_btn_press(void); +#endif + #define T3_TPS65010_GPIO 14 #else @@ -48,7 +53,6 @@ #endif // T3 patch #include <asm/arch/tps65010.h> - /*-------------------------------------------------------------------------*/ #define DRIVER_VERSION "2 May 2005" @@ -109,7 +113,7 @@ /* not currently tracking GPIO state */ }; -#define POWER_POLL_DELAY msecs_to_jiffies(5000) +#define POWER_POLL_DELAY msecs_to_jiffies(500) /*-------------------------------------------------------------------------*/ @@ -358,6 +362,11 @@ /* "off" usually means deep sleep */ if (tmp & TPS_REG_ONOFF) { pr_info("%s: power off button\n", DRIVER_NAME); + +#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) + palmtt3_pwr_btn_press(); +#endif + #if 0 /* REVISIT: this might need its own workqueue * plus tweaks including deadlock avoidance ... @@ -547,11 +556,11 @@ #ifdef CONFIG_ARM #ifdef CONFIG_MACH_T3XSCALE // T3 patch - irqflags = SA_SAMPLE_RANDOM; + irqflags = IRQF_SAMPLE_RANDOM; tps->model = TPS65010; tps->irq = IRQ_GPIO(T3_TPS65010_GPIO); // is it ok to do this here? -// set_irq_type (IRQ_GPIO(T3_TPS65010_GPIO), IRQT_FALLING); + set_irq_type (IRQ_GPIO(T3_TPS65010_GPIO), IRQT_FALLING); #else if (machine_is_omap_h2()) { tps->model = TPS65010; Modified: linux4palm/linux/trunk/drivers/input/misc/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -89,4 +89,10 @@ Say Y here if you want to support the built-in real time clock of the HP SDC controller. +config INPUT_PALMTT3_PWRBTN + tristate "Palm Tungsten|T3 Power Button" + depends on MACH_T3XSCALE + help + Say Y here if you want to support the power button of Palm Tungsten|T3 Power Button. + endif Modified: linux4palm/linux/trunk/drivers/input/misc/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-05 11:03:48 UTC (rev 1105) @@ -12,3 +12,4 @@ obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o +obj-$(CONFIG_INPUT_PALMTT3_PWRBTN) += palmtt3-pwr_btn.o Modified: linux4palm/linux/trunk/drivers/leds/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -198,7 +198,7 @@ config LEDS_TRIGGER_MMC_CARD bool "LED MMC Card Trigger" - depends on LEDS_TRIGGERS && MMC_PXA && ARCH_PXA + depends on LEDS_TRIGGERS && ARCH_PXA && (MMC_PXA || MMC_WBSD_PALMT3) help This allows LEDs to be controlled by MMC card activity on Intel PXA 25x/26x/27x MMC interface . If unsure, say Y. Modified: linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c =================================================================== --- linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -1,5 +1,5 @@ /* - * Palm LifeDrive LED Driver + * Palm Tungsten|T3 LED Driver * * Author: Tomas Cech <Tom...@ma...> * @@ -22,41 +22,82 @@ static void palmtt3led_red_set(struct led_classdev *led_cdev, enum led_brightness value) { - if (value <= 85) - tps65010_set_led(LED2, OFF); - else - if (value <= 170) + if (value) tps65010_set_led(LED2, ON); else - tps65010_set_led(LED2, BLINK); + tps65010_set_led(LED2, OFF); } static void palmtt3led_green_set(struct led_classdev *led_cdev, enum led_brightness value) { - if (value <= 85) - tps65010_set_led(LED1, OFF); - else - if (value <= 170) + if (value) tps65010_set_led(LED1, ON); else +/* NOTE: This is set to UNDER_CHG_CTRL, not to OFF... It shows charging status - plugged/unplugged... */ + tps65010_set_led(LED1, UNDER_CHG_CTRL); +} + +static void palmtt3led_red_blink_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) + tps65010_set_led(LED2, BLINK); + else + tps65010_set_led(LED2, OFF); +} + +static void palmtt3led_green_blink_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) tps65010_set_led(LED1, BLINK); + else +/* NOTE: This is set to UNDER_CHG_CTRL, not to OFF... It shows charging status - plugged/unplugged... */ + tps65010_set_led(LED1, UNDER_CHG_CTRL); } +static void palmtt3_vibra_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) + tps65010_set_vib(ON); + else + tps65010_set_vib(OFF); +} + + static struct led_classdev palmtt3_red_led = { - .name = "palmtt3:red", + .name = "red", .brightness_set = palmtt3led_red_set, + .default_trigger = "mmc-card", }; static struct led_classdev palmtt3_green_led = { - .name = "palmtt3:green", + .name = "green", .brightness_set = palmtt3led_green_set, }; +static struct led_classdev palmtt3_red_blink_led = { + .name = "red_blink", + .brightness_set = palmtt3led_red_blink_set, +}; + +static struct led_classdev palmtt3_green_blink_led = { + .name = "green_blink", + .brightness_set = palmtt3led_green_blink_set, +}; + +static struct led_classdev palmtt3_vibra = { + .name = "vibra", + .brightness_set = palmtt3_vibra_set, +}; + + #ifdef CONFIG_PM static int palmtt3led_suspend(struct platform_device *dev, pm_message_t state) { led_classdev_suspend(&palmtt3_red_led); led_classdev_suspend(&palmtt3_green_led); + led_classdev_suspend(&palmtt3_red_blink_led); + led_classdev_suspend(&palmtt3_green_blink_led); + led_classdev_suspend(&palmtt3_vibra); return 0; } @@ -64,6 +105,9 @@ { led_classdev_resume(&palmtt3_red_led); led_classdev_resume(&palmtt3_green_led); + led_classdev_resume(&palmtt3_red_blink_led); + led_classdev_resume(&palmtt3_green_blink_led); + led_classdev_resume(&palmtt3_vibra); return 0; } #endif @@ -80,6 +124,26 @@ if (ret < 0) led_classdev_unregister(&palmtt3_red_led); + ret = led_classdev_register(&pdev->dev, &palmtt3_red_blink_led); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + } + + ret = led_classdev_register(&pdev->dev, &palmtt3_green_blink_led); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + } + ret = led_classdev_register(&pdev->dev, &palmtt3_vibra); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + led_classdev_unregister(&palmtt3_green_blink_led); + } + return ret; } @@ -87,6 +151,9 @@ { led_classdev_unregister(&palmtt3_red_led); led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + led_classdev_unregister(&palmtt3_green_blink_led); + led_classdev_unregister(&palmtt3_vibra); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sle...@us...> - 2007-07-07 10:14:59
|
Revision: 1114 http://svn.sourceforge.net/hackndev/?rev=1114&view=rev Author: sleep_walker Date: 2007-07-07 03:14:52 -0700 (Sat, 07 Jul 2007) Log Message: ----------- palmtt3: cumulative patch - UDC, HW UART, BT UART, IrDA support added (BT+IrDA still not working), Power Button reworked, suspend LED problem fixed, created palmtt3-gpio.h, starting to rename from palmt3 to correct palmtt3 Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c linux4palm/linux/trunk/drivers/i2c/chips/Kconfig linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c linux4palm/linux/trunk/drivers/input/misc/Kconfig linux4palm/linux/trunk/drivers/input/misc/Makefile linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c Added Paths: ----------- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h Removed Paths: ------------- linux4palm/linux/trunk/drivers/input/misc/palmtt3-pwr_btn.c Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -30,25 +30,28 @@ #include <asm/arch/ssp.h> #include <asm/arch/irq.h> //test #include <asm/arch/hardware.h> //test +#include <asm/arch/irda.h> +#include <linux/delay.h> +#include <asm/arch/udc.h> +#include <asm/arch/serial.h> #include <linux/input.h> #include <linux/soc/tsc2101.h> #include <asm/arch/pxa-pm_ll.h> #include <asm/arch/pxapwm-bl.h> +#include <asm/arch/palmtt3-gpio.h> +#include <asm/arch/tps65010.h> #include "../generic.h" // FIXME move this to include/asm/arch/palmtt3.h some time -#define PALMT3_GPIO_TSC2101_SS (24) -#define PALMT3_GPIO_PENDOWN (37) -#define PALMT3_IRQ_GPIO_PENDOWN IRQ_GPIO(PALMT3_GPIO_PENDOWN) #define DEBUG 1 /*** FRAMEBUFFER ***/ -static void palmt3_pxafb_backlight_power(int level) +static void palmtt3_pxafb_backlight_power(int level) { // just turn it on/off, other controls via backlight class if(level) @@ -57,7 +60,7 @@ CKEN = CKEN & (~CKEN1_PWM1); } -static void palmt3_pxafb_lcd_power(int level, struct fb_var_screeninfo *var) +static void palmtt3_pxafb_lcd_power(int level, struct fb_var_screeninfo *var) { if(level) { GPSR1 = GPIO_bit(38); @@ -74,7 +77,7 @@ /*** framebuffer ***/ -static struct pxafb_mode_info palmt3_lcd_modes[] = { +static struct pxafb_mode_info palmtt3_lcd_modes[] = { { .pixclock = 0, .xres = 320, @@ -90,32 +93,30 @@ } }; -static struct pxafb_mach_info palmt3_lcd_screen[] = { - { - .modes = palmt3_lcd_modes, - .num_modes = ARRAY_SIZE(palmt3_lcd_modes), +static struct pxafb_mach_info palmtt3_lcd_screen = { + .modes = palmtt3_lcd_modes, + .num_modes = ARRAY_SIZE(palmtt3_lcd_modes), .lccr0 = 0x003008F9, .lccr3 = 0x03700002, - .pxafb_backlight_power = &palmt3_pxafb_backlight_power, - .pxafb_lcd_power = &palmt3_pxafb_lcd_power, - } + .pxafb_backlight_power = &palmtt3_pxafb_backlight_power, + .pxafb_lcd_power = &palmtt3_pxafb_lcd_power, }; /*** SSP ***/ -static struct ssp_dev palmt3_ssp_dev; +static struct ssp_dev palmtt3_ssp_dev; -void palmt3_ssp_init(void) +void palmtt3_ssp_init(void) { - printk(KERN_WARNING "palmt3_tsc2101: Resetting SSP, move this to garux?\n"); + printk(KERN_WARNING "palmtt3_tsc2101: Resetting SSP, move this to garux?\n"); SSCR0 &= ~SSCR0_SSE; SSCR1 = SSCR1 & 0x3FFC; - if (ssp_init(&palmt3_ssp_dev, 1, 0)) - printk(KERN_ERR "palmt3_tsc2101: Unable to register SSP handler!\n"); + if (ssp_init(&palmtt3_ssp_dev, 1, 0)) + printk(KERN_ERR "palmtt3_tsc2101: Unable to register SSP handler!\n"); else { - ssp_enable(&palmt3_ssp_dev); - printk(KERN_INFO "palmt3_tsc2101: SSP device initialized\n"); + ssp_enable(&palmtt3_ssp_dev); + printk(KERN_INFO "palmtt3_tsc2101: SSP device initialized\n"); } return; @@ -123,77 +124,77 @@ struct ssp_state ssp1; -void palmt3_ssp_suspend(void) +void palmtt3_ssp_suspend(void) { - ssp_disable(&palmt3_ssp_dev); - ssp_save_state(&palmt3_ssp_dev,&ssp1); + ssp_disable(&palmtt3_ssp_dev); + ssp_save_state(&palmtt3_ssp_dev,&ssp1); // FIXME power off TSC2101? } -void palmt3_ssp_resume(void) +void palmtt3_ssp_resume(void) { // FIXME power on TSC2101? - ssp_restore_state(&palmt3_ssp_dev,&ssp1); - ssp_enable(&palmt3_ssp_dev); + ssp_restore_state(&palmtt3_ssp_dev,&ssp1); + ssp_enable(&palmtt3_ssp_dev); } /*** Touchscreen/Sound/Battery Status ***/ -void palmt3_tsc2101_send(int read, int command, int *values, int numval) +void palmtt3_tsc2101_send(int read, int command, int *values, int numval) { u32 ret; int i; - GPCR0 = GPIO_bit(PALMT3_GPIO_TSC2101_SS); + GPCR0 = GPIO_bit(PALMTT3_GPIO_TSC2101_SS); - ssp_write_word(&palmt3_ssp_dev, command | read); - ssp_read_word(&palmt3_ssp_dev, &ret); /* Dummy read */ + ssp_write_word(&palmtt3_ssp_dev, command | read); + ssp_read_word(&palmtt3_ssp_dev, &ret); /* Dummy read */ for (i = 0; i < numval; i++) { if (read) { - ssp_write_word(&palmt3_ssp_dev, 0); - ssp_read_word(&palmt3_ssp_dev, &values[i]); + ssp_write_word(&palmtt3_ssp_dev, 0); + ssp_read_word(&palmtt3_ssp_dev, &values[i]); } else { - ssp_write_word(&palmt3_ssp_dev, values[i]); - ssp_read_word(&palmt3_ssp_dev, &ret); /* Dummy read */ + ssp_write_word(&palmtt3_ssp_dev, values[i]); + ssp_read_word(&palmtt3_ssp_dev, &ret); /* Dummy read */ } } - GPSR0 = GPIO_bit(PALMT3_GPIO_TSC2101_SS); + GPSR0 = GPIO_bit(PALMTT3_GPIO_TSC2101_SS); } -static int palmt3_tsc2101_pendown(void) +static int palmtt3_tsc2101_pendown(void) { // FIXME PALMT3_GPIO_PENDOWN - if ((GPLR(PALMT3_GPIO_PENDOWN) & GPIO_bit(PALMT3_GPIO_PENDOWN)) == 0) + if ((GPLR(PALMTT3_GPIO_PENDOWN) & GPIO_bit(PALMTT3_GPIO_PENDOWN)) == 0) return 1; return 0; } -static struct tsc2101_platform_info palmt3_tsc2101_info = { - .send = palmt3_tsc2101_send, - .suspend = palmt3_ssp_suspend, - .resume = palmt3_ssp_resume, - .irq = PALMT3_IRQ_GPIO_PENDOWN, - .pendown = palmt3_tsc2101_pendown, +static struct tsc2101_platform_info palmtt3_tsc2101_info = { + .send = palmtt3_tsc2101_send, + .suspend = palmtt3_ssp_suspend, + .resume = palmtt3_ssp_resume, + .irq = PALMTT3_IRQ_GPIO_PENDOWN, + .pendown = palmtt3_tsc2101_pendown, }; struct platform_device tsc2101_device = { .name = "tsc2101", .dev = { - .platform_data = &palmt3_tsc2101_info, + .platform_data = &palmtt3_tsc2101_info, }, .id = -1, }; /*** Buttons ***/ -static struct platform_device palmt3_btn_device = { - .name = "palmt3-btn", +static struct platform_device palmtt3_btn_device = { + .name = "palmtt3-btn", .id = -1, }; /* Backlight ***/ -static struct pxapwmbl_platform_data palmt3_backlight_data = { +static struct pxapwmbl_platform_data palmtt3_backlight_data = { .pwm = 1, .max_intensity = 0x100, .default_intensity = 0x50, @@ -210,23 +211,195 @@ /*** Power button ***/ static struct platform_device palmtt3_power_button = { - .name = "palmtt3-pwr_btn", + .name = "tps65010-pwr_btn", .id = -1, }; -static struct platform_device palmt3_backlight_device = { +/*** IRDA ***/ + +static void palmtt3_irda_transceiver_mode(struct device *dev, int mode) +{ + unsigned long flags; + + local_irq_save(flags); + + if (mode & IR_SIRMODE){ + printk (KERN_INFO "IrDA: setting mode to SIR\n"); + } + else if (mode & IR_FIRMODE){ + printk (KERN_INFO "IrDA: setting mode to FIR\n"); + } + if (mode & IR_OFF){ + printk (KERN_INFO "IrDA: turning OFF\n"); + SET_GPIO(GPIO_NR_PALMTT3_IR_DISABLE, 1); + } + else { + printk (KERN_INFO "IrDA: turning ON\n"); + SET_GPIO(GPIO_NR_PALMTT3_IR_DISABLE, 0); + SET_GPIO(GPIO46_STRXD_MD, 1); + mdelay(30); + SET_GPIO(GPIO46_STRXD_MD, 0); + } + + local_irq_restore(flags); +} + + +static struct pxaficp_platform_data palmtt3_ficp_platform_data = { + .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, + .transceiver_mode = palmtt3_irda_transceiver_mode, +}; + + +/*** Backlight ***/ +static struct platform_device palmtt3_backlight_device = { .name = "pxapwm-bl", .dev = { - .platform_data = &palmt3_backlight_data, + .platform_data = &palmtt3_backlight_data, }, }; +/******* + * USB * + *******/ + +static int palmtt3_udc_is_connected (void){ + int ret = GET_GPIO(GPIO_NR_PALMTT3_USB_DETECT); + if (ret) + printk (KERN_INFO "palmtt3_udc: device detected [USB_DETECT: %d]\n",ret); + else + printk (KERN_INFO "palmtt3_udc: no device detected [USB_DETECT: %d]\n",ret); + + return ret; +} + +static void palmtt3_udc_command (int cmd){ + + switch (cmd) { + case PXA2XX_UDC_CMD_DISCONNECT: + SET_GPIO(GPIO_NR_PALMTT3_PUC_USB_POWER, 0); + SET_GPIO(GPIO_NR_PALMTT3_USB_POWER, 1); + printk(KERN_INFO "palmtt3_udc: got command PXA2XX_UDC_CMD_DISCONNECT\n"); + break; + case PXA2XX_UDC_CMD_CONNECT: + SET_GPIO(GPIO_NR_PALMTT3_USB_POWER, 0); + SET_GPIO(GPIO_NR_PALMTT3_PUC_USB_POWER, 1); + printk(KERN_INFO "palmtt3_udc: got command PXA2XX_UDC_CMD_CONNECT\n"); + break; + default: + printk("palmtt3_udc: unknown command '%d'\n", cmd); + } +} + +static struct pxa2xx_udc_mach_info palmtt3_udc_mach_info __initdata = { + .udc_is_connected = palmtt3_udc_is_connected, + .udc_command = palmtt3_udc_command, +}; + + +/*** HW UART - serial in PUC ***/ +int palmtt3_hwuart_state; + +void palmtt3_hwuart_configure(int state) +{ + switch (state) { + case PXA_UART_CFG_PRE_STARTUP: + break; + case PXA_UART_CFG_POST_STARTUP: + SET_GPIO(35,0); + SET_GPIO(35,1); + palmtt3_hwuart_state = 1; + break; + case PXA_UART_CFG_PRE_SHUTDOWN: + SET_GPIO(35,0); + palmtt3_hwuart_state = 0; + break; + case PXA_UART_CFG_POST_SHUTDOWN: + break; + default: + printk("palmtt3_hwuart_configure: bad request %d\n",state); + break; + } +} + +static int palmtt3_hwuart_suspend(struct platform_device *dev, pm_message_t state) +{ + palmtt3_hwuart_configure(PXA_UART_CFG_PRE_SHUTDOWN); + return 0; +} + +static int palmtt3_hwuart_resume(struct platform_device *dev) +{ + palmtt3_hwuart_configure(PXA_UART_CFG_POST_STARTUP); + return 0; +} + +struct platform_pxa_serial_funcs palmtt3_hwuart = { + .configure = palmtt3_hwuart_configure, +/* + .set_txrx = palmtt3_hwuart_set_txrx, + .get_txrx = NULL, +*/ + .suspend = palmtt3_hwuart_suspend, + .resume = palmtt3_hwuart_resume, +}; + +/* Bluetooth */ + +void bcm2035_bt_reset(int on) +{ + printk(KERN_NOTICE "Switch BT reset %d\n", on); + if (on) + SET_GPIO(GPIO_NR_PALMTT3_RESET, 1); + else + SET_GPIO(GPIO_NR_PALMTT3_RESET, 0 ); +} +EXPORT_SYMBOL(bcm2035_bt_reset); + +void bcm2035_bt_power(int on) +{ + printk(KERN_NOTICE "Switch BT power %d\n", on); + if (on) + tps65010_set_gpio_out_value(GPIO_NR_PALMTT3_TPS65010_BT_POWER,1); + else + tps65010_set_gpio_out_value(GPIO_NR_PALMTT3_TPS65010_BT_POWER,0); +} +EXPORT_SYMBOL(bcm2035_bt_power); + + +struct bcm2035_bt_funcs { + void (*configure) ( int state ); +}; + +static struct bcm2035_bt_funcs bt_funcs; + +static void +bcm2035_bt_configure( int state ) +{ + if (bt_funcs.configure != NULL) + bt_funcs.configure( state ); +} + +static struct platform_pxa_serial_funcs bcm2035_pxa_bt_funcs = { + .configure = bcm2035_bt_configure, +}; + +static struct platform_device bcm2035_bt = { + .name = "bcm2035-bt", + .id = -1, + .dev = { + .platform_data = &bt_funcs, + }, +}; + + + /*** Suspend/Resume ***/ #ifdef CONFIG_PM static long int _PM_backup[3]; -void palmt3_suspend(unsigned long ret) +void palmtt3_suspend(unsigned long ret) { unsigned long * addr; @@ -242,12 +415,24 @@ _PM_backup[2] = *addr; *addr = ret; - PWER = 0x5C0F; - PFER = 0x3; - PEDR = 0x3; + /* event settings for waking-up */ + PWER = 0; + PWER |= PWER_RTC; /* enabling RTC alarm for wake-up */ + PWER |= PWER_WEP1; /* enabling RTC alarm for wake-up */ + PWER |= PWER_GPIO0; /* calendar/contacts/voice */ + PWER |= PWER_GPIO1; /* Active low GP_reset */ +/* PWER |= PWER_GPIO2; card insert - disabled - linux dislike ejecting card with mounted filesystem :) */ + PWER |= PWER_GPIO3; /* slider */ + PWER |= PWER_GPIO10; /* 5nav up/down/left/right */ + PWER |= PWER_GPIO11; /* memo/todo/center */ + PWER |= PWER_GPIO12; /* HotSync button on cradle */ + PWER |= PWER_GPIO14; /* power button */ + + PFER = PWER_GPIO0 | PWER_GPIO1 | PWER_GPIO11 | PWER_GPIO14; + PEDR = PWER_GPIO0 | PWER_GPIO1; } -void palmt3_resume(void) +void palmtt3_resume(void) { unsigned long * addr; @@ -261,9 +446,9 @@ *addr = _PM_backup[2]; } -static struct pxa_ll_pm_ops palmt3_pm_ops = { - .suspend = palmt3_suspend, - .resume = palmt3_resume, +static struct pxa_ll_pm_ops palmtt3_pm_ops = { + .suspend = palmtt3_suspend, + .resume = palmtt3_resume, }; #endif @@ -272,19 +457,25 @@ static struct platform_device *devices[] __initdata = { //&palmt3_bl_device, &tsc2101_device, - &palmt3_btn_device, - &palmt3_backlight_device, + &palmtt3_btn_device, + &palmtt3_backlight_device, &palmtt3_led_device, &palmtt3_power_button, + &bcm2035_bt, }; -static void __init palmt3_init(void) + +static void __init palmtt3_init(void) { - set_pxa_fb_info(palmt3_lcd_screen); #ifdef CONFIG_PM - pxa_pm_set_ll_ops(&palmt3_pm_ops); + pxa_pm_set_ll_ops(&palmtt3_pm_ops); #endif - palmt3_ssp_init(); + palmtt3_ssp_init(); + pxa_set_ficp_info(&palmtt3_ficp_platform_data); + set_pxa_fb_info(&palmtt3_lcd_screen); + pxa_set_udc_info(&palmtt3_udc_mach_info); + pxa_set_hwuart_info(&palmtt3_hwuart); + pxa_set_btuart_info(&bcm2035_pxa_bt_funcs); platform_add_devices (devices, ARRAY_SIZE (devices)); } @@ -296,5 +487,5 @@ .map_io = pxa_map_io, .init_irq = pxa_init_irq, .timer = &pxa_timer, - .init_machine = palmt3_init + .init_machine = palmtt3_init MACHINE_END Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_battery.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -37,13 +37,13 @@ #define BATTERY_CHECK_INTERVAL (HZ * 60) /* every 60 seconds */ -int palmt3_battery_get_max_voltage(struct battery *bat) +int palmtt3_battery_get_max_voltage(struct battery *bat) { //return 4147; // approx. 4.21 V, 2718 as returned by TSC return 4156; // strange, but this is my current upper limit. so it be. } -int palmt3_battery_get_min_voltage(struct battery *bat) +int palmtt3_battery_get_min_voltage(struct battery *bat) { return 3710; // 3.71 V, Critical Threshold set by PalmOS } @@ -53,7 +53,7 @@ return 1; } -int palmt3_battery_get_voltage(struct battery *bat) +int palmtt3_battery_get_voltage(struct battery *bat) { struct device_driver *tscdrv; struct device *tscdev; @@ -83,51 +83,51 @@ return (batv*6250)/4096; } -int palmt3_charger_get_usb_status(struct charger *cha) +int palmtt3_charger_get_usb_status(struct charger *cha) { u8 tps65010_get_chgstatus(void); return ((tps65010_get_chgstatus() & TPS_CHG_USB)?1:0); } -int palmt3_charger_get_ac_status(struct charger *cha) +int palmtt3_charger_get_ac_status(struct charger *cha) { u8 tps65010_get_chgstatus(void); return ((tps65010_get_chgstatus() & TPS_CHG_AC)?1:0); } #ifdef CONFIG_BATTCHARGE_MONITOR -static struct battery palmt3_battery = { - .name = "palmt3_batt", +static struct battery palmtt3_battery = { + .name = "palmtt3_batt", .id = "Li-Ion battery", .min_voltage = 3710, .max_voltage = 4156, .v_current = -1, .temp = -1, - .get_voltage = palmt3_battery_get_voltage, + .get_voltage = palmtt3_battery_get_voltage, }; -static struct charger palmt3_usb_charger = { - .name = "palmt3_usb", +static struct charger palmtt3_usb_charger = { + .name = "palmtt3_usb", .id = "USB", - .get_status = palmt3_charger_get_usb_status, + .get_status = palmtt3_charger_get_usb_status, }; -static struct charger palmt3_ac_charger = { - .name = "palmt3_ac", +static struct charger palmtt3_ac_charger = { + .name = "palmtt3_ac", .id = "AC", - .get_status = palmt3_charger_get_ac_status, + .get_status = palmtt3_charger_get_ac_status, }; #endif /* -------------------------- APM ------------------------------------- */ -static void palmt3_apm_get_power_status(struct apm_power_info *info) +static void palmtt3_apm_get_power_status(struct apm_power_info *info) { int tps65010_get_charging(void); int min, max, curr, percent; - curr = palmt3_battery_get_voltage(NULL); - min = palmt3_battery_get_min_voltage(NULL); - max = palmt3_battery_get_max_voltage(NULL); + curr = palmtt3_battery_get_voltage(NULL); + min = palmtt3_battery_get_min_voltage(NULL); + max = palmtt3_battery_get_max_voltage(NULL); curr = curr - min; if (curr < 0) curr = 0; @@ -167,58 +167,58 @@ /* -------------------------------------------------------------------- */ -static int palmt3_battery_probe(struct device *dev) +static int palmtt3_battery_probe(struct device *dev) { - printk("Battery interface for palmt3 series\n"); + printk("Battery interface for palmtt3 series\n"); return 0; } -static struct device_driver palmt3_battery_driver = { - .name = "palmt3_battchargemon", +static struct device_driver palmtt3_battery_driver = { + .name = "palmtt3_battchargemon", .bus = &platform_bus_type, - .probe = palmt3_battery_probe, + .probe = palmtt3_battery_probe, }; -static int __init palmt3_battery_init(void) +static int __init palmtt3_battery_init(void) { int retval; - retval = driver_register(&palmt3_battery_driver); + retval = driver_register(&palmtt3_battery_driver); if (retval) return retval; #ifdef CONFIG_BATTCHARGE_MONITOR - retval = battery_class_register(&palmt3_battery); - retval = charger_class_register(&palmt3_usb_charger); - retval = charger_class_register(&palmt3_ac_charger); + retval = battery_class_register(&palmtt3_battery); + retval = charger_class_register(&palmtt3_usb_charger); + retval = charger_class_register(&palmtt3_ac_charger); - battery_attach_charger(&palmt3_battery, &palmt3_usb_charger); - battery_attach_charger(&palmt3_battery, &palmt3_ac_charger); + battery_attach_charger(&palmtt3_battery, &palmtt3_usb_charger); + battery_attach_charger(&palmtt3_battery, &palmtt3_ac_charger); - battery_update_charge_link(&palmt3_battery); + battery_update_charge_link(&palmtt3_battery); #endif if (!retval) { #ifdef CONFIG_PM - set_apm_get_power_status(palmt3_apm_get_power_status); + set_apm_get_power_status(palmtt3_apm_get_power_status); #endif } return retval; } -static void __exit palmt3_battery_exit(void) +static void __exit palmtt3_battery_exit(void) { #ifdef CONFIG_BATTCHARGE_MONITOR - battery_remove_charger(0, &palmt3_ac_charger); - battery_remove_charger(0, &palmt3_usb_charger); + battery_remove_charger(0, &palmtt3_ac_charger); + battery_remove_charger(0, &palmtt3_usb_charger); - charger_class_unregister(&palmt3_usb_charger); - charger_class_unregister(&palmt3_ac_charger); - battery_class_unregister(&palmt3_battery); - driver_unregister(&palmt3_battery_driver); + charger_class_unregister(&palmtt3_usb_charger); + charger_class_unregister(&palmtt3_ac_charger); + battery_class_unregister(&palmtt3_battery); + driver_unregister(&palmtt3_battery_driver); #endif } -module_init(palmt3_battery_init); -module_exit(palmt3_battery_exit); +module_init(palmtt3_battery_init); +module_exit(palmtt3_battery_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Vladimir Pouzanov"); Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -1,5 +1,5 @@ /* - * Palm T|T3 hardware buttons + * Palm Tungsten|T3 hardware buttons * * Author: Vladimir "Farcaller" Pouzanov <far...@gm...>, Martin Kupec * @@ -77,24 +77,24 @@ struct input_dev *buttons_dev; -static struct workqueue_struct *palmt3_workqueue; -static struct work_struct palmt3_irq_task; +static struct workqueue_struct *palmtt3_workqueue; +static struct work_struct palmtt3_irq_task; static spinlock_t btn_lock = SPIN_LOCK_UNLOCKED; u16 key_status; u8 slider; -static irqreturn_t palmt3_btn_handle(int irq, void *dev_id) +static irqreturn_t palmtt3_btn_handle(int irq, void *dev_id) { if((int) dev_id == 3) slider = 1; - queue_work(palmt3_workqueue, &palmt3_irq_task); + queue_work(palmtt3_workqueue, &palmtt3_irq_task); return IRQ_HANDLED; } -static void palmt3_irq_queuework(struct work_struct *data) +static void palmtt3_irq_queuework(struct work_struct *data) { unsigned long flags; int row, gpio, i; @@ -225,7 +225,7 @@ } } -static int palmt3_btn_probe(struct platform_device *dev) +static int palmtt3_btn_probe(struct platform_device *dev) { unsigned long flags, ret; @@ -251,8 +251,8 @@ key_status = 0; - palmt3_workqueue = create_workqueue("palmt3btnw"); - INIT_WORK(&palmt3_irq_task, palmt3_irq_queuework); + palmtt3_workqueue = create_workqueue("palmtt3btnw"); + INIT_WORK(&palmtt3_irq_task, palmtt3_irq_queuework); /* Configure GPIOs as Output and low */ spin_lock_irqsave(&btn_lock, flags); @@ -274,7 +274,7 @@ spin_unlock_irqrestore(&btn_lock, flags); #define REG_GPIO(x, e) \ - ret = request_irq (IRQ_GPIO(x), palmt3_btn_handle, SA_SAMPLE_RANDOM, "palmt3_btn", (void*)x); \ + ret = request_irq (IRQ_GPIO(x), palmtt3_btn_handle, SA_SAMPLE_RANDOM, "palmtt3_btn", (void*)x); \ set_irq_type (IRQ_GPIO(x), e); \ if(ret!=0) { \ DBG("Request GPIO: %d failed\n", x); \ @@ -291,9 +291,9 @@ return 0; } -static int palmt3_btn_remove (struct platform_device *dev) +static int palmtt3_btn_remove (struct platform_device *dev) { - destroy_workqueue(palmt3_workqueue); + destroy_workqueue(palmtt3_workqueue); input_unregister_device(buttons_dev); free_irq(IRQ_GPIO(0), (void*) 0); @@ -303,31 +303,31 @@ return 0; } -static struct platform_driver palmt3_buttons_driver = { +static struct platform_driver palmtt3_buttons_driver = { .driver = { - .name = "palmt3-btn", + .name = "palmtt3-btn", .owner = THIS_MODULE, }, - .probe = palmt3_btn_probe, - .remove = palmt3_btn_remove, + .probe = palmtt3_btn_probe, + .remove = palmtt3_btn_remove, #ifdef CONFIG_PM .suspend = NULL, .resume = NULL, #endif }; -static int __init palmt3_btn_init(void) +static int __init palmtt3_btn_init(void) { - return platform_driver_register(&palmt3_buttons_driver); + return platform_driver_register(&palmtt3_buttons_driver); } -static void __exit palmt3_btn_cleanup(void) +static void __exit palmtt3_btn_cleanup(void) { - platform_driver_unregister(&palmt3_buttons_driver); + platform_driver_unregister(&palmtt3_buttons_driver); } -module_init(palmt3_btn_init); -module_exit(palmt3_btn_cleanup); +module_init(palmtt3_btn_init); +module_exit(palmtt3_btn_cleanup); MODULE_AUTHOR("Martin Kupec"); MODULE_DESCRIPTION("Palm T|T3 Buttons driver"); Modified: linux4palm/linux/trunk/drivers/i2c/chips/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-07 10:14:52 UTC (rev 1114) @@ -115,7 +115,7 @@ # and having mostly OMAP-specific board support config TPS65010 tristate "TPS6501x Power Management chips" - depends on I2C && (ARCH_OMAP || (MACH_T3XSCALE && INPUT_PALMTT3_PWRBTN)) + depends on I2C && (ARCH_OMAP || MACH_T3XSCALE) default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK help If you say yes here you get support for the TPS6501x series of @@ -126,6 +126,14 @@ This driver can also be built as a module. If so, the module will be called tps65010. +config TPS65010_PWRBTN + bool "TPS65010 Power button support" + depends on TPS65010 + default y if MACH_T3XSCALE + help + If you say yes here you get support for PB_ONOFF pins on TPS6501x + series of Power Management chips. This will create input device. + config SENSORS_M41T00 tristate "ST M41T00 RTC chip" depends on I2C && PPC32 Modified: linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -41,8 +41,15 @@ // FIXME xscale GPIOs #include <asm/arch/irqs.h> -#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) -extern int palmtt3_pwr_btn_press(void); +#ifdef CONFIG_TPS65010_PWRBTN +#include <linux/input.h> +#include <linux/input_pda.h> +#include <linux/platform_device.h> + +#define BTN_HOLD_DELAY msecs_to_jiffies(100) + +int tps65010_pwr_btn_press(void); +int tps65010_pwr_btn_release(void); #endif #define T3_TPS65010_GPIO 14 @@ -103,6 +110,10 @@ unsigned model:8; u16 vbus; unsigned long flags; +#ifdef CONFIG_TPS65010_PWRBTN + u8 button_pressed; +#endif + #define FLAG_VBUS_CHANGED 0 #define FLAG_IRQ_ENABLE 1 @@ -113,7 +124,7 @@ /* not currently tracking GPIO state */ }; -#define POWER_POLL_DELAY msecs_to_jiffies(500) +#define POWER_POLL_DELAY msecs_to_jiffies(5000) /*-------------------------------------------------------------------------*/ @@ -211,6 +222,16 @@ #endif +/* + * This function clears button press information on suspend. + * Without this resuming up with power button sends event to suspend. + */ +static int tps65010_resume(struct i2c_client *client) +{ + i2c_smbus_read_byte_data(client, TPS_REGSTATUS); + return 0; +} + #ifdef CONFIG_DEBUG_FS static int dbg_show(struct seq_file *s, void *_) @@ -363,8 +384,9 @@ if (tmp & TPS_REG_ONOFF) { pr_info("%s: power off button\n", DRIVER_NAME); -#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) - palmtt3_pwr_btn_press(); +#ifdef CONFIG_TPS65010_PWRBTN + tps65010_pwr_btn_press(); + tps->button_pressed = 1; #endif #if 0 @@ -459,6 +481,16 @@ tps->chgconf = tmp; show_chgconfig(tps->por, "update vbus", tmp); } +#ifdef CONFIG_TPS65010_PWRBTN + if (tps->button_pressed) { + if ((1 << 7) & i2c_smbus_read_byte_data(&tps->client, TPS_REGSTATUS)) + schedule_delayed_work(&tps->work, BTN_HOLD_DELAY); + else { + tps->button_pressed = 0; + tps65010_pwr_btn_release(); + } + } +#endif if (test_and_clear_bit(FLAG_IRQ_ENABLE, &tps->flags)) enable_irq(tps->irq); @@ -540,6 +572,10 @@ tps->client.addr = address; tps->client.adapter = bus; tps->client.driver = &tps65010_driver; + tps->client.driver->resume = &tps65010_resume; +#ifdef CONFIG_TPS65010_PWRBTN + tps->button_pressed = 0; +#endif strlcpy(tps->client.name, DRIVER_NAME, I2C_NAME_SIZE); status = i2c_attach_client(&tps->client); @@ -650,8 +686,8 @@ */ tps->nmask1 = ~0; (void) i2c_smbus_write_byte_data(&tps->client, TPS_MASK1, ~tps->nmask1); + tps->nmask2 = TPS_REG_ONOFF; - tps->nmask2 = TPS_REG_ONOFF; if (tps->model == TPS65013) tps->nmask2 |= TPS_REG_NO_CHG; (void) i2c_smbus_write_byte_data(&tps->client, TPS_MASK2, ~tps->nmask2); @@ -1052,7 +1088,83 @@ EXPORT_SYMBOL(tps65013_set_low_pwr); /*-------------------------------------------------------------------------*/ +/* NOTE: PB_ONOFF pins are supported here as input_device + * + */ +#ifdef CONFIG_TPS65010_PWRBTN +#define PWRBTN_REPEAT_DELAY 1000 +#define PWRBTN_REPEAT_PERIOD 500 +struct input_dev *pwr_btn_input; +char keycode = KEY_F8; + + +int tps65010_pwr_btn_press(void) +{ + printk("tps65010_pwr_btn_press\n"); + input_report_key(pwr_btn_input, keycode, 1); + input_sync(pwr_btn_input); + return 0; +} + +int tps65010_pwr_btn_release(void) +{ + printk("tps65010_pwr_btn_release\n"); + input_report_key(pwr_btn_input, keycode, 0); + input_sync(pwr_btn_input); + return 0; +} + + +static int __init tps65010_pwr_btn_probe(struct platform_device *pdev) +{ + + pwr_btn_input = input_allocate_device(); + if (!pwr_btn_input) { + printk("Input device wasn't allocated!\n"); + goto err1; + } + + pwr_btn_input->name = "tps65010-pwr_btn"; + pwr_btn_input->id.bustype = BUS_HOST; + set_bit(EV_KEY, pwr_btn_input->evbit); + + set_bit(EV_REP, pwr_btn_input->evbit); +/* + pwr_btn_input->rep[REP_DELAY] = PWRBTN_REPEAT_DELAY; + pwr_btn_input->rep[REP_PERIOD] = PWRBTN_REPEAT_PERIOD; +*/ + set_bit(keycode,pwr_btn_input->keybit); + input_register_device(pwr_btn_input); + + return 0; +err1: + return -ENOMEM; +} + + +static int tps65010_pwr_btn_remove(struct platform_device *pdev) +{ + input_unregister_device(pwr_btn_input); + return 0; +} + +static struct platform_driver tps65010_pwr_btn_driver = { + .driver = { + .name = "tps65010-pwr_btn", + .owner = THIS_MODULE, + }, + .probe = tps65010_pwr_btn_probe, + .remove = tps65010_pwr_btn_remove, + .suspend = NULL, + .resume = NULL, + +}; +#endif + + + + static int __init tps_init(void) { u32 tries = 3; @@ -1120,6 +1232,9 @@ } #endif +#ifdef CONFIG_TPS65010_PWRBTN + status &= platform_driver_register(&tps65010_pwr_btn_driver); +#endif return status; } /* NOTE: this MUST be initialized before the other parts of the system @@ -1133,7 +1248,9 @@ static void __exit tps_exit(void) { +#ifdef CONFIG_TPS65010_PWRBTN + platform_driver_unregister(&tps65010_pwr_btn_driver); +#endif i2c_del_driver(&tps65010_driver); } module_exit(tps_exit); - Modified: linux4palm/linux/trunk/drivers/input/misc/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-07 10:14:52 UTC (rev 1114) @@ -89,10 +89,4 @@ Say Y here if you want to support the built-in real time clock of the HP SDC controller. -config INPUT_PALMTT3_PWRBTN - tristate "Palm Tungsten|T3 Power Button" - depends on MACH_T3XSCALE - help - Say Y here if you want to support the power button of Palm Tungsten|T3 Power Button. - endif Modified: linux4palm/linux/trunk/drivers/input/misc/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-07 10:14:52 UTC (rev 1114) @@ -12,4 +12,3 @@ obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o -obj-$(CONFIG_INPUT_PALMTT3_PWRBTN) += palmtt3-pwr_btn.o Deleted: linux4palm/linux/trunk/drivers/input/misc/palmtt3-pwr_btn.c =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/palmtt3-pwr_btn.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/input/misc/palmtt3-pwr_btn.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -1,96 +0,0 @@ -/* - * Palm Tungsten|T3 Power Button Driver - * - * Author: Tomas Cech <Tom...@ma...> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ - -#include <linux/init.h> -#include <linux/input.h> -#include <linux/input_pda.h> -#include <linux/interrupt.h> -#include <linux/module.h> -#include <linux/platform_device.h> -#include <asm/irq.h> -#include <asm/mach/arch.h> -#include <asm/mach/map.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> -#include <asm/arch/pxa-regs.h> -#include <asm/arch/irqs.h> - -#define PWRBTN_REPEAT_DELAY 1000 -#define PWRBTN_REPEAT_PERIOD 500 -struct input_dev *pwr_btn_input; -char keycode = KEY_F8; - - -int palmtt3_pwr_btn_press(void) { - printk("palmtt3_pwr_btn_press\n"); - input_report_key(pwr_btn_input, keycode, 1); - input_report_key(pwr_btn_input, keycode, 0); - input_sync(pwr_btn_input); - return 0; -} - -EXPORT_SYMBOL(palmtt3_pwr_btn_press); - -static int __init palmtt3_pwr_btn_probe(struct platform_device *pdev) -{ - - pwr_btn_input = input_allocate_device(); - if (!pwr_btn_input) { - printk("Input device wasn't allocated!\n"); - goto err1; - } - - pwr_btn_input->name = "palmtt3-pwr_btn"; - pwr_btn_input->id.bustype = BUS_HOST; - set_bit(EV_KEY, pwr_btn_input->evbit); - set_bit(keycode,pwr_btn_input->keybit); - input_register_device(pwr_btn_input); - - return 0; -err1: - return -ENOMEM; -} - - -static int palmtt3_pwr_btn_remove(struct platform_device *pdev) -{ - input_unregister_device(pwr_btn_input); - return 0; -} - -static struct platform_driver palmtt3_pwr_btn_driver = { - .driver = { - .name = "palmtt3-pwr_btn", - .owner = THIS_MODULE, - }, - .probe = palmtt3_pwr_btn_probe, - .remove = palmtt3_pwr_btn_remove, - .suspend = NULL, - .resume = NULL, - -}; - -static int __devinit palmtt3_pwr_btn_init(void) -{ - return platform_driver_register(&palmtt3_pwr_btn_driver); -} - -static void __exit palmtt3_pwr_btn_exit(void) -{ - platform_driver_unregister(&palmtt3_pwr_btn_driver); -} - -module_init(palmtt3_pwr_btn_init); -module_exit(palmtt3_pwr_btn_exit); - -MODULE_AUTHOR("Tomas Cech <Tom...@ma...>"); -MODULE_DESCRIPTION("Power Button for Palm Tungsten|T3"); -MODULE_LICENSE("GPL"); Modified: linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c =================================================================== --- linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-07 09:02:20 UTC (rev 1113) +++ linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-07 10:14:52 UTC (rev 1114) @@ -49,7 +49,8 @@ if (value) palmtt3led_work.led1 = ON; else - palmtt3led_work.led1 = OFF; +/* NOTE: This is set to OFF, not to OFF... It shows charging status - plugged/unplugged... */ + palmtt3led_work.led1 = UNDER_CHG_CTRL; schedule_work(&(palmtt3led_work.work)); } @@ -67,8 +68,7 @@ if (value) palmtt3led_work.led1 = BLINK; else -/* NOTE: This is set to OFF, not to OFF... It shows charging status - plugged/unplugged... */ - palmtt3led_work.led1 = UNDER_CHG_CTRL; + palmtt3led_work.led1 = OFF; schedule_work(&(palmtt3led_work.work)); } @@ -120,6 +120,20 @@ return 0; } +static int palmtt3led_suspend_late(struct platform_device *dev, pm_message_t state) +{ + tps65010_set_led(LED1, OFF); + tps65010_set_led(LED2, OFF); + tps65010_set_vib(OFF); + return 0; +} + +static int palmtt3led_resume_early(struct platform_device *dev) +{ + schedule_work(&(palmtt3led_work.work)); + return 0; +} + static int palmtt3led_resume(struct platform_device *dev) { led_classdev_resume(&palmtt3_red_led); @@ -163,6 +177,9 @@ led_classdev_unregister(&palmtt3_green_blink_led); } + palmtt3led_work.led1 = UNDER_CHG_CTRL; + palmtt3led_work.led2 = OFF; + palmtt3led_work.vibra = OFF; INIT_WORK(&(palmtt3led_work.work),tps650101_scheduled_leds); return ret; } @@ -183,6 +200,8 @@ #ifdef CONFIG_PM .suspend = palmtt3led_suspend, .resume = palmtt3led_resume, + .suspend_late = palmtt3led_suspend_late, + .resume_early = palmtt3led_resume_early, #endif .driver = { .name = "palmtt3-led", Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h 2007-07-07 10:14:52 UTC (rev 1114) @@ -0,0 +1,54 @@ +/* + * GPIOs and interrupts for Palm Tungsten|T3 Handheld Computer + * + * Copied from on palmt5-gpio.h by Marek Vasut and T|T3 files + * + * Authors: Tomas Cech <Tom...@ma...> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * + * this code is in a very early stage: + * - use it at your own risk + * - any help is encouraged and will be highly appreciated + * + */ + +#ifndef _INCLUDE_PALMTT3_GPIO_H_ + +#define _INCLUDE_PALMTT3_GPIO_H_ + + +#define T3_TPS65010_GPIO 14 +#define PALMTT3_GPIO_TSC2101_SS (24) +#define PALMTT3_GPIO_PENDOWN (37) +#define PALMTT3_IRQ_GPIO_PENDOWN IRQ_GPIO(PALMTT3_GPIO_PENDOWN) + +#define GPIO_NR_PALMTT3_ICP_RXD 46 // Infrared receive pin +#define GPIO_NR_PALMTT3_ICP_TXD 47 // Infrared transmit pin +#define GPIO_NR_PALMTT3_IR_DISABLE 36 + +#define GPIO_NR_PALMTT3_ICP_RXD_MD (GPIO_NR_PALMTT3_ICP_RXD | GPIO_ALT_FN_1_IN) +#define GPIO_NR_PALMTT3_ICP_TXD_MD (GPIO_NR_PALMTT3_ICP_TXD | GPIO_ALT_FN_2_OUT) + +#define GPIO_NR_PALMTT3_USB_POWER 53 +#define GPIO_NR_PALMTT3_PUC_USB_POWER 85 +#define GPIO_NR_PALMTT3_USB_DETECT 9 + +#define GPIO_NR_PALMTT3_TPS65010_BT_POWER 4 +#define GPIO_NR_PALMTT3_RESET 84 + + +#define GET_GPIO(gpio) (GPLR(gpio) & GPIO_bit(gpio)) + +#define SET_GPIO(gpio, setp) \ + do { \ + if (setp) \ + GPSR(gpio) = GPIO_bit(gpio); \ + else \ + GPCR(gpio) = GPIO_bit(gpio); \ + } while (0) + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sle...@us...> - 2007-07-08 19:54:28
|
Revision: 1122 http://svn.sourceforge.net/hackndev/?rev=1122&view=rev Author: sleep_walker Date: 2007-07-08 12:54:23 -0700 (Sun, 08 Jul 2007) Log Message: ----------- palmtt3: BT separation, TPS65010 can be module again Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Kconfig linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Makefile linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Kconfig =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Kconfig 2007-07-08 14:34:34 UTC (rev 1121) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Kconfig 2007-07-08 19:54:23 UTC (rev 1122) @@ -16,6 +16,14 @@ help Adds battery driver support +config PALMTT3_BLUETOOTH + tristate "Bluetooth support for Palm Tungsten|T3" + depends on MACH_T3XSCALE && BT && TPS65010 && BT_BCM2035UART + default m if TPS65010=m && BT_BCM2035UART=m + default y if TPS65010=y || BT_BCM2035UART=y + help + Adds bluetooth support for Palm Tungsten|T3 + config PALMTT3_FBKEYBOARD bool "On-screen keyboard (BROKEN)" depends on PALMTT3_TSC2101 Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Makefile =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Makefile 2007-07-08 14:34:34 UTC (rev 1121) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/Makefile 2007-07-08 19:54:23 UTC (rev 1122) @@ -5,4 +5,5 @@ obj-$(CONFIG_MACH_T3XSCALE) += palmtt3.o obj-$(CONFIG_PALMTT3_BUTTONS) += palmtt3_buttons.o obj-$(CONFIG_PALMTT3_BATTERY) += palmtt3_battery.o +obj-$(CONFIG_PALMTT3_BLUETOOTH) += palmtt3_bt.o obj-$(CONFIG_PALMTT3_FBKEYBOARD) += palmtt3_fbkeyb.o \ No newline at end of file Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-08 14:34:34 UTC (rev 1121) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-08 19:54:23 UTC (rev 1122) @@ -42,11 +42,8 @@ #include <asm/arch/palmtt3-gpio.h> #include <asm/arch/tps65010.h> - #include "../generic.h" -// FIXME move this to include/asm/arch/palmtt3.h some time - #define DEBUG 1 /*** FRAMEBUFFER ***/ @@ -345,29 +342,8 @@ .resume = palmtt3_hwuart_resume, }; -/* Bluetooth */ - -void bcm2035_bt_reset(int on) -{ - printk(KERN_NOTICE "Switch BT reset %d\n", on); - if (on) - SET_GPIO(GPIO_NR_PALMTT3_RESET, 1); - else - SET_GPIO(GPIO_NR_PALMTT3_RESET, 0 ); -} -EXPORT_SYMBOL(bcm2035_bt_reset); - -void bcm2035_bt_power(int on) -{ - printk(KERN_NOTICE "Switch BT power %d\n", on); - if (on) - tps65010_set_gpio_out_value(GPIO_NR_PALMTT3_TPS65010_BT_POWER,1); - else - tps65010_set_gpio_out_value(GPIO_NR_PALMTT3_TPS65010_BT_POWER,0); -} -EXPORT_SYMBOL(bcm2035_bt_power); - - +/*** Bluetooth ***/ +#ifdef CONFIGURE_PALMTT3_BLUETOOTH struct bcm2035_bt_funcs { void (*configure) ( int state ); }; @@ -392,9 +368,8 @@ .platform_data = &bt_funcs, }, }; +#endif //CONFIG_PALMTT3_BLUETOOTH - - /*** Suspend/Resume ***/ #ifdef CONFIG_PM static long int _PM_backup[3]; @@ -461,7 +436,9 @@ &palmtt3_backlight_device, &palmtt3_led_device, &palmtt3_power_button, +#ifdef CONFIGURE_PALMTT3_BLUETOOTH &bcm2035_bt, +#endif }; @@ -475,7 +452,9 @@ set_pxa_fb_info(&palmtt3_lcd_screen); pxa_set_udc_info(&palmtt3_udc_mach_info); pxa_set_hwuart_info(&palmtt3_hwuart); +#ifdef CONFIGURE_PALMTT3_BLUETOOTH pxa_set_btuart_info(&bcm2035_pxa_bt_funcs); +#endif platform_add_devices (devices, ARRAY_SIZE (devices)); } Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h 2007-07-08 14:34:34 UTC (rev 1121) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h 2007-07-08 19:54:23 UTC (rev 1122) @@ -19,6 +19,8 @@ #ifndef _INCLUDE_PALMTT3_GPIO_H_ #define _INCLUDE_PALMTT3_GPIO_H_ +#include <asm/arch/pxa-regs.h> +#include <asm/arch/gpio.h> #define T3_TPS65010_GPIO 14 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sle...@us...> - 2007-07-09 22:35:13
|
Revision: 1124 http://svn.sourceforge.net/hackndev/?rev=1124&view=rev Author: sleep_walker Date: 2007-07-09 15:35:05 -0700 (Mon, 09 Jul 2007) Log Message: ----------- palmtt3: fixing IrDA, removing useless dependencies in mmc-card led trigger Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c linux4palm/linux/trunk/drivers/leds/Kconfig linux4palm/linux/trunk/include/linux/leds.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-08 20:04:44 UTC (rev 1123) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-09 22:35:05 UTC (rev 1124) @@ -42,6 +42,7 @@ #include <asm/arch/palmtt3-gpio.h> #include <asm/arch/tps65010.h> +//#include "palmtt3_bt.h" #include "../generic.h" #define DEBUG 1 @@ -214,7 +215,6 @@ /*** IRDA ***/ - static void palmtt3_irda_transceiver_mode(struct device *dev, int mode) { unsigned long flags; @@ -222,21 +222,19 @@ local_irq_save(flags); if (mode & IR_SIRMODE){ - printk (KERN_INFO "IrDA: setting mode to SIR\n"); + printk ("IrDA: setting mode to SIR\n"); } else if (mode & IR_FIRMODE){ - printk (KERN_INFO "IrDA: setting mode to FIR\n"); + printk ("IrDA: setting mode to FIR\n"); } if (mode & IR_OFF){ - printk (KERN_INFO "IrDA: turning OFF\n"); + printk ("IrDA: turning OFF\n"); SET_GPIO(GPIO_NR_PALMTT3_IR_DISABLE, 1); + } else { printk (KERN_INFO "IrDA: turning ON\n"); SET_GPIO(GPIO_NR_PALMTT3_IR_DISABLE, 0); - SET_GPIO(GPIO46_STRXD_MD, 1); - mdelay(30); - SET_GPIO(GPIO46_STRXD_MD, 0); } local_irq_restore(flags); @@ -244,7 +242,7 @@ static struct pxaficp_platform_data palmtt3_ficp_platform_data = { - .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, + .transceiver_cap = IR_SIRMODE | IR_OFF, .transceiver_mode = palmtt3_irda_transceiver_mode, }; @@ -334,10 +332,6 @@ struct platform_pxa_serial_funcs palmtt3_hwuart = { .configure = palmtt3_hwuart_configure, -/* - .set_txrx = palmtt3_hwuart_set_txrx, - .get_txrx = NULL, -*/ .suspend = palmtt3_hwuart_suspend, .resume = palmtt3_hwuart_resume, }; Modified: linux4palm/linux/trunk/drivers/leds/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-08 20:04:44 UTC (rev 1123) +++ linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-09 22:35:05 UTC (rev 1124) @@ -197,8 +197,9 @@ If unsure, say Y. config LEDS_TRIGGER_MMC_CARD - bool "LED MMC Card Trigger" - depends on LEDS_TRIGGERS && ARCH_PXA && (MMC_PXA || MMC_WBSD_PALMT3) + tristate "LED MMC Card Trigger" + depends LEDS_TRIGGERS + default m help This allows LEDs to be controlled by MMC card activity on Intel PXA 25x/26x/27x MMC interface . If unsure, say Y. Modified: linux4palm/linux/trunk/include/linux/leds.h =================================================================== --- linux4palm/linux/trunk/include/linux/leds.h 2007-07-08 20:04:44 UTC (rev 1123) +++ linux4palm/linux/trunk/include/linux/leds.h 2007-07-09 22:35:05 UTC (rev 1124) @@ -174,7 +174,7 @@ #else #define ledtrig_ide_activity() do {} while(0) #endif -#ifdef CONFIG_LEDS_TRIGGER_MMC_CARD +#if defined(CONFIG_LEDS_TRIGGER_MMC_CARD) || defined(CONFIG_LEDS_TRIGGER_MMC_CARD_MODULE) extern void ledtrig_mmc_activity(void); #else #define ledtrig_mmc_activity() do {} while(0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sle...@us...> - 2007-07-10 10:24:18
|
Revision: 1125 http://svn.sourceforge.net/hackndev/?rev=1125&view=rev Author: sleep_walker Date: 2007-07-10 03:24:09 -0700 (Tue, 10 Jul 2007) Log Message: ----------- palmtt3: fixed tsc2101 and sound dependencies, GPIO header update Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3_bt.c linux4palm/linux/trunk/drivers/input/touchscreen/Kconfig linux4palm/linux/trunk/drivers/mfd/Kconfig linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h linux4palm/linux/trunk/sound/arm/Kconfig Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3.c 2007-07-10 10:24:09 UTC (rev 1125) @@ -396,6 +396,7 @@ PWER |= PWER_GPIO11; /* memo/todo/center */ PWER |= PWER_GPIO12; /* HotSync button on cradle */ PWER |= PWER_GPIO14; /* power button */ + PWER |= PWER_GPIO15; /* Bluetooth wakeup? */ PFER = PWER_GPIO0 | PWER_GPIO1 | PWER_GPIO11 | PWER_GPIO14; PEDR = PWER_GPIO0 | PWER_GPIO1; Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3_bt.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3_bt.c 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtt3/palmtt3_bt.c 2007-07-10 10:24:09 UTC (rev 1125) @@ -18,10 +18,14 @@ void bcm2035_bt_reset(int on) { printk(KERN_NOTICE "Switch BT reset %d\n", on); - if (on) - SET_GPIO(GPIO_NR_PALMTT3_RESET, 1); - else - SET_GPIO(GPIO_NR_PALMTT3_RESET, 0 ); + if (on) { + /* FIXME: it's just template, GPIOs are not the right ones */ + pxa_gpio_mode(GPIO83_NSSP_TX); + pxa_gpio_mode(GPIO84_NSSP_TX); + } + else { + + } } EXPORT_SYMBOL(bcm2035_bt_reset); Modified: linux4palm/linux/trunk/drivers/input/touchscreen/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/input/touchscreen/Kconfig 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/drivers/input/touchscreen/Kconfig 2007-07-10 10:24:09 UTC (rev 1125) @@ -56,9 +56,8 @@ config TOUCHSCREEN_TSC2101 tristate "TI TSC2101 touchscreen input driver" - depends on (MACH_HX2750 || MACH_T3XSCALE) && INPUT && INPUT_TOUCHSCREEN - select SOC_TSC2101 - default y + depends on (MACH_HX2750 || MACH_T3XSCALE) && INPUT_TOUCHSCREEN + default y help Say Y here to enable the driver for the touchscreen on the iPAQ hx2750 series of PDAs or Palm Tungsten|T3. Modified: linux4palm/linux/trunk/drivers/mfd/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/mfd/Kconfig 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/drivers/mfd/Kconfig 2007-07-10 10:24:09 UTC (rev 1125) @@ -104,6 +104,10 @@ config SOC_TSC2101 tristate "Support for TI TSC2101 Touchscreen and Audio Codec" + depends TOUCHSCREEN_TSC2101 && SOUND && SND && SND_PXA2xx_I2SOUND +# depends TOUCHSCREEN_TSC2101 +# select SND_PXA2xx_I2SOUND + default m help Support for TI TSC2101 Touchscreen and Audio Codec Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtt3-gpio.h 2007-07-10 10:24:09 UTC (rev 1125) @@ -28,19 +28,15 @@ #define PALMTT3_GPIO_PENDOWN (37) #define PALMTT3_IRQ_GPIO_PENDOWN IRQ_GPIO(PALMTT3_GPIO_PENDOWN) -#define GPIO_NR_PALMTT3_ICP_RXD 46 // Infrared receive pin -#define GPIO_NR_PALMTT3_ICP_TXD 47 // Infrared transmit pin #define GPIO_NR_PALMTT3_IR_DISABLE 36 -#define GPIO_NR_PALMTT3_ICP_RXD_MD (GPIO_NR_PALMTT3_ICP_RXD | GPIO_ALT_FN_1_IN) -#define GPIO_NR_PALMTT3_ICP_TXD_MD (GPIO_NR_PALMTT3_ICP_TXD | GPIO_ALT_FN_2_OUT) #define GPIO_NR_PALMTT3_USB_POWER 53 #define GPIO_NR_PALMTT3_PUC_USB_POWER 85 #define GPIO_NR_PALMTT3_USB_DETECT 9 #define GPIO_NR_PALMTT3_TPS65010_BT_POWER 4 -#define GPIO_NR_PALMTT3_RESET 84 +#define GPIO_NR_PALMTT3_BT_WAKEUP 15 #define GET_GPIO(gpio) (GPLR(gpio) & GPIO_bit(gpio)) Modified: linux4palm/linux/trunk/sound/arm/Kconfig =================================================================== --- linux4palm/linux/trunk/sound/arm/Kconfig 2007-07-09 22:35:05 UTC (rev 1124) +++ linux4palm/linux/trunk/sound/arm/Kconfig 2007-07-10 10:24:09 UTC (rev 1125) @@ -108,6 +108,7 @@ config SND_PXA2xx_I2SOUND tristate "PXA2 I2Sound support" + depends on SND select SND_PCM config SND_PXA2XX_PCM This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mis...@us...> - 2007-07-13 21:53:10
|
Revision: 1143 http://svn.sourceforge.net/hackndev/?rev=1143&view=rev Author: miska_tx Date: 2007-07-13 14:53:03 -0700 (Fri, 13 Jul 2007) Log Message: ----------- palmtx: Some macro corrections. Used LCCRman for nicer LCD settings and changed battery limit. Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c 2007-07-13 13:40:13 UTC (rev 1142) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmtx/palmtx.c 2007-07-13 21:53:03 UTC (rev 1143) @@ -39,6 +39,7 @@ #include <asm/arch/udc.h> #include <asm/arch/irda.h> #include <asm/arch/serial.h> +#include <asm/arch/bitfield.h> #include <asm/arch/pxa27x_keyboard.h> #include <asm/arch/pxapwm-bl.h> Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h 2007-07-13 13:40:13 UTC (rev 1142) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmtx-init.h 2007-07-13 21:53:03 UTC (rev 1143) @@ -31,10 +31,16 @@ // // values as dumped from device -#define PALMTX_INIT_LCD_LLC0 0x07b008f9 +//#define PALMTX_INIT_LCD_LLC0 0x07b008f9 +#define PALMTX_INIT_LCD_LLC0 LCCR0_ENB | LCCR0_Color | LCCR0_Sngl | LCCR0_LDM \ + | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM | LCCR0_Act | LCCR0_4PixMono | \ + LCCR0_QDM | LCCR0_BM | LCCR0_OUM | LCCR0_RDSTM | LCCR0_CMDIM | \ + LCCR0_OUC | LCCR0_LDDALT #define PALMTX_INIT_LCD_LLC1 0x1f030d3f #define PALMTX_INIT_LCD_LLC2 0x070801df -#define PALMTX_INIT_LCD_LLC3 0x04700004 +//#define PALMTX_INIT_LCD_LLC3 0x04700004 +#define PALMTX_INIT_LCD_LLC3 LCCR3_PixClkDiv(2) | LCCR3_HorSnchL | \ + LCCR3_VrtSnchL | LCCR3_PixFlEdg | LCCR3_OutEnH | LCCR3_Bpp(4) // KEYPAD configuration @@ -54,7 +60,7 @@ // BATTERY #define PALMTX_BAT_MAX_VOLTAGE 4000 // 4.00v current voltage at max charge as from ZLauncher -#define PALMTX_BAT_MIN_VOLTAGE 3600 // 3.60v critical voltage as from FileZ +#define PALMTX_BAT_MIN_VOLTAGE 3500 // 3.60v critical voltage as from FileZ #define PALMTX_BAT_MAX_CURRENT 0 // unknokn #define PALMTX_BAT_MIN_CURRENT 0 // unknown #define PALMTX_BAT_MAX_CHARGE 1 // unknown This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |