platform specific patches don't belong here - take #2

SVN-Revision: 25085
v19.07.3_mercusys_ac12_duma
Imre Kaloz 14 years ago
parent 7c9d132d10
commit 2821101c92

@ -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
Loading…
Cancel
Save