diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/crypto/mv_cesa.c | 1 | ||||
-rw-r--r-- | drivers/hid/hid-ids.h | 3 | ||||
-rw-r--r-- | drivers/hid/hid-input.c | 9 | ||||
-rw-r--r-- | drivers/hid/usbhid/hid-quirks.c | 1 | ||||
-rw-r--r-- | drivers/hwmon/f75375s.c | 89 | ||||
-rw-r--r-- | drivers/mfd/ab8500-core.c | 5 | ||||
-rw-r--r-- | drivers/mfd/mfd-core.c | 2 | ||||
-rw-r--r-- | drivers/mfd/s5m-core.c | 2 | ||||
-rw-r--r-- | drivers/mfd/tps65910.c | 2 | ||||
-rw-r--r-- | drivers/mfd/tps65912-core.c | 2 | ||||
-rw-r--r-- | drivers/mfd/wm8350-irq.c | 1 | ||||
-rw-r--r-- | drivers/mfd/wm8994-core.c | 14 | ||||
-rw-r--r-- | drivers/mfd/wm8994-regmap.c | 1 | ||||
-rw-r--r-- | drivers/parisc/iommu-helpers.h | 2 | ||||
-rw-r--r-- | drivers/scsi/osd/osd_uld.c | 4 | ||||
-rw-r--r-- | drivers/video/omap2/displays/Kconfig | 2 | ||||
-rw-r--r-- | drivers/video/omap2/dss/apply.c | 6 | ||||
-rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 24 | ||||
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 9 | ||||
-rw-r--r-- | drivers/video/via/hw.c | 4 |
20 files changed, 148 insertions, 35 deletions
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c index 597235a2f8f9..0d40cf66b3cc 100644 --- a/drivers/crypto/mv_cesa.c +++ b/drivers/crypto/mv_cesa.c | |||
@@ -714,6 +714,7 @@ static int mv_hash_final(struct ahash_request *req) | |||
714 | { | 714 | { |
715 | struct mv_req_hash_ctx *ctx = ahash_request_ctx(req); | 715 | struct mv_req_hash_ctx *ctx = ahash_request_ctx(req); |
716 | 716 | ||
717 | ahash_request_set_crypt(req, NULL, req->result, 0); | ||
717 | mv_update_hash_req_ctx(ctx, 1, 0); | 718 | mv_update_hash_req_ctx(ctx, 1, 0); |
718 | return mv_handle_req(&req->base); | 719 | return mv_handle_req(&req->base); |
719 | } | 720 | } |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b8574cddd953..63552e30d0c3 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
@@ -59,6 +59,9 @@ | |||
59 | #define USB_VENDOR_ID_AIRCABLE 0x16CA | 59 | #define USB_VENDOR_ID_AIRCABLE 0x16CA |
60 | #define USB_DEVICE_ID_AIRCABLE1 0x1502 | 60 | #define USB_DEVICE_ID_AIRCABLE1 0x1502 |
61 | 61 | ||
62 | #define USB_VENDOR_ID_AIREN 0x1a2c | ||
63 | #define USB_DEVICE_ID_AIREN_SLIMPLUS 0x0002 | ||
64 | |||
62 | #define USB_VENDOR_ID_ALCOR 0x058f | 65 | #define USB_VENDOR_ID_ALCOR 0x058f |
63 | #define USB_DEVICE_ID_ALCOR_USBRS232 0x9720 | 66 | #define USB_DEVICE_ID_ALCOR_USBRS232 0x9720 |
64 | 67 | ||
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 9333d692a786..627850a54d34 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -986,8 +986,13 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct | |||
986 | return; | 986 | return; |
987 | } | 987 | } |
988 | 988 | ||
989 | /* Ignore out-of-range values as per HID specification, section 5.10 */ | 989 | /* |
990 | if (value < field->logical_minimum || value > field->logical_maximum) { | 990 | * Ignore out-of-range values as per HID specification, |
991 | * section 5.10 and 6.2.25 | ||
992 | */ | ||
993 | if ((field->flags & HID_MAIN_ITEM_VARIABLE) && | ||
994 | (value < field->logical_minimum || | ||
995 | value > field->logical_maximum)) { | ||
991 | dbg_hid("Ignoring out-of-range value %x\n", value); | 996 | dbg_hid("Ignoring out-of-range value %x\n", value); |
992 | return; | 997 | return; |
993 | } | 998 | } |
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c index c831af937481..57d4e1e1df48 100644 --- a/drivers/hid/usbhid/hid-quirks.c +++ b/drivers/hid/usbhid/hid-quirks.c | |||
@@ -54,6 +54,7 @@ static const struct hid_blacklist { | |||
54 | { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT }, | 54 | { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT }, |
55 | { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT }, | 55 | { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT }, |
56 | 56 | ||
57 | { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET }, | ||
57 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, | 58 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, |
58 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, | 59 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, |
59 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, | 60 | { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, |
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c index 6bab2001ef3b..6aa5a9fad879 100644 --- a/drivers/hwmon/f75375s.c +++ b/drivers/hwmon/f75375s.c | |||
@@ -178,6 +178,16 @@ static inline void f75375_write16(struct i2c_client *client, u8 reg, | |||
178 | i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF)); | 178 | i2c_smbus_write_byte_data(client, reg + 1, (value & 0xFF)); |
179 | } | 179 | } |
180 | 180 | ||
181 | static void f75375_write_pwm(struct i2c_client *client, int nr) | ||
182 | { | ||
183 | struct f75375_data *data = i2c_get_clientdata(client); | ||
184 | if (data->kind == f75387) | ||
185 | f75375_write16(client, F75375_REG_FAN_EXP(nr), data->pwm[nr]); | ||
186 | else | ||
187 | f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), | ||
188 | data->pwm[nr]); | ||
189 | } | ||
190 | |||
181 | static struct f75375_data *f75375_update_device(struct device *dev) | 191 | static struct f75375_data *f75375_update_device(struct device *dev) |
182 | { | 192 | { |
183 | struct i2c_client *client = to_i2c_client(dev); | 193 | struct i2c_client *client = to_i2c_client(dev); |
@@ -254,6 +264,36 @@ static inline u16 rpm_to_reg(int rpm) | |||
254 | return 1500000 / rpm; | 264 | return 1500000 / rpm; |
255 | } | 265 | } |
256 | 266 | ||
267 | static bool duty_mode_enabled(u8 pwm_enable) | ||
268 | { | ||
269 | switch (pwm_enable) { | ||
270 | case 0: /* Manual, duty mode (full speed) */ | ||
271 | case 1: /* Manual, duty mode */ | ||
272 | case 4: /* Auto, duty mode */ | ||
273 | return true; | ||
274 | case 2: /* Auto, speed mode */ | ||
275 | case 3: /* Manual, speed mode */ | ||
276 | return false; | ||
277 | default: | ||
278 | BUG(); | ||
279 | } | ||
280 | } | ||
281 | |||
282 | static bool auto_mode_enabled(u8 pwm_enable) | ||
283 | { | ||
284 | switch (pwm_enable) { | ||
285 | case 0: /* Manual, duty mode (full speed) */ | ||
286 | case 1: /* Manual, duty mode */ | ||
287 | case 3: /* Manual, speed mode */ | ||
288 | return false; | ||
289 | case 2: /* Auto, speed mode */ | ||
290 | case 4: /* Auto, duty mode */ | ||
291 | return true; | ||
292 | default: | ||
293 | BUG(); | ||
294 | } | ||
295 | } | ||
296 | |||
257 | static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, | 297 | static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, |
258 | const char *buf, size_t count) | 298 | const char *buf, size_t count) |
259 | { | 299 | { |
@@ -287,6 +327,11 @@ static ssize_t set_fan_target(struct device *dev, struct device_attribute *attr, | |||
287 | if (err < 0) | 327 | if (err < 0) |
288 | return err; | 328 | return err; |
289 | 329 | ||
330 | if (auto_mode_enabled(data->pwm_enable[nr])) | ||
331 | return -EINVAL; | ||
332 | if (data->kind == f75387 && duty_mode_enabled(data->pwm_enable[nr])) | ||
333 | return -EINVAL; | ||
334 | |||
290 | mutex_lock(&data->update_lock); | 335 | mutex_lock(&data->update_lock); |
291 | data->fan_target[nr] = rpm_to_reg(val); | 336 | data->fan_target[nr] = rpm_to_reg(val); |
292 | f75375_write16(client, F75375_REG_FAN_EXP(nr), data->fan_target[nr]); | 337 | f75375_write16(client, F75375_REG_FAN_EXP(nr), data->fan_target[nr]); |
@@ -307,9 +352,13 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr, | |||
307 | if (err < 0) | 352 | if (err < 0) |
308 | return err; | 353 | return err; |
309 | 354 | ||
355 | if (auto_mode_enabled(data->pwm_enable[nr]) || | ||
356 | !duty_mode_enabled(data->pwm_enable[nr])) | ||
357 | return -EINVAL; | ||
358 | |||
310 | mutex_lock(&data->update_lock); | 359 | mutex_lock(&data->update_lock); |
311 | data->pwm[nr] = SENSORS_LIMIT(val, 0, 255); | 360 | data->pwm[nr] = SENSORS_LIMIT(val, 0, 255); |
312 | f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), data->pwm[nr]); | 361 | f75375_write_pwm(client, nr); |
313 | mutex_unlock(&data->update_lock); | 362 | mutex_unlock(&data->update_lock); |
314 | return count; | 363 | return count; |
315 | } | 364 | } |
@@ -327,11 +376,15 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) | |||
327 | struct f75375_data *data = i2c_get_clientdata(client); | 376 | struct f75375_data *data = i2c_get_clientdata(client); |
328 | u8 fanmode; | 377 | u8 fanmode; |
329 | 378 | ||
330 | if (val < 0 || val > 3) | 379 | if (val < 0 || val > 4) |
331 | return -EINVAL; | 380 | return -EINVAL; |
332 | 381 | ||
333 | fanmode = f75375_read8(client, F75375_REG_FAN_TIMER); | 382 | fanmode = f75375_read8(client, F75375_REG_FAN_TIMER); |
334 | if (data->kind == f75387) { | 383 | if (data->kind == f75387) { |
384 | /* For now, deny dangerous toggling of duty mode */ | ||
385 | if (duty_mode_enabled(data->pwm_enable[nr]) != | ||
386 | duty_mode_enabled(val)) | ||
387 | return -EOPNOTSUPP; | ||
335 | /* clear each fanX_mode bit before setting them properly */ | 388 | /* clear each fanX_mode bit before setting them properly */ |
336 | fanmode &= ~(1 << F75387_FAN_DUTY_MODE(nr)); | 389 | fanmode &= ~(1 << F75387_FAN_DUTY_MODE(nr)); |
337 | fanmode &= ~(1 << F75387_FAN_MANU_MODE(nr)); | 390 | fanmode &= ~(1 << F75387_FAN_MANU_MODE(nr)); |
@@ -345,12 +398,14 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) | |||
345 | fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); | 398 | fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); |
346 | fanmode |= (1 << F75387_FAN_DUTY_MODE(nr)); | 399 | fanmode |= (1 << F75387_FAN_DUTY_MODE(nr)); |
347 | break; | 400 | break; |
348 | case 2: /* AUTOMATIC*/ | 401 | case 2: /* Automatic, speed mode */ |
349 | fanmode |= (1 << F75387_FAN_DUTY_MODE(nr)); | ||
350 | break; | 402 | break; |
351 | case 3: /* fan speed */ | 403 | case 3: /* fan speed */ |
352 | fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); | 404 | fanmode |= (1 << F75387_FAN_MANU_MODE(nr)); |
353 | break; | 405 | break; |
406 | case 4: /* Automatic, pwm */ | ||
407 | fanmode |= (1 << F75387_FAN_DUTY_MODE(nr)); | ||
408 | break; | ||
354 | } | 409 | } |
355 | } else { | 410 | } else { |
356 | /* clear each fanX_mode bit before setting them properly */ | 411 | /* clear each fanX_mode bit before setting them properly */ |
@@ -368,14 +423,15 @@ static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val) | |||
368 | break; | 423 | break; |
369 | case 3: /* fan speed */ | 424 | case 3: /* fan speed */ |
370 | break; | 425 | break; |
426 | case 4: /* Automatic pwm */ | ||
427 | return -EINVAL; | ||
371 | } | 428 | } |
372 | } | 429 | } |
373 | 430 | ||
374 | f75375_write8(client, F75375_REG_FAN_TIMER, fanmode); | 431 | f75375_write8(client, F75375_REG_FAN_TIMER, fanmode); |
375 | data->pwm_enable[nr] = val; | 432 | data->pwm_enable[nr] = val; |
376 | if (val == 0) | 433 | if (val == 0) |
377 | f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), | 434 | f75375_write_pwm(client, nr); |
378 | data->pwm[nr]); | ||
379 | return 0; | 435 | return 0; |
380 | } | 436 | } |
381 | 437 | ||
@@ -726,14 +782,17 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data, | |||
726 | 782 | ||
727 | manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1); | 783 | manu = ((mode >> F75387_FAN_MANU_MODE(nr)) & 1); |
728 | duty = ((mode >> F75387_FAN_DUTY_MODE(nr)) & 1); | 784 | duty = ((mode >> F75387_FAN_DUTY_MODE(nr)) & 1); |
729 | if (manu && duty) | 785 | if (!manu && duty) |
730 | /* speed */ | 786 | /* auto, pwm */ |
787 | data->pwm_enable[nr] = 4; | ||
788 | else if (manu && !duty) | ||
789 | /* manual, speed */ | ||
731 | data->pwm_enable[nr] = 3; | 790 | data->pwm_enable[nr] = 3; |
732 | else if (!manu && duty) | 791 | else if (!manu && !duty) |
733 | /* automatic */ | 792 | /* automatic, speed */ |
734 | data->pwm_enable[nr] = 2; | 793 | data->pwm_enable[nr] = 2; |
735 | else | 794 | else |
736 | /* manual */ | 795 | /* manual, pwm */ |
737 | data->pwm_enable[nr] = 1; | 796 | data->pwm_enable[nr] = 1; |
738 | } else { | 797 | } else { |
739 | if (!(conf & (1 << F75375_FAN_CTRL_LINEAR(nr)))) | 798 | if (!(conf & (1 << F75375_FAN_CTRL_LINEAR(nr)))) |
@@ -758,9 +817,11 @@ static void f75375_init(struct i2c_client *client, struct f75375_data *data, | |||
758 | set_pwm_enable_direct(client, 0, f75375s_pdata->pwm_enable[0]); | 817 | set_pwm_enable_direct(client, 0, f75375s_pdata->pwm_enable[0]); |
759 | set_pwm_enable_direct(client, 1, f75375s_pdata->pwm_enable[1]); | 818 | set_pwm_enable_direct(client, 1, f75375s_pdata->pwm_enable[1]); |
760 | for (nr = 0; nr < 2; nr++) { | 819 | for (nr = 0; nr < 2; nr++) { |
820 | if (auto_mode_enabled(f75375s_pdata->pwm_enable[nr]) || | ||
821 | !duty_mode_enabled(f75375s_pdata->pwm_enable[nr])) | ||
822 | continue; | ||
761 | data->pwm[nr] = SENSORS_LIMIT(f75375s_pdata->pwm[nr], 0, 255); | 823 | data->pwm[nr] = SENSORS_LIMIT(f75375s_pdata->pwm[nr], 0, 255); |
762 | f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr), | 824 | f75375_write_pwm(client, nr); |
763 | data->pwm[nr]); | ||
764 | } | 825 | } |
765 | 826 | ||
766 | } | 827 | } |
@@ -787,7 +848,7 @@ static int f75375_probe(struct i2c_client *client, | |||
787 | if (err) | 848 | if (err) |
788 | goto exit_free; | 849 | goto exit_free; |
789 | 850 | ||
790 | if (data->kind == f75375) { | 851 | if (data->kind != f75373) { |
791 | err = sysfs_chmod_file(&client->dev.kobj, | 852 | err = sysfs_chmod_file(&client->dev.kobj, |
792 | &sensor_dev_attr_pwm1_mode.dev_attr.attr, | 853 | &sensor_dev_attr_pwm1_mode.dev_attr.attr, |
793 | S_IRUGO | S_IWUSR); | 854 | S_IRUGO | S_IWUSR); |
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c index 53e2a80f42fa..d295941c9a3d 100644 --- a/drivers/mfd/ab8500-core.c +++ b/drivers/mfd/ab8500-core.c | |||
@@ -956,11 +956,12 @@ int __devinit ab8500_init(struct ab8500 *ab8500) | |||
956 | return ret; | 956 | return ret; |
957 | 957 | ||
958 | out_freeirq: | 958 | out_freeirq: |
959 | if (ab8500->irq_base) { | 959 | if (ab8500->irq_base) |
960 | free_irq(ab8500->irq, ab8500); | 960 | free_irq(ab8500->irq, ab8500); |
961 | out_removeirq: | 961 | out_removeirq: |
962 | if (ab8500->irq_base) | ||
962 | ab8500_irq_remove(ab8500); | 963 | ab8500_irq_remove(ab8500); |
963 | } | 964 | |
964 | return ret; | 965 | return ret; |
965 | } | 966 | } |
966 | 967 | ||
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0f5922812bff..411f523d4878 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c | |||
@@ -123,7 +123,7 @@ static int mfd_add_device(struct device *parent, int id, | |||
123 | } | 123 | } |
124 | 124 | ||
125 | if (!cell->ignore_resource_conflicts) { | 125 | if (!cell->ignore_resource_conflicts) { |
126 | ret = acpi_check_resource_conflict(res); | 126 | ret = acpi_check_resource_conflict(&res[r]); |
127 | if (ret) | 127 | if (ret) |
128 | goto fail_res; | 128 | goto fail_res; |
129 | } | 129 | } |
diff --git a/drivers/mfd/s5m-core.c b/drivers/mfd/s5m-core.c index e075c113eec6..caadabeed8e9 100644 --- a/drivers/mfd/s5m-core.c +++ b/drivers/mfd/s5m-core.c | |||
@@ -105,7 +105,7 @@ static int s5m87xx_i2c_probe(struct i2c_client *i2c, | |||
105 | s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); | 105 | s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); |
106 | i2c_set_clientdata(s5m87xx->rtc, s5m87xx); | 106 | i2c_set_clientdata(s5m87xx->rtc, s5m87xx); |
107 | 107 | ||
108 | if (pdata->cfg_pmic_irq) | 108 | if (pdata && pdata->cfg_pmic_irq) |
109 | pdata->cfg_pmic_irq(); | 109 | pdata->cfg_pmic_irq(); |
110 | 110 | ||
111 | s5m_irq_init(s5m87xx); | 111 | s5m_irq_init(s5m87xx); |
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c index 01cf5012a08f..4392f6bca156 100644 --- a/drivers/mfd/tps65910.c +++ b/drivers/mfd/tps65910.c | |||
@@ -168,7 +168,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c, | |||
168 | goto err; | 168 | goto err; |
169 | 169 | ||
170 | init_data->irq = pmic_plat_data->irq; | 170 | init_data->irq = pmic_plat_data->irq; |
171 | init_data->irq_base = pmic_plat_data->irq; | 171 | init_data->irq_base = pmic_plat_data->irq_base; |
172 | 172 | ||
173 | tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base); | 173 | tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base); |
174 | 174 | ||
diff --git a/drivers/mfd/tps65912-core.c b/drivers/mfd/tps65912-core.c index 5fec23a9ac03..74fd8cb5f372 100644 --- a/drivers/mfd/tps65912-core.c +++ b/drivers/mfd/tps65912-core.c | |||
@@ -151,7 +151,7 @@ int tps65912_device_init(struct tps65912 *tps65912) | |||
151 | goto err; | 151 | goto err; |
152 | 152 | ||
153 | init_data->irq = pmic_plat_data->irq; | 153 | init_data->irq = pmic_plat_data->irq; |
154 | init_data->irq_base = pmic_plat_data->irq; | 154 | init_data->irq_base = pmic_plat_data->irq_base; |
155 | ret = tps65912_irq_init(tps65912, init_data->irq, init_data); | 155 | ret = tps65912_irq_init(tps65912, init_data->irq, init_data); |
156 | if (ret < 0) | 156 | if (ret < 0) |
157 | goto err; | 157 | goto err; |
diff --git a/drivers/mfd/wm8350-irq.c b/drivers/mfd/wm8350-irq.c index 8a1fafd0bf7d..9fd01bf63c51 100644 --- a/drivers/mfd/wm8350-irq.c +++ b/drivers/mfd/wm8350-irq.c | |||
@@ -496,7 +496,6 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq, | |||
496 | 496 | ||
497 | mutex_init(&wm8350->irq_lock); | 497 | mutex_init(&wm8350->irq_lock); |
498 | wm8350->chip_irq = irq; | 498 | wm8350->chip_irq = irq; |
499 | wm8350->irq_base = pdata->irq_base; | ||
500 | 499 | ||
501 | if (pdata && pdata->irq_base > 0) | 500 | if (pdata && pdata->irq_base > 0) |
502 | irq_base = pdata->irq_base; | 501 | irq_base = pdata->irq_base; |
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c index f117e7fb9321..a04b3c108c8c 100644 --- a/drivers/mfd/wm8994-core.c +++ b/drivers/mfd/wm8994-core.c | |||
@@ -256,6 +256,20 @@ static int wm8994_suspend(struct device *dev) | |||
256 | break; | 256 | break; |
257 | } | 257 | } |
258 | 258 | ||
259 | switch (wm8994->type) { | ||
260 | case WM1811: | ||
261 | ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2); | ||
262 | if (ret < 0) { | ||
263 | dev_err(dev, "Failed to read jackdet: %d\n", ret); | ||
264 | } else if (ret & WM1811_JACKDET_MODE_MASK) { | ||
265 | dev_dbg(dev, "CODEC still active, ignoring suspend\n"); | ||
266 | return 0; | ||
267 | } | ||
268 | break; | ||
269 | default: | ||
270 | break; | ||
271 | } | ||
272 | |||
259 | /* Disable LDO pulldowns while the device is suspended if we | 273 | /* Disable LDO pulldowns while the device is suspended if we |
260 | * don't know that something will be driving them. */ | 274 | * don't know that something will be driving them. */ |
261 | if (!wm8994->ldo_ena_always_driven) | 275 | if (!wm8994->ldo_ena_always_driven) |
diff --git a/drivers/mfd/wm8994-regmap.c b/drivers/mfd/wm8994-regmap.c index c598ae69b8ff..bc0c5096539a 100644 --- a/drivers/mfd/wm8994-regmap.c +++ b/drivers/mfd/wm8994-regmap.c | |||
@@ -806,6 +806,7 @@ static bool wm1811_readable_register(struct device *dev, unsigned int reg) | |||
806 | case WM8994_DC_SERVO_2: | 806 | case WM8994_DC_SERVO_2: |
807 | case WM8994_DC_SERVO_READBACK: | 807 | case WM8994_DC_SERVO_READBACK: |
808 | case WM8994_DC_SERVO_4: | 808 | case WM8994_DC_SERVO_4: |
809 | case WM8994_DC_SERVO_4E: | ||
809 | case WM8994_ANALOGUE_HP_1: | 810 | case WM8994_ANALOGUE_HP_1: |
810 | case WM8958_MIC_DETECT_1: | 811 | case WM8958_MIC_DETECT_1: |
811 | case WM8958_MIC_DETECT_2: | 812 | case WM8958_MIC_DETECT_2: |
diff --git a/drivers/parisc/iommu-helpers.h b/drivers/parisc/iommu-helpers.h index a9c46cc2db37..8c33491b21fe 100644 --- a/drivers/parisc/iommu-helpers.h +++ b/drivers/parisc/iommu-helpers.h | |||
@@ -1,3 +1,5 @@ | |||
1 | #include <linux/prefetch.h> | ||
2 | |||
1 | /** | 3 | /** |
2 | * iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir. | 4 | * iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir. |
3 | * @ioc: The I/O Controller. | 5 | * @ioc: The I/O Controller. |
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c index b31a8e3841d7..d4ed9eb52657 100644 --- a/drivers/scsi/osd/osd_uld.c +++ b/drivers/scsi/osd/osd_uld.c | |||
@@ -69,10 +69,10 @@ | |||
69 | #ifndef SCSI_OSD_MAJOR | 69 | #ifndef SCSI_OSD_MAJOR |
70 | # define SCSI_OSD_MAJOR 260 | 70 | # define SCSI_OSD_MAJOR 260 |
71 | #endif | 71 | #endif |
72 | #define SCSI_OSD_MAX_MINOR 64 | 72 | #define SCSI_OSD_MAX_MINOR MINORMASK |
73 | 73 | ||
74 | static const char osd_name[] = "osd"; | 74 | static const char osd_name[] = "osd"; |
75 | static const char *osd_version_string = "open-osd 0.2.0"; | 75 | static const char *osd_version_string = "open-osd 0.2.1"; |
76 | 76 | ||
77 | MODULE_AUTHOR("Boaz Harrosh <bharrosh@panasas.com>"); | 77 | MODULE_AUTHOR("Boaz Harrosh <bharrosh@panasas.com>"); |
78 | MODULE_DESCRIPTION("open-osd Upper-Layer-Driver osd.ko"); | 78 | MODULE_DESCRIPTION("open-osd Upper-Layer-Driver osd.ko"); |
diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig index 74d29b552901..408a9927be92 100644 --- a/drivers/video/omap2/displays/Kconfig +++ b/drivers/video/omap2/displays/Kconfig | |||
@@ -12,7 +12,7 @@ config PANEL_GENERIC_DPI | |||
12 | 12 | ||
13 | config PANEL_DVI | 13 | config PANEL_DVI |
14 | tristate "DVI output" | 14 | tristate "DVI output" |
15 | depends on OMAP2_DSS_DPI | 15 | depends on OMAP2_DSS_DPI && I2C |
16 | help | 16 | help |
17 | Driver for external monitors, connected via DVI. The driver uses i2c | 17 | Driver for external monitors, connected via DVI. The driver uses i2c |
18 | to read EDID information from the monitor. | 18 | to read EDID information from the monitor. |
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c index 052dc874cd3d..87b3e25294cf 100644 --- a/drivers/video/omap2/dss/apply.c +++ b/drivers/video/omap2/dss/apply.c | |||
@@ -1276,6 +1276,9 @@ int dss_ovl_enable(struct omap_overlay *ovl) | |||
1276 | 1276 | ||
1277 | spin_unlock_irqrestore(&data_lock, flags); | 1277 | spin_unlock_irqrestore(&data_lock, flags); |
1278 | 1278 | ||
1279 | /* wait for overlay to be enabled */ | ||
1280 | wait_pending_extra_info_updates(); | ||
1281 | |||
1279 | mutex_unlock(&apply_lock); | 1282 | mutex_unlock(&apply_lock); |
1280 | 1283 | ||
1281 | return 0; | 1284 | return 0; |
@@ -1313,6 +1316,9 @@ int dss_ovl_disable(struct omap_overlay *ovl) | |||
1313 | 1316 | ||
1314 | spin_unlock_irqrestore(&data_lock, flags); | 1317 | spin_unlock_irqrestore(&data_lock, flags); |
1315 | 1318 | ||
1319 | /* wait for the overlay to be disabled */ | ||
1320 | wait_pending_extra_info_updates(); | ||
1321 | |||
1316 | mutex_unlock(&apply_lock); | 1322 | mutex_unlock(&apply_lock); |
1317 | 1323 | ||
1318 | return 0; | 1324 | return 0; |
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index d7aa3b056529..a36b934b2db4 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c | |||
@@ -165,9 +165,25 @@ static int hdmi_runtime_get(void) | |||
165 | 165 | ||
166 | DSSDBG("hdmi_runtime_get\n"); | 166 | DSSDBG("hdmi_runtime_get\n"); |
167 | 167 | ||
168 | /* | ||
169 | * HACK: Add dss_runtime_get() to ensure DSS clock domain is enabled. | ||
170 | * This should be removed later. | ||
171 | */ | ||
172 | r = dss_runtime_get(); | ||
173 | if (r < 0) | ||
174 | goto err_get_dss; | ||
175 | |||
168 | r = pm_runtime_get_sync(&hdmi.pdev->dev); | 176 | r = pm_runtime_get_sync(&hdmi.pdev->dev); |
169 | WARN_ON(r < 0); | 177 | WARN_ON(r < 0); |
170 | return r < 0 ? r : 0; | 178 | if (r < 0) |
179 | goto err_get_hdmi; | ||
180 | |||
181 | return 0; | ||
182 | |||
183 | err_get_hdmi: | ||
184 | dss_runtime_put(); | ||
185 | err_get_dss: | ||
186 | return r; | ||
171 | } | 187 | } |
172 | 188 | ||
173 | static void hdmi_runtime_put(void) | 189 | static void hdmi_runtime_put(void) |
@@ -178,6 +194,12 @@ static void hdmi_runtime_put(void) | |||
178 | 194 | ||
179 | r = pm_runtime_put_sync(&hdmi.pdev->dev); | 195 | r = pm_runtime_put_sync(&hdmi.pdev->dev); |
180 | WARN_ON(r < 0); | 196 | WARN_ON(r < 0); |
197 | |||
198 | /* | ||
199 | * HACK: This is added to complement the dss_runtime_get() call in | ||
200 | * hdmi_runtime_get(). This should be removed later. | ||
201 | */ | ||
202 | dss_runtime_put(); | ||
181 | } | 203 | } |
182 | 204 | ||
183 | int hdmi_init_display(struct omap_dss_device *dssdev) | 205 | int hdmi_init_display(struct omap_dss_device *dssdev) |
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c index 2d72334ca3da..6847a478b459 100644 --- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c +++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | |||
@@ -479,14 +479,7 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data, | |||
479 | 479 | ||
480 | bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data) | 480 | bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data) |
481 | { | 481 | { |
482 | int r; | 482 | return gpio_get_value(ip_data->hpd_gpio); |
483 | |||
484 | void __iomem *base = hdmi_core_sys_base(ip_data); | ||
485 | |||
486 | /* HPD */ | ||
487 | r = REG_GET(base, HDMI_CORE_SYS_SYS_STAT, 1, 1); | ||
488 | |||
489 | return r == 1; | ||
490 | } | 483 | } |
491 | 484 | ||
492 | static void hdmi_core_init(struct hdmi_core_video_config *video_cfg, | 485 | static void hdmi_core_init(struct hdmi_core_video_config *video_cfg, |
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index d5aaca9cfa7e..8497727d66de 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -1810,7 +1810,11 @@ static void hw_init(void) | |||
1810 | break; | 1810 | break; |
1811 | } | 1811 | } |
1812 | 1812 | ||
1813 | /* magic required on VX900 for correct modesetting on IGA1 */ | ||
1814 | via_write_reg_mask(VIACR, 0x45, 0x00, 0x01); | ||
1815 | |||
1813 | /* probably this should go to the scaling code one day */ | 1816 | /* probably this should go to the scaling code one day */ |
1817 | via_write_reg_mask(VIACR, 0xFD, 0, 0x80); /* VX900 hw scale on IGA2 */ | ||
1814 | viafb_write_regx(scaling_parameters, ARRAY_SIZE(scaling_parameters)); | 1818 | viafb_write_regx(scaling_parameters, ARRAY_SIZE(scaling_parameters)); |
1815 | 1819 | ||
1816 | /* Fill VPIT Parameters */ | 1820 | /* Fill VPIT Parameters */ |