mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
platform specific patches don't belong here - take #2
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@25085 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
1 parent
a58c9ec9a3
commit
e30aa8bf8d
40 files changed
-1013
No files matched your search
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/char/cs5535_gpio.c
|
||||
+++ b/drivers/char/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/smp_lock.h>
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -177,7 +184,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -232,23 +239,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/ssb/driver_pcicore.c
|
||||
+++ b/drivers/ssb/driver_pcicore.c
|
||||
@@ -399,7 +399,7 @@ static void ssb_pcicore_init_hostmode(st
|
||||
set_io_port_base(ssb_pcicore_controller.io_map_base);
|
||||
/* Give some time to the PCI controller to configure itself with the new
|
||||
* values. Not waiting at this point causes crashes of the machine. */
|
||||
- mdelay(10);
|
||||
+ mdelay(300);
|
||||
register_pci_controller(&ssb_pcicore_controller);
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/ssb/driver_pcicore.c
|
||||
+++ b/drivers/ssb/driver_pcicore.c
|
||||
@@ -399,7 +399,7 @@ static void ssb_pcicore_init_hostmode(st
|
||||
set_io_port_base(ssb_pcicore_controller.io_map_base);
|
||||
/* Give some time to the PCI controller to configure itself with the new
|
||||
* values. Not waiting at this point causes crashes of the machine. */
|
||||
- mdelay(10);
|
||||
+ mdelay(300);
|
||||
register_pci_controller(&ssb_pcicore_controller);
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/drivers/ssb/sprom.c
|
||||
+++ b/drivers/ssb/sprom.c
|
||||
@@ -174,6 +174,7 @@ int ssb_arch_set_fallback_sprom(const st
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(ssb_get_fallback_sprom);
|
||||
|
||||
const struct ssb_sprom *ssb_get_fallback_sprom(void)
|
||||
{
|
||||
--- a/include/linux/ssb/ssb.h
|
||||
+++ b/include/linux/ssb/ssb.h
|
||||
@@ -387,6 +387,7 @@ extern void ssb_bus_unregister(struct ss
|
||||
/* Set a fallback SPROM.
|
||||
* See kdoc at the function definition for complete documentation. */
|
||||
extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
|
||||
+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
@@ -1,27 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,11 +1,14 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
+header-y += page.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
|
||||
unifdef-y += etraxgpio.h
|
||||
unifdef-y += rs485.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/char/cs5535_gpio.c
|
||||
+++ b/drivers/char/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/smp_lock.h>
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -177,7 +184,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -232,23 +239,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,27 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,11 +1,14 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
+header-y += page.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
|
||||
unifdef-y += etraxgpio.h
|
||||
unifdef-y += rs485.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,27 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,11 +1,14 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
+header-y += page.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
|
||||
unifdef-y += etraxgpio.h
|
||||
unifdef-y += rs485.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/char/cs5535_gpio.c
|
||||
+++ b/drivers/char/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -176,7 +183,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -231,23 +238,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/drivers/ssb/sprom.c
|
||||
+++ b/drivers/ssb/sprom.c
|
||||
@@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback
|
||||
{
|
||||
return fallback_sprom;
|
||||
}
|
||||
+EXPORT_SYMBOL(ssb_get_fallback_sprom);
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
|
||||
bool ssb_is_sprom_available(struct ssb_bus *bus)
|
||||
--- a/include/linux/ssb/ssb.h
|
||||
+++ b/include/linux/ssb/ssb.h
|
||||
@@ -401,6 +401,7 @@ extern bool ssb_is_sprom_available(struc
|
||||
/* Set a fallback SPROM.
|
||||
* See kdoc at the function definition for complete documentation. */
|
||||
extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
|
||||
+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
@@ -1,27 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,11 +1,14 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
+header-y += page.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
|
||||
unifdef-y += etraxgpio.h
|
||||
unifdef-y += rs485.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/char/cs5535_gpio.c
|
||||
+++ b/drivers/char/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -176,7 +183,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -231,23 +238,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/ssb/driver_pcicore.c
|
||||
+++ b/drivers/ssb/driver_pcicore.c
|
||||
@@ -370,7 +370,7 @@ static void ssb_pcicore_init_hostmode(st
|
||||
set_io_port_base(ssb_pcicore_controller.io_map_base);
|
||||
/* Give some time to the PCI controller to configure itself with the new
|
||||
* values. Not waiting at this point causes crashes of the machine. */
|
||||
- mdelay(10);
|
||||
+ mdelay(300);
|
||||
register_pci_controller(&ssb_pcicore_controller);
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/drivers/ssb/sprom.c
|
||||
+++ b/drivers/ssb/sprom.c
|
||||
@@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback
|
||||
{
|
||||
return fallback_sprom;
|
||||
}
|
||||
+EXPORT_SYMBOL(ssb_get_fallback_sprom);
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
|
||||
bool ssb_is_sprom_available(struct ssb_bus *bus)
|
||||
--- a/include/linux/ssb/ssb.h
|
||||
+++ b/include/linux/ssb/ssb.h
|
||||
@@ -401,6 +401,7 @@ extern bool ssb_is_sprom_available(struc
|
||||
/* Set a fallback SPROM.
|
||||
* See kdoc at the function definition for complete documentation. */
|
||||
extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
|
||||
+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
@@ -1,26 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,10 +1,13 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
+header-y += page.h
|
||||
header-y += rs485.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/char/cs5535_gpio.c
|
||||
+++ b/drivers/char/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -177,7 +184,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -232,23 +239,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/ssb/driver_pcicore.c
|
||||
+++ b/drivers/ssb/driver_pcicore.c
|
||||
@@ -370,7 +370,7 @@ static void ssb_pcicore_init_hostmode(st
|
||||
set_io_port_base(ssb_pcicore_controller.io_map_base);
|
||||
/* Give some time to the PCI controller to configure itself with the new
|
||||
* values. Not waiting at this point causes crashes of the machine. */
|
||||
- mdelay(10);
|
||||
+ mdelay(300);
|
||||
register_pci_controller(&ssb_pcicore_controller);
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/drivers/ssb/sprom.c
|
||||
+++ b/drivers/ssb/sprom.c
|
||||
@@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback
|
||||
{
|
||||
return fallback_sprom;
|
||||
}
|
||||
+EXPORT_SYMBOL(ssb_get_fallback_sprom);
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
|
||||
bool ssb_is_sprom_available(struct ssb_bus *bus)
|
||||
--- a/include/linux/ssb/ssb.h
|
||||
+++ b/include/linux/ssb/ssb.h
|
||||
@@ -401,6 +401,7 @@ extern bool ssb_is_sprom_available(struc
|
||||
/* Set a fallback SPROM.
|
||||
* See kdoc at the function definition for complete documentation. */
|
||||
extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
|
||||
+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
@@ -1,26 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,10 +1,13 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
+header-y += page.h
|
||||
header-y += rs485.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
@@ -1,10 +0,0 @@
|
||||
--- a/arch/x86/boot/tools/build.c
|
||||
+++ b/arch/x86/boot/tools/build.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
-#include <sys/sysmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
@@ -1,102 +0,0 @@
|
||||
--- a/drivers/staging/cs5535_gpio/cs5535_gpio.c
|
||||
+++ b/drivers/staging/cs5535_gpio/cs5535_gpio.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cdev.h>
|
||||
+#include <linux/device.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[]
|
||||
MODULE_DEVICE_TABLE(pci, divil_pci);
|
||||
|
||||
static struct cdev cs5535_gpio_cdev;
|
||||
+static struct class *cs5535_gpio_class;
|
||||
|
||||
/* reserve 32 entries even though some aren't usable */
|
||||
#define CS5535_GPIO_COUNT 32
|
||||
@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
|
||||
{ 0x30, 0x00, '1', '0' }, /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
|
||||
{ 0x20, 0x20, 'I', 'i' }, /* GPIOx_IN_EN */
|
||||
{ 0x04, 0x04, 'O', 'o' }, /* GPIOx_OUT_EN */
|
||||
+ { 0x10, 0x10, 'A', 'a' }, /* GPIOx_OUT_AUX1_SEL */
|
||||
+ { 0x14, 0x14, 'B', 'b' }, /* GPIOx_OUT_AUX2_SEL */
|
||||
{ 0x08, 0x08, 't', 'T' }, /* GPIOx_OUT_OD_EN */
|
||||
{ 0x18, 0x18, 'P', 'p' }, /* GPIOx_OUT_PU_EN */
|
||||
{ 0x1c, 0x1c, 'D', 'd' }, /* GPIOx_OUT_PD_EN */
|
||||
+ { 0x24, 0x24, 'N', 'n' }, /* GPIOx_IN_INV_EN */
|
||||
+ { 0x0c, 0x0c, 'X', 'x' }, /* GPIOx_OUT_INV_EN */
|
||||
+ { 0x00, 0x00, 'H', 'L' }, /* GPIOx_OUT_VAL */
|
||||
};
|
||||
|
||||
|
||||
@@ -177,7 +184,7 @@ static int __init cs5535_gpio_init(void)
|
||||
{
|
||||
dev_t dev_id;
|
||||
u32 low, hi;
|
||||
- int retval;
|
||||
+ int retval, i;
|
||||
|
||||
if (pci_dev_present(divil_pci) == 0) {
|
||||
printk(KERN_WARNING NAME ": DIVIL not found\n");
|
||||
@@ -232,23 +239,54 @@ static int __init cs5535_gpio_init(void)
|
||||
major = MAJOR(dev_id);
|
||||
}
|
||||
|
||||
- if (retval) {
|
||||
- release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (retval)
|
||||
+ goto error;
|
||||
|
||||
printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
|
||||
gpio_base, mask, major);
|
||||
|
||||
cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
|
||||
- cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
|
||||
+ if (retval) {
|
||||
+ kobject_put(&cs5535_gpio_cdev.kobj);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
|
||||
+ if (IS_ERR(cs5535_gpio_class)) {
|
||||
+ printk(KERN_ERR "Error creating cs5535_gpio class\n");
|
||||
+ cdev_del(&cs5535_gpio_cdev);
|
||||
+ retval = PTR_ERR(cs5535_gpio_class);
|
||||
+ goto error_region;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+
|
||||
+error_region:
|
||||
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
+error:
|
||||
+ release_region(gpio_base, CS5535_GPIO_SIZE);
|
||||
+ return retval;
|
||||
}
|
||||
|
||||
static void __exit cs5535_gpio_cleanup(void)
|
||||
{
|
||||
dev_t dev_id = MKDEV(major, 0);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < CS5535_GPIO_COUNT; i++) {
|
||||
+ if (mask & (1<<i)) {
|
||||
+ device_destroy(cs5535_gpio_class, MKDEV(major, i));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ class_destroy(cs5535_gpio_class);
|
||||
|
||||
cdev_del(&cs5535_gpio_cdev);
|
||||
unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/drivers/ssb/driver_pcicore.c
|
||||
+++ b/drivers/ssb/driver_pcicore.c
|
||||
@@ -370,7 +370,7 @@ static void ssb_pcicore_init_hostmode(st
|
||||
set_io_port_base(ssb_pcicore_controller.io_map_base);
|
||||
/* Give some time to the PCI controller to configure itself with the new
|
||||
* values. Not waiting at this point causes crashes of the machine. */
|
||||
- mdelay(10);
|
||||
+ mdelay(300);
|
||||
register_pci_controller(&ssb_pcicore_controller);
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
--- a/drivers/ssb/sprom.c
|
||||
+++ b/drivers/ssb/sprom.c
|
||||
@@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback
|
||||
{
|
||||
return fallback_sprom;
|
||||
}
|
||||
+EXPORT_SYMBOL(ssb_get_fallback_sprom);
|
||||
|
||||
/* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
|
||||
bool ssb_is_sprom_available(struct ssb_bus *bus)
|
||||
--- a/include/linux/ssb/ssb.h
|
||||
+++ b/include/linux/ssb/ssb.h
|
||||
@@ -405,6 +405,7 @@ extern bool ssb_is_sprom_available(struc
|
||||
/* Set a fallback SPROM.
|
||||
* See kdoc at the function definition for complete documentation. */
|
||||
extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
|
||||
+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
@@ -1,26 +0,0 @@
|
||||
--- a/arch/cris/include/arch-v10/arch/Kbuild
|
||||
+++ b/arch/cris/include/arch-v10/arch/Kbuild
|
||||
@@ -1,3 +1,5 @@
|
||||
+header-y += elf.h
|
||||
+header-y += ptrace.h
|
||||
header-y += user.h
|
||||
header-y += svinto.h
|
||||
header-y += sv_addr_ag.h
|
||||
--- a/arch/cris/include/asm/Kbuild
|
||||
+++ b/arch/cris/include/asm/Kbuild
|
||||
@@ -1,10 +1,13 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
-header-y += arch-v10/
|
||||
-header-y += arch-v32/
|
||||
+header-y += ../arch-v10/arch/
|
||||
+header-y += ../arch-v32/arch/
|
||||
|
||||
+header-y += elf.h
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
+header-y += page.h
|
||||
header-y += rs485.h
|
||||
header-y += rtc.h
|
||||
header-y += sync_serial.h
|
||||
+header-y += user.h
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user