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