diff options
Diffstat (limited to 'packages/linux/linux-rp-2.6.23/tosa-bluetooth-r8.patch')
-rw-r--r-- | packages/linux/linux-rp-2.6.23/tosa-bluetooth-r8.patch | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/packages/linux/linux-rp-2.6.23/tosa-bluetooth-r8.patch b/packages/linux/linux-rp-2.6.23/tosa-bluetooth-r8.patch new file mode 100644 index 0000000000..9976549956 --- /dev/null +++ b/packages/linux/linux-rp-2.6.23/tosa-bluetooth-r8.patch @@ -0,0 +1,388 @@ +Index: linux-2.6.17/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.17.orig/arch/arm/mach-pxa/Makefile 2006-06-20 11:45:51.252467944 +0200 ++++ linux-2.6.17/arch/arm/mach-pxa/Makefile 2006-06-20 11:46:33.619027248 +0200 +@@ -16,7 +16,7 @@ + obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o spitz_pm.o + obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o + obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o +-obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o ++obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o tosa_bt.o + obj-$(CONFIG_MACH_EM_X270) += em-x270.o + obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o + +Index: linux-2.6.17/arch/arm/mach-pxa/tosa_bt.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/arm/mach-pxa/tosa_bt.c 2006-06-20 11:46:08.107905528 +0200 +@@ -0,0 +1,128 @@ ++/* ++ * Bluetooth control code for Sharp SL-6000x (tosa) ++ * ++ * Copyright (c) 2005 Dirk Opfer ++ * ++ * 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/module.h> ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/sched.h> ++#include <linux/slab.h> ++#include <linux/delay.h> ++#include <linux/platform_device.h> ++#include <asm/hardware.h> ++ ++#include <asm/hardware/scoop.h> ++#include <asm/arch/tosa.h> ++#include <asm/arch/pxa-regs.h> ++ ++ ++static int tosa_bluetooth_power(int on) ++{ ++ ++ if (!on) { //off ++ ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ pxa_gpio_mode(GPIO42_BTRXD|GPIO_IN); ++ pxa_gpio_mode(GPIO43_BTTXD|GPIO_IN); ++ pxa_gpio_mode(GPIO44_BTCTS|GPIO_IN); ++ pxa_gpio_mode(GPIO45_BTRTS|GPIO_IN); ++ mdelay(10); // wait 10ms ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_BT_LED); // turn off BT LED ++ ++ } else { // on ++ ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ pxa_gpio_mode(GPIO42_HWRXD_MD); ++ pxa_gpio_mode(GPIO43_HWTXD_MD); ++ pxa_gpio_mode(GPIO44_HWCTS_MD); ++ pxa_gpio_mode(GPIO45_HWRTS_MD); ++ ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ mdelay(20); // wait 20ms ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ set_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_BT_LED); // turn BT LED on ++ } ++ return 0; ++} ++ ++/* ++ * Support Routines ++ */ ++int __init tosa_bluetooth_probe(struct platform_device *dev) ++{ ++ int ret = 0; ++ pxa_gpio_mode(GPIO42_BTRXD|GPIO_IN); ++ pxa_gpio_mode(GPIO43_BTTXD|GPIO_IN); ++ pxa_gpio_mode(GPIO44_BTCTS|GPIO_IN); ++ pxa_gpio_mode(GPIO45_BTRTS|GPIO_IN); ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ mdelay(5); ++ ++ if ( (GPLR(GPIO42_BTRXD) & GPIO_bit(GPIO42_BTRXD))==0 && ++ (GPLR(GPIO44_BTCTS) & GPIO_bit(GPIO44_BTCTS))==0) { ++ printk(KERN_INFO "No Bluetooth Device found!\n"); ++ ret = ENODEV; // no bluetooth ++ } else { ++ printk(KERN_INFO "Tosa Bluetooth Device found on ttyS3!\n"); ++ } ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ ++ tosa_bluetooth_power(1); // Power on ++ return ret; ++} ++ ++static int tosa_bluetooth_remove(struct platform_device *dev) ++{ ++ tosa_bluetooth_power(0); // Power off ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int tosa_bluetooth_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ tosa_bluetooth_power(0); // Power off ++ return 0; ++} ++ ++static int tosa_bluetooth_resume(struct platform_device *dev) ++{ ++ tosa_bluetooth_power(1); // Power on ++ return 0; ++} ++#else ++#define tosa_bluetooth_suspend NULL ++#define tosa_bluetooth_resume NULL ++#endif ++ ++static struct platform_driver tosa_bluetooth_driver = { ++ .probe = tosa_bluetooth_probe, ++ .remove = tosa_bluetooth_remove, ++ .suspend = tosa_bluetooth_suspend, ++ .resume = tosa_bluetooth_resume, ++ .driver = { ++ .name = "tosa-bluetooth", ++ }, ++}; ++ ++int __init tosa_bluetooth_init(void) ++{ ++ return platform_driver_register(&tosa_bluetooth_driver); ++} ++ ++void __exit tosa_bluetooth_cleanup(void) ++{ ++ platform_driver_unregister(&tosa_bluetooth_driver); ++} ++ ++module_init(tosa_bluetooth_init); ++module_exit(tosa_bluetooth_cleanup); +Index: linux-2.6.17/arch/arm/mach-pxa/tosa.c +=================================================================== +--- linux-2.6.17.orig/arch/arm/mach-pxa/tosa.c 2006-06-20 11:45:51.254467640 +0200 ++++ linux-2.6.17/arch/arm/mach-pxa/tosa.c 2006-06-20 11:46:08.112904768 +0200 +@@ -288,7 +288,7 @@ + + static void tosa_tc6393_enable(struct device *dev) + { +- ++ printk("!!tosa_tc6393_enable!!\n"); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC6393_SUSPEND); + reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_TC6393_REST_IN); //#PCLR +@@ -303,7 +303,7 @@ + + static void tosa_tc6393_disable(struct device *dev) + { +- ++ printk("!!tosa_tc6393_disable!!\n"); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC6393_SUSPEND); + reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_TC6393_REST_IN); //#PCLR +@@ -428,6 +428,17 @@ + }, + }; + ++/* ++ * Tosa Blueooth ++ */ ++static struct platform_device tosa_bluetooth_device = { ++ .name = "tosa-bluetooth", ++ .id = -1, ++ .dev = { ++ .parent = &tosascoop_jc_device.dev, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &tosascoop_device, + &tosascoop_jc_device, +@@ -435,6 +446,7 @@ + &tosaled_device, + &tc6393_device, + &tosalcd_device, ++ &tosa_bluetooth_device, + }; + + static void tosa_poweroff(void) +Index: linux-2.6.17/arch/arm/mach-pxa/Makefile +=================================================================== +--- linux-2.6.17.orig/arch/arm/mach-pxa/Makefile 2006-06-20 11:45:51.252467944 +0200 ++++ linux-2.6.17/arch/arm/mach-pxa/Makefile 2006-06-20 11:46:33.619027248 +0200 +@@ -16,7 +16,7 @@ + obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o spitz_pm.o + obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o + obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o +-obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o ++obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o tosa_bt.o + obj-$(CONFIG_MACH_EM_X270) += em-x270.o + obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o + +Index: linux-2.6.17/arch/arm/mach-pxa/tosa_bt.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/arm/mach-pxa/tosa_bt.c 2006-06-20 11:46:08.107905528 +0200 +@@ -0,0 +1,128 @@ ++/* ++ * Bluetooth control code for Sharp SL-6000x (tosa) ++ * ++ * Copyright (c) 2005 Dirk Opfer ++ * ++ * 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/module.h> ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/sched.h> ++#include <linux/slab.h> ++#include <linux/delay.h> ++#include <linux/platform_device.h> ++#include <asm/hardware.h> ++ ++#include <asm/hardware/scoop.h> ++#include <asm/arch/tosa.h> ++#include <asm/arch/pxa-regs.h> ++ ++ ++static int tosa_bluetooth_power(int on) ++{ ++ ++ if (!on) { //off ++ ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ pxa_gpio_mode(GPIO42_BTRXD|GPIO_IN); ++ pxa_gpio_mode(GPIO43_BTTXD|GPIO_IN); ++ pxa_gpio_mode(GPIO44_BTCTS|GPIO_IN); ++ pxa_gpio_mode(GPIO45_BTRTS|GPIO_IN); ++ mdelay(10); // wait 10ms ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_BT_LED); // turn off BT LED ++ ++ } else { // on ++ ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ pxa_gpio_mode(GPIO42_HWRXD_MD); ++ pxa_gpio_mode(GPIO43_HWTXD_MD); ++ pxa_gpio_mode(GPIO44_HWCTS_MD); ++ pxa_gpio_mode(GPIO45_HWRTS_MD); ++ ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ mdelay(20); // wait 20ms ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_RESET); ++ set_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_BT_LED); // turn BT LED on ++ } ++ return 0; ++} ++ ++/* ++ * Support Routines ++ */ ++int __init tosa_bluetooth_probe(struct platform_device *dev) ++{ ++ int ret = 0; ++ pxa_gpio_mode(GPIO42_BTRXD|GPIO_IN); ++ pxa_gpio_mode(GPIO43_BTTXD|GPIO_IN); ++ pxa_gpio_mode(GPIO44_BTCTS|GPIO_IN); ++ pxa_gpio_mode(GPIO45_BTRTS|GPIO_IN); ++ set_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ mdelay(5); ++ ++ if ( (GPLR(GPIO42_BTRXD) & GPIO_bit(GPIO42_BTRXD))==0 && ++ (GPLR(GPIO44_BTCTS) & GPIO_bit(GPIO44_BTCTS))==0) { ++ printk(KERN_INFO "No Bluetooth Device found!\n"); ++ ret = ENODEV; // no bluetooth ++ } else { ++ printk(KERN_INFO "Tosa Bluetooth Device found on ttyS3!\n"); ++ } ++ reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_BT_PWR_EN); ++ ++ tosa_bluetooth_power(1); // Power on ++ return ret; ++} ++ ++static int tosa_bluetooth_remove(struct platform_device *dev) ++{ ++ tosa_bluetooth_power(0); // Power off ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int tosa_bluetooth_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ tosa_bluetooth_power(0); // Power off ++ return 0; ++} ++ ++static int tosa_bluetooth_resume(struct platform_device *dev) ++{ ++ tosa_bluetooth_power(1); // Power on ++ return 0; ++} ++#else ++#define tosa_bluetooth_suspend NULL ++#define tosa_bluetooth_resume NULL ++#endif ++ ++static struct platform_driver tosa_bluetooth_driver = { ++ .probe = tosa_bluetooth_probe, ++ .remove = tosa_bluetooth_remove, ++ .suspend = tosa_bluetooth_suspend, ++ .resume = tosa_bluetooth_resume, ++ .driver = { ++ .name = "tosa-bluetooth", ++ }, ++}; ++ ++int __init tosa_bluetooth_init(void) ++{ ++ return platform_driver_register(&tosa_bluetooth_driver); ++} ++ ++void __exit tosa_bluetooth_cleanup(void) ++{ ++ platform_driver_unregister(&tosa_bluetooth_driver); ++} ++ ++module_init(tosa_bluetooth_init); ++module_exit(tosa_bluetooth_cleanup); +Index: linux-2.6.17/arch/arm/mach-pxa/tosa.c +=================================================================== +--- linux-2.6.17.orig/arch/arm/mach-pxa/tosa.c 2006-06-20 11:45:51.254467640 +0200 ++++ linux-2.6.17/arch/arm/mach-pxa/tosa.c 2006-06-20 11:46:08.112904768 +0200 +@@ -288,7 +288,7 @@ + + static void tosa_tc6393_enable(struct device *dev) + { +- ++ printk("!!tosa_tc6393_enable!!\n"); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC6393_SUSPEND); + reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_TC6393_REST_IN); //#PCLR +@@ -303,7 +303,7 @@ + + static void tosa_tc6393_disable(struct device *dev) + { +- ++ printk("!!tosa_tc6393_disable!!\n"); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON); + reset_scoop_gpio(&tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC6393_SUSPEND); + reset_scoop_gpio(&tosascoop_device.dev,TOSA_SCOOP_TC6393_REST_IN); //#PCLR +@@ -428,6 +428,17 @@ + }, + }; + ++/* ++ * Tosa Blueooth ++ */ ++static struct platform_device tosa_bluetooth_device = { ++ .name = "tosa-bluetooth", ++ .id = -1, ++ .dev = { ++ .parent = &tosascoop_jc_device.dev, ++ }, ++}; ++ + static struct platform_device *devices[] __initdata = { + &tosascoop_device, + &tosascoop_jc_device, +@@ -435,6 +446,7 @@ + &tosaled_device, + &tc6393_device, + &tosalcd_device, ++ &tosa_bluetooth_device, + }; + + static void tosa_poweroff(void) |