diff options
author | Andi Kleen <andi@basil.nowhere.org> | 2006-11-28 14:12:29 -0500 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-11-28 14:12:29 -0500 |
commit | a3550a9c543556cf7764be81aeb17c6dab440753 (patch) | |
tree | e8c8bf721cc917c8842c4a007ad4b3f68eb7aa1e /drivers | |
parent | 9a14f2964b459c18198ee59ff7212321def82df7 (diff) | |
parent | 2ea5814472c3c910aed5c5b60f1f3b1000e353f1 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/processor_perflib.c | 4 | ||||
-rw-r--r-- | drivers/base/core.c | 4 | ||||
-rw-r--r-- | drivers/char/agp/generic.c | 2 | ||||
-rw-r--r-- | drivers/char/agp/intel-agp.c | 33 | ||||
-rw-r--r-- | drivers/char/tlclk.c | 5 | ||||
-rw-r--r-- | drivers/cpufreq/Kconfig | 1 | ||||
-rw-r--r-- | drivers/i2c/busses/i2c-ixp4xx.c | 2 | ||||
-rw-r--r-- | drivers/ide/pci/sgiioc4.c | 7 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 2 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/tda10086.c | 4 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/budget.c | 9 | ||||
-rw-r--r-- | drivers/media/video/et61x251/et61x251_core.c | 3 | ||||
-rw-r--r-- | drivers/media/video/saa6588.c | 4 | ||||
-rw-r--r-- | drivers/media/video/saa7115.c | 9 | ||||
-rw-r--r-- | drivers/media/video/sn9c102/sn9c102_core.c | 3 | ||||
-rw-r--r-- | drivers/net/hamradio/6pack.c | 2 | ||||
-rw-r--r-- | drivers/net/tg3.c | 4 | ||||
-rw-r--r-- | drivers/pcmcia/ds.c | 2 | ||||
-rw-r--r-- | drivers/rtc/interface.c | 16 | ||||
-rw-r--r-- | drivers/rtc/rtc-at91.c | 3 | ||||
-rw-r--r-- | drivers/rtc/rtc-dev.c | 25 | ||||
-rw-r--r-- | drivers/rtc/rtc-ds1553.c | 3 | ||||
-rw-r--r-- | drivers/rtc/rtc-rs5c372.c | 6 | ||||
-rw-r--r-- | drivers/rtc/rtc-test.c | 2 | ||||
-rw-r--r-- | drivers/usb/input/ati_remote.c | 10 |
25 files changed, 110 insertions, 55 deletions
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index 7ba5e49ab302..6fd174a37149 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c | |||
@@ -83,10 +83,8 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb, | |||
83 | goto out; | 83 | goto out; |
84 | 84 | ||
85 | ppc = (unsigned int)pr->performance_platform_limit; | 85 | ppc = (unsigned int)pr->performance_platform_limit; |
86 | if (!ppc) | ||
87 | goto out; | ||
88 | 86 | ||
89 | if (ppc > pr->performance->state_count) | 87 | if (ppc >= pr->performance->state_count) |
90 | goto out; | 88 | goto out; |
91 | 89 | ||
92 | cpufreq_verify_within_limits(policy, 0, | 90 | cpufreq_verify_within_limits(policy, 0, |
diff --git a/drivers/base/core.c b/drivers/base/core.c index 68ad11af22b4..002fde46d38d 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
@@ -591,8 +591,10 @@ void device_del(struct device * dev) | |||
591 | 591 | ||
592 | if (parent) | 592 | if (parent) |
593 | klist_del(&dev->knode_parent); | 593 | klist_del(&dev->knode_parent); |
594 | if (dev->devt_attr) | 594 | if (dev->devt_attr) { |
595 | device_remove_file(dev, dev->devt_attr); | 595 | device_remove_file(dev, dev->devt_attr); |
596 | kfree(dev->devt_attr); | ||
597 | } | ||
596 | if (dev->class) { | 598 | if (dev->class) { |
597 | sysfs_remove_link(&dev->kobj, "subsystem"); | 599 | sysfs_remove_link(&dev->kobj, "subsystem"); |
598 | sysfs_remove_link(&dev->class->subsys.kset.kobj, dev->bus_id); | 600 | sysfs_remove_link(&dev->class->subsys.kset.kobj, dev->bus_id); |
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index c39200161688..5ff457b41efb 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
@@ -1054,7 +1054,7 @@ void *agp_generic_alloc_page(struct agp_bridge_data *bridge) | |||
1054 | { | 1054 | { |
1055 | struct page * page; | 1055 | struct page * page; |
1056 | 1056 | ||
1057 | page = alloc_page(GFP_KERNEL); | 1057 | page = alloc_page(GFP_KERNEL | GFP_DMA32); |
1058 | if (page == NULL) | 1058 | if (page == NULL) |
1059 | return NULL; | 1059 | return NULL; |
1060 | 1060 | ||
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index d1ede7db5a12..555b3a8ab49c 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
@@ -169,7 +169,7 @@ static void *i8xx_alloc_pages(void) | |||
169 | { | 169 | { |
170 | struct page * page; | 170 | struct page * page; |
171 | 171 | ||
172 | page = alloc_pages(GFP_KERNEL, 2); | 172 | page = alloc_pages(GFP_KERNEL | GFP_DMA32, 2); |
173 | if (page == NULL) | 173 | if (page == NULL) |
174 | return NULL; | 174 | return NULL; |
175 | 175 | ||
@@ -387,11 +387,7 @@ static void intel_i830_init_gtt_entries(void) | |||
387 | /* We obtain the size of the GTT, which is also stored (for some | 387 | /* We obtain the size of the GTT, which is also stored (for some |
388 | * reason) at the top of stolen memory. Then we add 4KB to that | 388 | * reason) at the top of stolen memory. Then we add 4KB to that |
389 | * for the video BIOS popup, which is also stored in there. */ | 389 | * for the video BIOS popup, which is also stored in there. */ |
390 | 390 | size = agp_bridge->driver->fetch_size() + 4; | |
391 | if (IS_I965) | ||
392 | size = 512 + 4; | ||
393 | else | ||
394 | size = agp_bridge->driver->fetch_size() + 4; | ||
395 | 391 | ||
396 | if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB || | 392 | if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB || |
397 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) { | 393 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) { |
@@ -805,6 +801,26 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge) | |||
805 | 801 | ||
806 | return 0; | 802 | return 0; |
807 | } | 803 | } |
804 | |||
805 | /* | ||
806 | * The i965 supports 36-bit physical addresses, but to keep | ||
807 | * the format of the GTT the same, the bits that don't fit | ||
808 | * in a 32-bit word are shifted down to bits 4..7. | ||
809 | * | ||
810 | * Gcc is smart enough to notice that "(addr >> 28) & 0xf0" | ||
811 | * is always zero on 32-bit architectures, so no need to make | ||
812 | * this conditional. | ||
813 | */ | ||
814 | static unsigned long intel_i965_mask_memory(struct agp_bridge_data *bridge, | ||
815 | unsigned long addr, int type) | ||
816 | { | ||
817 | /* Shift high bits down */ | ||
818 | addr |= (addr >> 28) & 0xf0; | ||
819 | |||
820 | /* Type checking must be done elsewhere */ | ||
821 | return addr | bridge->driver->masks[type].mask; | ||
822 | } | ||
823 | |||
808 | static int intel_i965_fetch_size(void) | 824 | static int intel_i965_fetch_size(void) |
809 | { | 825 | { |
810 | struct aper_size_info_fixed *values; | 826 | struct aper_size_info_fixed *values; |
@@ -832,7 +848,8 @@ static int intel_i965_fetch_size(void) | |||
832 | 848 | ||
833 | agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset); | 849 | agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset); |
834 | 850 | ||
835 | return values[offset].size; | 851 | /* The i965 GTT is always sized as if it had a 512kB aperture size */ |
852 | return 512; | ||
836 | } | 853 | } |
837 | 854 | ||
838 | /* The intel i965 automatically initializes the agp aperture during POST. | 855 | /* The intel i965 automatically initializes the agp aperture during POST. |
@@ -1584,7 +1601,7 @@ static struct agp_bridge_driver intel_i965_driver = { | |||
1584 | .fetch_size = intel_i965_fetch_size, | 1601 | .fetch_size = intel_i965_fetch_size, |
1585 | .cleanup = intel_i915_cleanup, | 1602 | .cleanup = intel_i915_cleanup, |
1586 | .tlb_flush = intel_i810_tlbflush, | 1603 | .tlb_flush = intel_i810_tlbflush, |
1587 | .mask_memory = intel_i810_mask_memory, | 1604 | .mask_memory = intel_i965_mask_memory, |
1588 | .masks = intel_i810_masks, | 1605 | .masks = intel_i810_masks, |
1589 | .agp_enable = intel_i810_agp_enable, | 1606 | .agp_enable = intel_i810_agp_enable, |
1590 | .cache_flush = global_cache_flush, | 1607 | .cache_flush = global_cache_flush, |
diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c index 2444a0e24b31..244d30a03fef 100644 --- a/drivers/char/tlclk.c +++ b/drivers/char/tlclk.c | |||
@@ -792,15 +792,14 @@ static int __init tlclk_init(void) | |||
792 | ret = misc_register(&tlclk_miscdev); | 792 | ret = misc_register(&tlclk_miscdev); |
793 | if (ret < 0) { | 793 | if (ret < 0) { |
794 | printk(KERN_ERR "tlclk: misc_register returns %d.\n", ret); | 794 | printk(KERN_ERR "tlclk: misc_register returns %d.\n", ret); |
795 | ret = -EBUSY; | ||
796 | goto out3; | 795 | goto out3; |
797 | } | 796 | } |
798 | 797 | ||
799 | tlclk_device = platform_device_register_simple("telco_clock", | 798 | tlclk_device = platform_device_register_simple("telco_clock", |
800 | -1, NULL, 0); | 799 | -1, NULL, 0); |
801 | if (!tlclk_device) { | 800 | if (IS_ERR(tlclk_device)) { |
802 | printk(KERN_ERR "tlclk: platform_device_register failed.\n"); | 801 | printk(KERN_ERR "tlclk: platform_device_register failed.\n"); |
803 | ret = -EBUSY; | 802 | ret = PTR_ERR(tlclk_device); |
804 | goto out4; | 803 | goto out4; |
805 | } | 804 | } |
806 | 805 | ||
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 2cc71b66231e..491779af8d55 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig | |||
@@ -107,6 +107,7 @@ config CPU_FREQ_GOV_USERSPACE | |||
107 | 107 | ||
108 | config CPU_FREQ_GOV_ONDEMAND | 108 | config CPU_FREQ_GOV_ONDEMAND |
109 | tristate "'ondemand' cpufreq policy governor" | 109 | tristate "'ondemand' cpufreq policy governor" |
110 | select CPU_FREQ_TABLE | ||
110 | help | 111 | help |
111 | 'ondemand' - This driver adds a dynamic cpufreq policy governor. | 112 | 'ondemand' - This driver adds a dynamic cpufreq policy governor. |
112 | The governor does a periodic polling and | 113 | The governor does a periodic polling and |
diff --git a/drivers/i2c/busses/i2c-ixp4xx.c b/drivers/i2c/busses/i2c-ixp4xx.c index 05fffb9415a2..68fe863f9d54 100644 --- a/drivers/i2c/busses/i2c-ixp4xx.c +++ b/drivers/i2c/busses/i2c-ixp4xx.c | |||
@@ -138,7 +138,7 @@ static int ixp4xx_i2c_probe(struct platform_device *plat_dev) | |||
138 | gpio_line_set(gpio->sda_pin, 0); | 138 | gpio_line_set(gpio->sda_pin, 0); |
139 | 139 | ||
140 | err = i2c_bit_add_bus(&drv_data->adapter); | 140 | err = i2c_bit_add_bus(&drv_data->adapter); |
141 | if (err != 0) | 141 | if (err) { |
142 | printk(KERN_ERR "ERROR: Could not install %s\n", plat_dev->dev.bus_id); | 142 | printk(KERN_ERR "ERROR: Could not install %s\n", plat_dev->dev.bus_id); |
143 | 143 | ||
144 | kfree(drv_data); | 144 | kfree(drv_data); |
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index 244f7eb7006d..cfad09accf52 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
@@ -768,14 +768,7 @@ ioc4_ide_init(void) | |||
768 | return ioc4_register_submodule(&ioc4_ide_submodule); | 768 | return ioc4_register_submodule(&ioc4_ide_submodule); |
769 | } | 769 | } |
770 | 770 | ||
771 | static void __devexit | ||
772 | ioc4_ide_exit(void) | ||
773 | { | ||
774 | ioc4_unregister_submodule(&ioc4_ide_submodule); | ||
775 | } | ||
776 | |||
777 | late_initcall(ioc4_ide_init); /* Call only after IDE init is done */ | 771 | late_initcall(ioc4_ide_init); /* Call only after IDE init is done */ |
778 | module_exit(ioc4_ide_exit); | ||
779 | 772 | ||
780 | MODULE_AUTHOR("Aniket Malatpure/Jeremy Higdon"); | 773 | MODULE_AUTHOR("Aniket Malatpure/Jeremy Higdon"); |
781 | MODULE_DESCRIPTION("IDE PCI driver module for SGI IOC4 Base-IO Card"); | 774 | MODULE_DESCRIPTION("IDE PCI driver module for SGI IOC4 Base-IO Card"); |
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 53304e6991ac..a2ab2eebfc68 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -348,7 +348,7 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wra | |||
348 | 348 | ||
349 | static void dvb_frontend_swzigzag(struct dvb_frontend *fe) | 349 | static void dvb_frontend_swzigzag(struct dvb_frontend *fe) |
350 | { | 350 | { |
351 | fe_status_t s; | 351 | fe_status_t s = 0; |
352 | struct dvb_frontend_private *fepriv = fe->frontend_priv; | 352 | struct dvb_frontend_private *fepriv = fe->frontend_priv; |
353 | 353 | ||
354 | /* if we've got no parameters, just keep idling */ | 354 | /* if we've got no parameters, just keep idling */ |
diff --git a/drivers/media/dvb/frontends/tda10086.c b/drivers/media/dvb/frontends/tda10086.c index 7456b0b9976b..4c27a2d90a38 100644 --- a/drivers/media/dvb/frontends/tda10086.c +++ b/drivers/media/dvb/frontends/tda10086.c | |||
@@ -441,6 +441,10 @@ static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_pa | |||
441 | 441 | ||
442 | dprintk ("%s\n", __FUNCTION__); | 442 | dprintk ("%s\n", __FUNCTION__); |
443 | 443 | ||
444 | // check for invalid symbol rate | ||
445 | if (fe_params->u.qpsk.symbol_rate < 500000) | ||
446 | return -EINVAL; | ||
447 | |||
444 | // calculate the updated frequency (note: we convert from Hz->kHz) | 448 | // calculate the updated frequency (note: we convert from Hz->kHz) |
445 | tmp64 = tda10086_read_byte(state, 0x52); | 449 | tmp64 = tda10086_read_byte(state, 0x52); |
446 | tmp64 |= (tda10086_read_byte(state, 0x51) << 8); | 450 | tmp64 |= (tda10086_read_byte(state, 0x51) << 8); |
diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c index e58f0391e9d1..56f1c80defc6 100644 --- a/drivers/media/dvb/ttpci/budget.c +++ b/drivers/media/dvb/ttpci/budget.c | |||
@@ -46,6 +46,10 @@ | |||
46 | #include "lnbp21.h" | 46 | #include "lnbp21.h" |
47 | #include "bsru6.h" | 47 | #include "bsru6.h" |
48 | 48 | ||
49 | static int diseqc_method; | ||
50 | module_param(diseqc_method, int, 0444); | ||
51 | MODULE_PARM_DESC(diseqc_method, "Select DiSEqC method for subsystem id 13c2:1003, 0: default, 1: more reliable (for newer revisions only)"); | ||
52 | |||
49 | static void Set22K (struct budget *budget, int state) | 53 | static void Set22K (struct budget *budget, int state) |
50 | { | 54 | { |
51 | struct saa7146_dev *dev=budget->dev; | 55 | struct saa7146_dev *dev=budget->dev; |
@@ -382,6 +386,11 @@ static void frontend_init(struct budget *budget) | |||
382 | if (budget->dvb_frontend) { | 386 | if (budget->dvb_frontend) { |
383 | budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; | 387 | budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; |
384 | budget->dvb_frontend->tuner_priv = &budget->i2c_adap; | 388 | budget->dvb_frontend->tuner_priv = &budget->i2c_adap; |
389 | if (budget->dev->pci->subsystem_device == 0x1003 && diseqc_method == 0) { | ||
390 | budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd; | ||
391 | budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst; | ||
392 | budget->dvb_frontend->ops.set_tone = budget_set_tone; | ||
393 | } | ||
385 | break; | 394 | break; |
386 | } | 395 | } |
387 | break; | 396 | break; |
diff --git a/drivers/media/video/et61x251/et61x251_core.c b/drivers/media/video/et61x251/et61x251_core.c index f786ab11d2cd..86e353b26b53 100644 --- a/drivers/media/video/et61x251/et61x251_core.c +++ b/drivers/media/video/et61x251/et61x251_core.c | |||
@@ -1182,8 +1182,6 @@ static void et61x251_release_resources(struct et61x251_device* cam) | |||
1182 | video_set_drvdata(cam->v4ldev, NULL); | 1182 | video_set_drvdata(cam->v4ldev, NULL); |
1183 | video_unregister_device(cam->v4ldev); | 1183 | video_unregister_device(cam->v4ldev); |
1184 | 1184 | ||
1185 | usb_put_dev(cam->usbdev); | ||
1186 | |||
1187 | mutex_unlock(&et61x251_sysfs_lock); | 1185 | mutex_unlock(&et61x251_sysfs_lock); |
1188 | 1186 | ||
1189 | kfree(cam->control_buffer); | 1187 | kfree(cam->control_buffer); |
@@ -1275,6 +1273,7 @@ static int et61x251_release(struct inode* inode, struct file* filp) | |||
1275 | 1273 | ||
1276 | if (cam->state & DEV_DISCONNECTED) { | 1274 | if (cam->state & DEV_DISCONNECTED) { |
1277 | et61x251_release_resources(cam); | 1275 | et61x251_release_resources(cam); |
1276 | usb_put_dev(cam->usbdev); | ||
1278 | mutex_unlock(&cam->dev_mutex); | 1277 | mutex_unlock(&cam->dev_mutex); |
1279 | kfree(cam); | 1278 | kfree(cam); |
1280 | return 0; | 1279 | return 0; |
diff --git a/drivers/media/video/saa6588.c b/drivers/media/video/saa6588.c index a81285ca7d5b..7b9859c33018 100644 --- a/drivers/media/video/saa6588.c +++ b/drivers/media/video/saa6588.c | |||
@@ -212,8 +212,10 @@ static void read_from_buf(struct saa6588 *s, struct rds_command *a) | |||
212 | if (rd_blocks > s->block_count) | 212 | if (rd_blocks > s->block_count) |
213 | rd_blocks = s->block_count; | 213 | rd_blocks = s->block_count; |
214 | 214 | ||
215 | if (!rd_blocks) | 215 | if (!rd_blocks) { |
216 | spin_unlock_irqrestore(&s->lock, flags); | ||
216 | return; | 217 | return; |
218 | } | ||
217 | 219 | ||
218 | for (i = 0; i < rd_blocks; i++) { | 220 | for (i = 0; i < rd_blocks; i++) { |
219 | if (block_to_user_buf(s, buf_ptr)) { | 221 | if (block_to_user_buf(s, buf_ptr)) { |
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c index c5719f7bd1ac..f28398dd9d93 100644 --- a/drivers/media/video/saa7115.c +++ b/drivers/media/video/saa7115.c | |||
@@ -1464,8 +1464,6 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind) | |||
1464 | client->driver = &i2c_driver_saa711x; | 1464 | client->driver = &i2c_driver_saa711x; |
1465 | snprintf(client->name, sizeof(client->name) - 1, "saa7115"); | 1465 | snprintf(client->name, sizeof(client->name) - 1, "saa7115"); |
1466 | 1466 | ||
1467 | v4l_dbg(1, debug, client, "detecting saa7115 client on address 0x%x\n", address << 1); | ||
1468 | |||
1469 | for (i=0;i<0x0f;i++) { | 1467 | for (i=0;i<0x0f;i++) { |
1470 | saa711x_write(client, 0, i); | 1468 | saa711x_write(client, 0, i); |
1471 | name[i] = (saa711x_read(client, 0) &0x0f) +'0'; | 1469 | name[i] = (saa711x_read(client, 0) &0x0f) +'0'; |
@@ -1477,6 +1475,13 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind) | |||
1477 | saa711x_write(client, 0, 5); | 1475 | saa711x_write(client, 0, 5); |
1478 | chip_id = saa711x_read(client, 0) & 0x0f; | 1476 | chip_id = saa711x_read(client, 0) & 0x0f; |
1479 | 1477 | ||
1478 | /* Check whether this chip is part of the saa711x series */ | ||
1479 | if (memcmp(name, "1f711", 5)) { | ||
1480 | v4l_dbg(1, debug, client, "chip found @ 0x%x (ID %s) does not match a known saa711x chip.\n", | ||
1481 | address << 1, name); | ||
1482 | return 0; | ||
1483 | } | ||
1484 | |||
1480 | snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id); | 1485 | snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id); |
1481 | v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name); | 1486 | v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name); |
1482 | 1487 | ||
diff --git a/drivers/media/video/sn9c102/sn9c102_core.c b/drivers/media/video/sn9c102/sn9c102_core.c index a4702d3c2aca..42fb60d985b9 100644 --- a/drivers/media/video/sn9c102/sn9c102_core.c +++ b/drivers/media/video/sn9c102/sn9c102_core.c | |||
@@ -1462,8 +1462,6 @@ static void sn9c102_release_resources(struct sn9c102_device* cam) | |||
1462 | video_set_drvdata(cam->v4ldev, NULL); | 1462 | video_set_drvdata(cam->v4ldev, NULL); |
1463 | video_unregister_device(cam->v4ldev); | 1463 | video_unregister_device(cam->v4ldev); |
1464 | 1464 | ||
1465 | usb_put_dev(cam->usbdev); | ||
1466 | |||
1467 | mutex_unlock(&sn9c102_sysfs_lock); | 1465 | mutex_unlock(&sn9c102_sysfs_lock); |
1468 | 1466 | ||
1469 | kfree(cam->control_buffer); | 1467 | kfree(cam->control_buffer); |
@@ -1555,6 +1553,7 @@ static int sn9c102_release(struct inode* inode, struct file* filp) | |||
1555 | 1553 | ||
1556 | if (cam->state & DEV_DISCONNECTED) { | 1554 | if (cam->state & DEV_DISCONNECTED) { |
1557 | sn9c102_release_resources(cam); | 1555 | sn9c102_release_resources(cam); |
1556 | usb_put_dev(cam->usbdev); | ||
1558 | mutex_unlock(&cam->dev_mutex); | 1557 | mutex_unlock(&cam->dev_mutex); |
1559 | kfree(cam); | 1558 | kfree(cam); |
1560 | return 0; | 1559 | return 0; |
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c index 86b3bb9bec2d..92420f007b97 100644 --- a/drivers/net/hamradio/6pack.c +++ b/drivers/net/hamradio/6pack.c | |||
@@ -914,7 +914,7 @@ static void decode_prio_command(struct sixpack *sp, unsigned char cmd) | |||
914 | printk(KERN_DEBUG "6pack: protocol violation\n"); | 914 | printk(KERN_DEBUG "6pack: protocol violation\n"); |
915 | else | 915 | else |
916 | sp->status = 0; | 916 | sp->status = 0; |
917 | cmd &= !SIXP_RX_DCD_MASK; | 917 | cmd &= ~SIXP_RX_DCD_MASK; |
918 | } | 918 | } |
919 | sp->status = cmd & SIXP_PRIO_DATA_MASK; | 919 | sp->status = cmd & SIXP_PRIO_DATA_MASK; |
920 | } else { /* output watchdog char if idle */ | 920 | } else { /* output watchdog char if idle */ |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 1dbdd6bb587b..c20bb998e0e5 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -6979,8 +6979,10 @@ static int tg3_open(struct net_device *dev) | |||
6979 | tg3_full_lock(tp, 0); | 6979 | tg3_full_lock(tp, 0); |
6980 | 6980 | ||
6981 | err = tg3_set_power_state(tp, PCI_D0); | 6981 | err = tg3_set_power_state(tp, PCI_D0); |
6982 | if (err) | 6982 | if (err) { |
6983 | tg3_full_unlock(tp); | ||
6983 | return err; | 6984 | return err; |
6985 | } | ||
6984 | 6986 | ||
6985 | tg3_disable_ints(tp); | 6987 | tg3_disable_ints(tp); |
6986 | tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE; | 6988 | tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE; |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index a20d84d707d9..21d83a895b21 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -1272,7 +1272,9 @@ static void pcmcia_bus_remove_socket(struct class_device *class_dev, | |||
1272 | pccard_register_pcmcia(socket, NULL); | 1272 | pccard_register_pcmcia(socket, NULL); |
1273 | 1273 | ||
1274 | /* unregister any unbound devices */ | 1274 | /* unregister any unbound devices */ |
1275 | mutex_lock(&socket->skt_mutex); | ||
1275 | pcmcia_card_remove(socket, NULL); | 1276 | pcmcia_card_remove(socket, NULL); |
1277 | mutex_unlock(&socket->skt_mutex); | ||
1276 | 1278 | ||
1277 | pcmcia_put_socket(socket); | 1279 | pcmcia_put_socket(socket); |
1278 | 1280 | ||
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 579cd667b16f..6f11f6dfdd9d 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c | |||
@@ -145,6 +145,13 @@ int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | |||
145 | } | 145 | } |
146 | EXPORT_SYMBOL_GPL(rtc_set_alarm); | 146 | EXPORT_SYMBOL_GPL(rtc_set_alarm); |
147 | 147 | ||
148 | /** | ||
149 | * rtc_update_irq - report RTC periodic, alarm, and/or update irqs | ||
150 | * @class_dev: the rtc's class device | ||
151 | * @num: how many irqs are being reported (usually one) | ||
152 | * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF | ||
153 | * Context: in_interrupt(), irqs blocked | ||
154 | */ | ||
148 | void rtc_update_irq(struct class_device *class_dev, | 155 | void rtc_update_irq(struct class_device *class_dev, |
149 | unsigned long num, unsigned long events) | 156 | unsigned long num, unsigned long events) |
150 | { | 157 | { |
@@ -201,12 +208,12 @@ int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task) | |||
201 | if (task == NULL || task->func == NULL) | 208 | if (task == NULL || task->func == NULL) |
202 | return -EINVAL; | 209 | return -EINVAL; |
203 | 210 | ||
204 | spin_lock(&rtc->irq_task_lock); | 211 | spin_lock_irq(&rtc->irq_task_lock); |
205 | if (rtc->irq_task == NULL) { | 212 | if (rtc->irq_task == NULL) { |
206 | rtc->irq_task = task; | 213 | rtc->irq_task = task; |
207 | retval = 0; | 214 | retval = 0; |
208 | } | 215 | } |
209 | spin_unlock(&rtc->irq_task_lock); | 216 | spin_unlock_irq(&rtc->irq_task_lock); |
210 | 217 | ||
211 | return retval; | 218 | return retval; |
212 | } | 219 | } |
@@ -216,10 +223,10 @@ void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task) | |||
216 | { | 223 | { |
217 | struct rtc_device *rtc = to_rtc_device(class_dev); | 224 | struct rtc_device *rtc = to_rtc_device(class_dev); |
218 | 225 | ||
219 | spin_lock(&rtc->irq_task_lock); | 226 | spin_lock_irq(&rtc->irq_task_lock); |
220 | if (rtc->irq_task == task) | 227 | if (rtc->irq_task == task) |
221 | rtc->irq_task = NULL; | 228 | rtc->irq_task = NULL; |
222 | spin_unlock(&rtc->irq_task_lock); | 229 | spin_unlock_irq(&rtc->irq_task_lock); |
223 | } | 230 | } |
224 | EXPORT_SYMBOL_GPL(rtc_irq_unregister); | 231 | EXPORT_SYMBOL_GPL(rtc_irq_unregister); |
225 | 232 | ||
@@ -265,3 +272,4 @@ int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int | |||
265 | } | 272 | } |
266 | return err; | 273 | return err; |
267 | } | 274 | } |
275 | EXPORT_SYMBOL_GPL(rtc_irq_set_freq); | ||
diff --git a/drivers/rtc/rtc-at91.c b/drivers/rtc/rtc-at91.c index bd61e99540a3..5c8addcaf1fb 100644 --- a/drivers/rtc/rtc-at91.c +++ b/drivers/rtc/rtc-at91.c | |||
@@ -292,7 +292,8 @@ static int __init at91_rtc_probe(struct platform_device *pdev) | |||
292 | AT91_RTC_CALEV); | 292 | AT91_RTC_CALEV); |
293 | 293 | ||
294 | ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt, | 294 | ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt, |
295 | IRQF_SHARED, "at91_rtc", pdev); | 295 | IRQF_DISABLED | IRQF_SHARED, |
296 | "at91_rtc", pdev); | ||
296 | if (ret) { | 297 | if (ret) { |
297 | printk(KERN_ERR "at91_rtc: IRQ %d already in use.\n", | 298 | printk(KERN_ERR "at91_rtc: IRQ %d already in use.\n", |
298 | AT91_ID_SYS); | 299 | AT91_ID_SYS); |
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index 583789c66cdb..814b9e1873f5 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c | |||
@@ -61,7 +61,9 @@ static void rtc_uie_task(void *data) | |||
61 | int err; | 61 | int err; |
62 | 62 | ||
63 | err = rtc_read_time(&rtc->class_dev, &tm); | 63 | err = rtc_read_time(&rtc->class_dev, &tm); |
64 | spin_lock_irq(&rtc->irq_lock); | 64 | |
65 | local_irq_disable(); | ||
66 | spin_lock(&rtc->irq_lock); | ||
65 | if (rtc->stop_uie_polling || err) { | 67 | if (rtc->stop_uie_polling || err) { |
66 | rtc->uie_task_active = 0; | 68 | rtc->uie_task_active = 0; |
67 | } else if (rtc->oldsecs != tm.tm_sec) { | 69 | } else if (rtc->oldsecs != tm.tm_sec) { |
@@ -74,11 +76,11 @@ static void rtc_uie_task(void *data) | |||
74 | } else if (schedule_work(&rtc->uie_task) == 0) { | 76 | } else if (schedule_work(&rtc->uie_task) == 0) { |
75 | rtc->uie_task_active = 0; | 77 | rtc->uie_task_active = 0; |
76 | } | 78 | } |
77 | spin_unlock_irq(&rtc->irq_lock); | 79 | spin_unlock(&rtc->irq_lock); |
78 | if (num) | 80 | if (num) |
79 | rtc_update_irq(&rtc->class_dev, num, RTC_UF | RTC_IRQF); | 81 | rtc_update_irq(&rtc->class_dev, num, RTC_UF | RTC_IRQF); |
82 | local_irq_enable(); | ||
80 | } | 83 | } |
81 | |||
82 | static void rtc_uie_timer(unsigned long data) | 84 | static void rtc_uie_timer(unsigned long data) |
83 | { | 85 | { |
84 | struct rtc_device *rtc = (struct rtc_device *)data; | 86 | struct rtc_device *rtc = (struct rtc_device *)data; |
@@ -214,7 +216,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
214 | struct rtc_wkalrm alarm; | 216 | struct rtc_wkalrm alarm; |
215 | void __user *uarg = (void __user *) arg; | 217 | void __user *uarg = (void __user *) arg; |
216 | 218 | ||
217 | /* check that the calles has appropriate permissions | 219 | /* check that the calling task has appropriate permissions |
218 | * for certain ioctls. doing this check here is useful | 220 | * for certain ioctls. doing this check here is useful |
219 | * to avoid duplicate code in each driver. | 221 | * to avoid duplicate code in each driver. |
220 | */ | 222 | */ |
@@ -238,10 +240,10 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
238 | 240 | ||
239 | /* avoid conflicting IRQ users */ | 241 | /* avoid conflicting IRQ users */ |
240 | if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) { | 242 | if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) { |
241 | spin_lock(&rtc->irq_task_lock); | 243 | spin_lock_irq(&rtc->irq_task_lock); |
242 | if (rtc->irq_task) | 244 | if (rtc->irq_task) |
243 | err = -EBUSY; | 245 | err = -EBUSY; |
244 | spin_unlock(&rtc->irq_task_lock); | 246 | spin_unlock_irq(&rtc->irq_task_lock); |
245 | 247 | ||
246 | if (err < 0) | 248 | if (err < 0) |
247 | return err; | 249 | return err; |
@@ -299,6 +301,17 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
299 | 301 | ||
300 | err = rtc_set_time(class_dev, &tm); | 302 | err = rtc_set_time(class_dev, &tm); |
301 | break; | 303 | break; |
304 | |||
305 | case RTC_IRQP_READ: | ||
306 | if (ops->irq_set_freq) | ||
307 | err = put_user(rtc->irq_freq, (unsigned long *) arg); | ||
308 | break; | ||
309 | |||
310 | case RTC_IRQP_SET: | ||
311 | if (ops->irq_set_freq) | ||
312 | err = rtc_irq_set_freq(class_dev, rtc->irq_task, arg); | ||
313 | break; | ||
314 | |||
302 | #if 0 | 315 | #if 0 |
303 | case RTC_EPOCH_SET: | 316 | case RTC_EPOCH_SET: |
304 | #ifndef rtc_epoch | 317 | #ifndef rtc_epoch |
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index 78552e6e76aa..001eb1123a65 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c | |||
@@ -340,7 +340,8 @@ static int __init ds1553_rtc_probe(struct platform_device *pdev) | |||
340 | 340 | ||
341 | if (pdata->irq >= 0) { | 341 | if (pdata->irq >= 0) { |
342 | writeb(0, ioaddr + RTC_INTERRUPTS); | 342 | writeb(0, ioaddr + RTC_INTERRUPTS); |
343 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, IRQF_SHARED, | 343 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, |
344 | IRQF_DISABLED | IRQF_SHARED, | ||
344 | pdev->name, pdev) < 0) { | 345 | pdev->name, pdev) < 0) { |
345 | dev_warn(&pdev->dev, "interrupt not available.\n"); | 346 | dev_warn(&pdev->dev, "interrupt not available.\n"); |
346 | pdata->irq = -1; | 347 | pdata->irq = -1; |
diff --git a/drivers/rtc/rtc-rs5c372.c b/drivers/rtc/rtc-rs5c372.c index 2a86632580f1..a44fe4efa216 100644 --- a/drivers/rtc/rtc-rs5c372.c +++ b/drivers/rtc/rtc-rs5c372.c | |||
@@ -126,13 +126,13 @@ static int rs5c372_get_trim(struct i2c_client *client, int *osc, int *trim) | |||
126 | return -EIO; | 126 | return -EIO; |
127 | } | 127 | } |
128 | 128 | ||
129 | dev_dbg(&client->dev, "%s: raw trim=%x\n", __FUNCTION__, *trim); | ||
130 | |||
131 | if (osc) | 129 | if (osc) |
132 | *osc = (buf & RS5C372_TRIM_XSL) ? 32000 : 32768; | 130 | *osc = (buf & RS5C372_TRIM_XSL) ? 32000 : 32768; |
133 | 131 | ||
134 | if (trim) | 132 | if (trim) { |
135 | *trim = buf & RS5C372_TRIM_MASK; | 133 | *trim = buf & RS5C372_TRIM_MASK; |
134 | dev_dbg(&client->dev, "%s: raw trim=%x\n", __FUNCTION__, *trim); | ||
135 | } | ||
136 | 136 | ||
137 | return 0; | 137 | return 0; |
138 | } | 138 | } |
diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c index bc4bd24508a2..6ef9c62d5032 100644 --- a/drivers/rtc/rtc-test.c +++ b/drivers/rtc/rtc-test.c | |||
@@ -99,6 +99,7 @@ static ssize_t test_irq_store(struct device *dev, | |||
99 | struct rtc_device *rtc = platform_get_drvdata(plat_dev); | 99 | struct rtc_device *rtc = platform_get_drvdata(plat_dev); |
100 | 100 | ||
101 | retval = count; | 101 | retval = count; |
102 | local_irq_disable(); | ||
102 | if (strncmp(buf, "tick", 4) == 0) | 103 | if (strncmp(buf, "tick", 4) == 0) |
103 | rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF); | 104 | rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF); |
104 | else if (strncmp(buf, "alarm", 5) == 0) | 105 | else if (strncmp(buf, "alarm", 5) == 0) |
@@ -107,6 +108,7 @@ static ssize_t test_irq_store(struct device *dev, | |||
107 | rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF); | 108 | rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF); |
108 | else | 109 | else |
109 | retval = -EINVAL; | 110 | retval = -EINVAL; |
111 | local_irq_enable(); | ||
110 | 112 | ||
111 | return retval; | 113 | return retval; |
112 | } | 114 | } |
diff --git a/drivers/usb/input/ati_remote.c b/drivers/usb/input/ati_remote.c index f659f3028ad2..787b847d38cc 100644 --- a/drivers/usb/input/ati_remote.c +++ b/drivers/usb/input/ati_remote.c | |||
@@ -636,13 +636,11 @@ static void ati_remote_free_buffers(struct ati_remote *ati_remote) | |||
636 | if (ati_remote->out_urb) | 636 | if (ati_remote->out_urb) |
637 | usb_free_urb(ati_remote->out_urb); | 637 | usb_free_urb(ati_remote->out_urb); |
638 | 638 | ||
639 | if (ati_remote->inbuf) | 639 | usb_buffer_free(ati_remote->udev, DATA_BUFSIZE, |
640 | usb_buffer_free(ati_remote->udev, DATA_BUFSIZE, | 640 | ati_remote->inbuf, ati_remote->inbuf_dma); |
641 | ati_remote->inbuf, ati_remote->inbuf_dma); | ||
642 | 641 | ||
643 | if (ati_remote->outbuf) | 642 | usb_buffer_free(ati_remote->udev, DATA_BUFSIZE, |
644 | usb_buffer_free(ati_remote->udev, DATA_BUFSIZE, | 643 | ati_remote->outbuf, ati_remote->outbuf_dma); |
645 | ati_remote->inbuf, ati_remote->outbuf_dma); | ||
646 | } | 644 | } |
647 | 645 | ||
648 | static void ati_remote_input_init(struct ati_remote *ati_remote) | 646 | static void ati_remote_input_init(struct ati_remote *ati_remote) |