From: Greg Kroah-Hartman Date: Wed, 10 Mar 2010 00:28:39 +0000 (-0800) Subject: .32 stuff X-Git-Tag: v2.6.32.10~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f3ac80d3b7e8857cf8fac4eab3720afe88e6f339;p=thirdparty%2Fkernel%2Fstable-queue.git .32 stuff --- diff --git a/queue-2.6.32/gpiolib-actually-set-output-state-in-wm831x_gpio_direction_output.patch b/queue-2.6.32/gpiolib-actually-set-output-state-in-wm831x_gpio_direction_output.patch new file mode 100644 index 00000000000..4c13de05a0d --- /dev/null +++ b/queue-2.6.32/gpiolib-actually-set-output-state-in-wm831x_gpio_direction_output.patch @@ -0,0 +1,60 @@ +From 3383d23d86791503559cb87837491af37469d9e5 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Wed, 17 Feb 2010 18:04:35 +0000 +Subject: gpiolib: Actually set output state in wm831x_gpio_direction_output() + +From: Mark Brown + +commit 3383d23d86791503559cb87837491af37469d9e5 upstream. + +wm831x_gpio_direction_output() ignored the state passed into it. + +Signed-off-by: Mark Brown +Signed-off-by: Samuel Ortiz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpio/wm831x-gpio.c | 22 +++++++++++++++------- + 1 file changed, 15 insertions(+), 7 deletions(-) + +--- a/drivers/gpio/wm831x-gpio.c ++++ b/drivers/gpio/wm831x-gpio.c +@@ -61,23 +61,31 @@ static int wm831x_gpio_get(struct gpio_c + return 0; + } + +-static int wm831x_gpio_direction_out(struct gpio_chip *chip, +- unsigned offset, int value) ++static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) + { + struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); + struct wm831x *wm831x = wm831x_gpio->wm831x; + +- return wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, +- WM831X_GPN_DIR | WM831X_GPN_TRI, 0); ++ wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, ++ value << offset); + } + +-static void wm831x_gpio_set(struct gpio_chip *chip, unsigned offset, int value) ++static int wm831x_gpio_direction_out(struct gpio_chip *chip, ++ unsigned offset, int value) + { + struct wm831x_gpio *wm831x_gpio = to_wm831x_gpio(chip); + struct wm831x *wm831x = wm831x_gpio->wm831x; ++ int ret; + +- wm831x_set_bits(wm831x, WM831X_GPIO_LEVEL, 1 << offset, +- value << offset); ++ ret = wm831x_set_bits(wm831x, WM831X_GPIO1_CONTROL + offset, ++ WM831X_GPN_DIR | WM831X_GPN_TRI, 0); ++ if (ret < 0) ++ return ret; ++ ++ /* Can only set GPIO state once it's in output mode */ ++ wm831x_gpio_set(chip, offset, value); ++ ++ return 0; + } + + #ifdef CONFIG_DEBUG_FS diff --git a/queue-2.6.32/hwmon-tmp421-fix-temperature-conversions.patch b/queue-2.6.32/hwmon-tmp421-fix-temperature-conversions.patch new file mode 100644 index 00000000000..8b2f36ebb41 --- /dev/null +++ b/queue-2.6.32/hwmon-tmp421-fix-temperature-conversions.patch @@ -0,0 +1,41 @@ +From a44908d742a577fb5ccb9a8c082326d4cea234c2 Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Fri, 5 Mar 2010 22:17:25 +0100 +Subject: hwmon: (tmp421) Fix temperature conversions + +From: Jean Delvare + +commit a44908d742a577fb5ccb9a8c082326d4cea234c2 upstream. + +The low bits of temperature registers are status bits, they must be +masked out before converting the register values to temperatures. + +Signed-off-by: Jean Delvare +Tested-by: Andre Prendel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hwmon/tmp421.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/hwmon/tmp421.c ++++ b/drivers/hwmon/tmp421.c +@@ -81,14 +81,16 @@ struct tmp421_data { + + static int temp_from_s16(s16 reg) + { +- int temp = reg; ++ /* Mask out status bits */ ++ int temp = reg & ~0xf; + + return (temp * 1000 + 128) / 256; + } + + static int temp_from_u16(u16 reg) + { +- int temp = reg; ++ /* Mask out status bits */ ++ int temp = reg & ~0xf; + + /* Add offset for extended temperature range. */ + temp -= 64 * 256; diff --git a/queue-2.6.32/hwmon-tmp421-restore-missing-inputs.patch b/queue-2.6.32/hwmon-tmp421-restore-missing-inputs.patch new file mode 100644 index 00000000000..ff1980e8ee4 --- /dev/null +++ b/queue-2.6.32/hwmon-tmp421-restore-missing-inputs.patch @@ -0,0 +1,73 @@ +From 8d59582a867470a3e0c3eced4a01625ae8dc546b Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Fri, 5 Mar 2010 22:17:25 +0100 +Subject: hwmon: (tmp421) Restore missing inputs + +From: Jean Delvare + +commit 8d59582a867470a3e0c3eced4a01625ae8dc546b upstream. + +An off-by-one error caused some inputs to not be created by the driver +when they should. TMP421 gets only one input instead of two, TMP422 +gets two instead of three, etc. Fix the bug by listing explicitly the +number of inputs each device has. + +Signed-off-by: Jean Delvare +Tested-by: Andre Prendel +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hwmon/tmp421.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +--- a/drivers/hwmon/tmp421.c ++++ b/drivers/hwmon/tmp421.c +@@ -62,9 +62,9 @@ static const u8 TMP421_TEMP_LSB[4] = { + #define TMP423_DEVICE_ID 0x23 + + static const struct i2c_device_id tmp421_id[] = { +- { "tmp421", tmp421 }, +- { "tmp422", tmp422 }, +- { "tmp423", tmp423 }, ++ { "tmp421", 2 }, ++ { "tmp422", 3 }, ++ { "tmp423", 4 }, + { } + }; + MODULE_DEVICE_TABLE(i2c, tmp421_id); +@@ -74,7 +74,7 @@ struct tmp421_data { + struct mutex update_lock; + char valid; + unsigned long last_updated; +- int kind; ++ int channels; + u8 config; + s16 temp[4]; + }; +@@ -110,7 +110,7 @@ static struct tmp421_data *tmp421_update + data->config = i2c_smbus_read_byte_data(client, + TMP421_CONFIG_REG_1); + +- for (i = 0; i <= data->kind; i++) { ++ for (i = 0; i < data->channels; i++) { + data->temp[i] = i2c_smbus_read_byte_data(client, + TMP421_TEMP_MSB[i]) << 8; + data->temp[i] |= i2c_smbus_read_byte_data(client, +@@ -169,7 +169,7 @@ static mode_t tmp421_is_visible(struct k + devattr = container_of(a, struct device_attribute, attr); + index = to_sensor_dev_attr(devattr)->index; + +- if (data->kind > index) ++ if (index < data->channels) + return a->mode; + + return 0; +@@ -277,7 +277,7 @@ static int tmp421_probe(struct i2c_clien + + i2c_set_clientdata(client, data); + mutex_init(&data->update_lock); +- data->kind = id->driver_data; ++ data->channels = id->driver_data; + + err = tmp421_init_client(client); + if (err) diff --git a/queue-2.6.32/series b/queue-2.6.32/series index 9b23d2412ae..6aaf65f260f 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -90,3 +90,6 @@ usb-sis-usb2vga-driver-support-kairen-s-usb-vga-adaptor-usb20svga-mb-plus.patch usb-fix-i2c-api-usage-in-ohci-pnx4008.patch p54usb-add-the-usb-id-for-belkin-accton-fd7050e-ver-1010ec.patch p54pci-handle-dma-mapping-errors.patch +gpiolib-actually-set-output-state-in-wm831x_gpio_direction_output.patch +hwmon-tmp421-fix-temperature-conversions.patch +hwmon-tmp421-restore-missing-inputs.patch