diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hwmon/ads7871.c | 38 | ||||
| -rw-r--r-- | drivers/hwmon/coretemp.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/k8temp.c | 35 | ||||
| -rw-r--r-- | drivers/xen/events.c | 21 |
4 files changed, 67 insertions, 28 deletions
diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index b300a2048af1..52319340e182 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c | |||
| @@ -160,30 +160,12 @@ static const struct attribute_group ads7871_group = { | |||
| 160 | 160 | ||
| 161 | static int __devinit ads7871_probe(struct spi_device *spi) | 161 | static int __devinit ads7871_probe(struct spi_device *spi) |
| 162 | { | 162 | { |
| 163 | int status, ret, err = 0; | 163 | int ret, err; |
| 164 | uint8_t val; | 164 | uint8_t val; |
| 165 | struct ads7871_data *pdata; | 165 | struct ads7871_data *pdata; |
| 166 | 166 | ||
| 167 | dev_dbg(&spi->dev, "probe\n"); | 167 | dev_dbg(&spi->dev, "probe\n"); |
| 168 | 168 | ||
| 169 | pdata = kzalloc(sizeof(struct ads7871_data), GFP_KERNEL); | ||
| 170 | if (!pdata) { | ||
| 171 | err = -ENOMEM; | ||
| 172 | goto exit; | ||
| 173 | } | ||
| 174 | |||
| 175 | status = sysfs_create_group(&spi->dev.kobj, &ads7871_group); | ||
| 176 | if (status < 0) | ||
| 177 | goto error_free; | ||
| 178 | |||
| 179 | pdata->hwmon_dev = hwmon_device_register(&spi->dev); | ||
| 180 | if (IS_ERR(pdata->hwmon_dev)) { | ||
| 181 | err = PTR_ERR(pdata->hwmon_dev); | ||
| 182 | goto error_remove; | ||
| 183 | } | ||
| 184 | |||
| 185 | spi_set_drvdata(spi, pdata); | ||
| 186 | |||
| 187 | /* Configure the SPI bus */ | 169 | /* Configure the SPI bus */ |
| 188 | spi->mode = (SPI_MODE_0); | 170 | spi->mode = (SPI_MODE_0); |
| 189 | spi->bits_per_word = 8; | 171 | spi->bits_per_word = 8; |
| @@ -201,6 +183,24 @@ static int __devinit ads7871_probe(struct spi_device *spi) | |||
| 201 | we need to make sure we really have a chip*/ | 183 | we need to make sure we really have a chip*/ |
| 202 | if (val != ret) { | 184 | if (val != ret) { |
| 203 | err = -ENODEV; | 185 | err = -ENODEV; |
| 186 | goto exit; | ||
| 187 | } | ||
| 188 | |||
| 189 | pdata = kzalloc(sizeof(struct ads7871_data), GFP_KERNEL); | ||
| 190 | if (!pdata) { | ||
| 191 | err = -ENOMEM; | ||
| 192 | goto exit; | ||
| 193 | } | ||
| 194 | |||
| 195 | err = sysfs_create_group(&spi->dev.kobj, &ads7871_group); | ||
| 196 | if (err < 0) | ||
| 197 | goto error_free; | ||
| 198 | |||
| 199 | spi_set_drvdata(spi, pdata); | ||
| 200 | |||
| 201 | pdata->hwmon_dev = hwmon_device_register(&spi->dev); | ||
| 202 | if (IS_ERR(pdata->hwmon_dev)) { | ||
| 203 | err = PTR_ERR(pdata->hwmon_dev); | ||
| 204 | goto error_remove; | 204 | goto error_remove; |
| 205 | } | 205 | } |
| 206 | 206 | ||
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index c070c9714cbe..de8111114f46 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c | |||
| @@ -518,7 +518,6 @@ static struct notifier_block coretemp_cpu_notifier __refdata = { | |||
| 518 | static int __init coretemp_init(void) | 518 | static int __init coretemp_init(void) |
| 519 | { | 519 | { |
| 520 | int i, err = -ENODEV; | 520 | int i, err = -ENODEV; |
| 521 | struct pdev_entry *p, *n; | ||
| 522 | 521 | ||
| 523 | /* quick check if we run Intel */ | 522 | /* quick check if we run Intel */ |
| 524 | if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL) | 523 | if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL) |
diff --git a/drivers/hwmon/k8temp.c b/drivers/hwmon/k8temp.c index b9bb3e0ca530..39ead2a4d3c5 100644 --- a/drivers/hwmon/k8temp.c +++ b/drivers/hwmon/k8temp.c | |||
| @@ -143,6 +143,37 @@ static const struct pci_device_id k8temp_ids[] = { | |||
| 143 | 143 | ||
| 144 | MODULE_DEVICE_TABLE(pci, k8temp_ids); | 144 | MODULE_DEVICE_TABLE(pci, k8temp_ids); |
| 145 | 145 | ||
| 146 | static int __devinit is_rev_g_desktop(u8 model) | ||
| 147 | { | ||
| 148 | u32 brandidx; | ||
| 149 | |||
| 150 | if (model < 0x69) | ||
| 151 | return 0; | ||
| 152 | |||
| 153 | if (model == 0xc1 || model == 0x6c || model == 0x7c) | ||
| 154 | return 0; | ||
| 155 | |||
| 156 | /* | ||
| 157 | * Differentiate between AM2 and ASB1. | ||
| 158 | * See "Constructing the processor Name String" in "Revision | ||
| 159 | * Guide for AMD NPT Family 0Fh Processors" (33610). | ||
| 160 | */ | ||
| 161 | brandidx = cpuid_ebx(0x80000001); | ||
| 162 | brandidx = (brandidx >> 9) & 0x1f; | ||
| 163 | |||
| 164 | /* Single core */ | ||
| 165 | if ((model == 0x6f || model == 0x7f) && | ||
| 166 | (brandidx == 0x7 || brandidx == 0x9 || brandidx == 0xc)) | ||
| 167 | return 0; | ||
| 168 | |||
| 169 | /* Dual core */ | ||
| 170 | if (model == 0x6b && | ||
| 171 | (brandidx == 0xb || brandidx == 0xc)) | ||
| 172 | return 0; | ||
| 173 | |||
| 174 | return 1; | ||
| 175 | } | ||
| 176 | |||
| 146 | static int __devinit k8temp_probe(struct pci_dev *pdev, | 177 | static int __devinit k8temp_probe(struct pci_dev *pdev, |
| 147 | const struct pci_device_id *id) | 178 | const struct pci_device_id *id) |
| 148 | { | 179 | { |
| @@ -179,9 +210,7 @@ static int __devinit k8temp_probe(struct pci_dev *pdev, | |||
| 179 | "wrong - check erratum #141\n"); | 210 | "wrong - check erratum #141\n"); |
| 180 | } | 211 | } |
| 181 | 212 | ||
| 182 | if ((model >= 0x69) && | 213 | if (is_rev_g_desktop(model)) { |
| 183 | !(model == 0xc1 || model == 0x6c || model == 0x7c || | ||
| 184 | model == 0x6b || model == 0x6f || model == 0x7f)) { | ||
| 185 | /* | 214 | /* |
| 186 | * RevG desktop CPUs (i.e. no socket S1G1 or | 215 | * RevG desktop CPUs (i.e. no socket S1G1 or |
| 187 | * ASB1 parts) need additional offset, | 216 | * ASB1 parts) need additional offset, |
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 72f91bff29c7..13365ba35218 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
| @@ -112,6 +112,7 @@ static inline unsigned long *cpu_evtchn_mask(int cpu) | |||
| 112 | #define VALID_EVTCHN(chn) ((chn) != 0) | 112 | #define VALID_EVTCHN(chn) ((chn) != 0) |
| 113 | 113 | ||
| 114 | static struct irq_chip xen_dynamic_chip; | 114 | static struct irq_chip xen_dynamic_chip; |
| 115 | static struct irq_chip xen_percpu_chip; | ||
| 115 | 116 | ||
| 116 | /* Constructor for packed IRQ information. */ | 117 | /* Constructor for packed IRQ information. */ |
| 117 | static struct irq_info mk_unbound_info(void) | 118 | static struct irq_info mk_unbound_info(void) |
| @@ -377,7 +378,7 @@ int bind_evtchn_to_irq(unsigned int evtchn) | |||
| 377 | irq = find_unbound_irq(); | 378 | irq = find_unbound_irq(); |
| 378 | 379 | ||
| 379 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, | 380 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, |
| 380 | handle_level_irq, "event"); | 381 | handle_edge_irq, "event"); |
| 381 | 382 | ||
| 382 | evtchn_to_irq[evtchn] = irq; | 383 | evtchn_to_irq[evtchn] = irq; |
| 383 | irq_info[irq] = mk_evtchn_info(evtchn); | 384 | irq_info[irq] = mk_evtchn_info(evtchn); |
| @@ -403,8 +404,8 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu) | |||
| 403 | if (irq < 0) | 404 | if (irq < 0) |
| 404 | goto out; | 405 | goto out; |
| 405 | 406 | ||
| 406 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, | 407 | set_irq_chip_and_handler_name(irq, &xen_percpu_chip, |
| 407 | handle_level_irq, "ipi"); | 408 | handle_percpu_irq, "ipi"); |
| 408 | 409 | ||
| 409 | bind_ipi.vcpu = cpu; | 410 | bind_ipi.vcpu = cpu; |
| 410 | if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, | 411 | if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi, |
| @@ -444,8 +445,8 @@ static int bind_virq_to_irq(unsigned int virq, unsigned int cpu) | |||
| 444 | 445 | ||
| 445 | irq = find_unbound_irq(); | 446 | irq = find_unbound_irq(); |
| 446 | 447 | ||
| 447 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, | 448 | set_irq_chip_and_handler_name(irq, &xen_percpu_chip, |
| 448 | handle_level_irq, "virq"); | 449 | handle_percpu_irq, "virq"); |
| 449 | 450 | ||
| 450 | evtchn_to_irq[evtchn] = irq; | 451 | evtchn_to_irq[evtchn] = irq; |
| 451 | irq_info[irq] = mk_virq_info(evtchn, virq); | 452 | irq_info[irq] = mk_virq_info(evtchn, virq); |
| @@ -964,6 +965,16 @@ static struct irq_chip xen_dynamic_chip __read_mostly = { | |||
| 964 | .retrigger = retrigger_dynirq, | 965 | .retrigger = retrigger_dynirq, |
| 965 | }; | 966 | }; |
| 966 | 967 | ||
| 968 | static struct irq_chip xen_percpu_chip __read_mostly = { | ||
| 969 | .name = "xen-percpu", | ||
| 970 | |||
| 971 | .disable = disable_dynirq, | ||
| 972 | .mask = disable_dynirq, | ||
| 973 | .unmask = enable_dynirq, | ||
| 974 | |||
| 975 | .ack = ack_dynirq, | ||
| 976 | }; | ||
| 977 | |||
| 967 | int xen_set_callback_via(uint64_t via) | 978 | int xen_set_callback_via(uint64_t via) |
| 968 | { | 979 | { |
| 969 | struct xen_hvm_param a; | 980 | struct xen_hvm_param a; |
