[kernel] r9571 - in dists/trunk/linux-2.6/debian: . patches/features patches/features/arm patches/series
Martin Michlmayr
tbm at alioth.debian.org
Thu Sep 27 11:40:25 UTC 2007
Author: tbm
Date: Thu Sep 27 11:40:25 2007
New Revision: 9571
Log:
[arm] Set the fan on Thecus N2100 to full speed on boot (Riku Voipio).
Added:
dists/trunk/linux-2.6/debian/patches/features/arm/n2100-set-fan.patch
dists/trunk/linux-2.6/debian/patches/features/f75375-new-style-bindings.patch
dists/trunk/linux-2.6/debian/patches/features/f75375-set-fans-platform-data.patch
Modified:
dists/trunk/linux-2.6/debian/changelog
dists/trunk/linux-2.6/debian/patches/series/1~experimental.1
Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog (original)
+++ dists/trunk/linux-2.6/debian/changelog Thu Sep 27 11:40:25 2007
@@ -29,6 +29,7 @@
* [mips] Add a bcm1480 PCI build fix.
* [mips] Add a bcm1480 serial build fix.
* Update Riku Voipio's Fintek F75375/SP driver to the latest version.
+ * [arm] Set the fan on Thecus N2100 to full speed on boot (Riku Voipio).
[ Bastian Blank ]
* Add unpriviledged only Xen support.
Added: dists/trunk/linux-2.6/debian/patches/features/arm/n2100-set-fan.patch
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/features/arm/n2100-set-fan.patch Thu Sep 27 11:40:25 2007
@@ -0,0 +1,50 @@
+Upstream status: Riku will submit it for 2.6.24
+
+From d011b8868255310f214d848fa1543265753858bd Mon Sep 17 00:00:00 2001
+From: riku.voipio at iki.fi <riku.voipio at movial.fi>
+Date: Tue, 25 Sep 2007 16:33:24 +0300
+Subject: [PATCH] On n2100 systems, set fans to full speed on default
+
+
+Signed-off-by: Riku Voipio <Riku Voipio riku.voipio at movial.fi>
+---
+ arch/arm/mach-iop32x/n2100.c | 11 +++++++++++
+ 1 files changed, 11 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c
+index 1873bd8..5a4acff 100644
+--- a/arch/arm/mach-iop32x/n2100.c
++++ b/arch/arm/mach-iop32x/n2100.c
+@@ -16,6 +16,7 @@
+
+ #include <linux/mm.h>
+ #include <linux/init.h>
++#include <linux/f75375s.h>
+ #include <linux/delay.h>
+ #include <linux/kernel.h>
+ #include <linux/pci.h>
+@@ -200,11 +201,21 @@ static struct platform_device n2100_serial_device = {
+ .resource = &n2100_uart_resource,
+ };
+
++static struct f75375s_platform_data n2100_f75375s = {
++ .pwm = { 255, 255},
++ .pwm_enable = { 0, 0 },
++};
++
+ static struct i2c_board_info __initdata n2100_i2c_devices[] = {
+ {
+ I2C_BOARD_INFO("rtc-rs5c372", 0x32),
+ .type = "rs5c372b",
+ },
++ {
++ I2C_BOARD_INFO("f75375", 0x2e),
++ .type = "f75375",
++ .platform_data = &n2100_f75375s,
++ },
+ };
+
+ /*
+--
+1.5.3.1
+
Added: dists/trunk/linux-2.6/debian/patches/features/f75375-new-style-bindings.patch
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/features/f75375-new-style-bindings.patch Thu Sep 27 11:40:25 2007
@@ -0,0 +1,217 @@
+Upstream status: Riku will submit it for 2.6.24
+
+From 53eba46aca590170b64a4a85c0eebd3222ca83ee Mon Sep 17 00:00:00 2001
+From: Riku Voipio <riku.voipio at movial.fi>
+Date: Tue, 25 Sep 2007 15:05:36 +0300
+Subject: [PATCH] Add new style bindings
+
+
+Signed-off-by: Riku Voipio <riku.voipio at movial.fi>
+---
+ drivers/hwmon/f75375s.c | 112 +++++++++++++++++++++++++++++++++++-----------
+ 1 files changed, 85 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c
+index 6425184..9336f5e 100644
+--- a/drivers/hwmon/f75375s.c
++++ b/drivers/hwmon/f75375s.c
+@@ -86,7 +86,7 @@ I2C_CLIENT_INSMOD_2(f75373, f75375);
+
+ struct f75375_data {
+ unsigned short addr;
+- struct i2c_client client;
++ struct i2c_client *client;
+ struct class_device *class_dev;
+
+ const char *name;
+@@ -116,15 +116,26 @@ struct f75375_data {
+ static int f75375_attach_adapter(struct i2c_adapter *adapter);
+ static int f75375_detect(struct i2c_adapter *adapter, int address, int kind);
+ static int f75375_detach_client(struct i2c_client *client);
++static int f75375_probe(struct i2c_client *client);
++static int f75375_remove(struct i2c_client *client);
+
+-static struct i2c_driver f75375_driver = {
++static struct i2c_driver f75375_legacy_driver = {
+ .driver = {
+- .name = "f75375",
++ .name = "f75375_legacy",
+ },
+ .attach_adapter = f75375_attach_adapter,
+ .detach_client = f75375_detach_client,
+ };
+
++static struct i2c_driver f75375_driver = {
++ .driver = {
++ .name = "f75375",
++ },
++ .probe = f75375_probe,
++ .remove = f75375_remove,
++};
++
++
+ static inline int f75375_read8(struct i2c_client *client, u8 reg)
+ {
+ return i2c_smbus_read_byte_data(client, reg);
+@@ -580,12 +591,8 @@ static const struct attribute_group f75375_group = {
+
+ static int f75375_detach_client(struct i2c_client *client)
+ {
+- struct f75375_data *data = i2c_get_clientdata(client);
+ int err;
+-
+- hwmon_device_unregister(data->class_dev);
+- sysfs_remove_group(&client->dev.kobj, &f75375_group);
+-
++ f75375_remove(client);
+ err = i2c_detach_client(client);
+ if (err) {
+ dev_err(&client->dev,
+@@ -593,10 +600,64 @@ static int f75375_detach_client(struct i2c_client *client)
+ "client not detached.\n");
+ return err;
+ }
++ kfree(client);
++ return 0;
++}
++
++static int f75375_probe(struct i2c_client *client)
++{
++ struct f75375_data *data = i2c_get_clientdata(client);
++ int err;
++
++ if (!i2c_check_functionality(client->adapter,
++ I2C_FUNC_SMBUS_BYTE_DATA))
++ return -EIO;
++ if (!(data = kzalloc(sizeof(struct f75375_data), GFP_KERNEL)))
++ return -ENOMEM;
++
++ i2c_set_clientdata(client, data);
++ data->client = client;
++ mutex_init(&data->update_lock);
++
++ if (strcmp(client->name, "f75375") == 0)
++ data->kind = f75375;
++ else if (strcmp(client->name, "f75373") == 0)
++ data->kind = f75373;
++ else {
++ dev_err(&client->dev, "Unsupported device: %s\n", client->name);
++ return -ENODEV;
++ }
++
++ if ((err = sysfs_create_group(&client->dev.kobj, &f75375_group)))
++ goto exit_free;
++
++ data->class_dev = hwmon_device_register(&client->dev);
++ if (IS_ERR(data->class_dev)) {
++ err = PTR_ERR(data->class_dev);
++ goto exit_remove;
++ }
++
++ return 0;
++
++exit_remove:
++ sysfs_remove_group(&client->dev.kobj, &f75375_group);
++exit_free:
+ kfree(data);
++ i2c_set_clientdata(client, NULL);
++ return err;
++}
++
++static int f75375_remove(struct i2c_client *client)
++{
++ struct f75375_data *data = i2c_get_clientdata(client);
++ hwmon_device_unregister(data->class_dev);
++ sysfs_remove_group(&client->dev.kobj, &f75375_group);
++ kfree(data);
++ i2c_set_clientdata(client, NULL);
+ return 0;
+ }
+
++
+ static int f75375_attach_adapter(struct i2c_adapter *adapter)
+ {
+ if (!(adapter->class & I2C_CLASS_HWMON))
+@@ -608,20 +669,17 @@ static int f75375_attach_adapter(struct i2c_adapter *adapter)
+ static int f75375_detect(struct i2c_adapter *adapter, int address, int kind)
+ {
+ struct i2c_client *client;
+- struct f75375_data *data;
+ u8 version = 0;
+ int err = 0;
+ const char *name = "";
+
+- if (!(data = kzalloc(sizeof(struct f75375_data), GFP_KERNEL))) {
++ if (!(client = kzalloc(sizeof(*client), GFP_KERNEL))) {
+ err = -ENOMEM;
+ goto exit;
+ }
+- client = &data->client;
+- i2c_set_clientdata(client, data);
+ client->addr = address;
+ client->adapter = adapter;
+- client->driver = &f75375_driver;
++ client->driver = &f75375_legacy_driver;
+
+ if (kind < 0) {
+ u16 vendid = f75375_read16(client, F75375_REG_VENDOR);
+@@ -644,42 +702,42 @@ static int f75375_detect(struct i2c_adapter *adapter, int address, int kind)
+ } else if (kind == f75373) {
+ name = "f75373";
+ }
+-
+ dev_info(&adapter->dev, "found %s version: %02X\n", name, version);
+ strlcpy(client->name, name, I2C_NAME_SIZE);
+- data->kind = kind;
+- mutex_init(&data->update_lock);
++
+ if ((err = i2c_attach_client(client)))
+ goto exit_free;
+
+- if ((err = sysfs_create_group(&client->dev.kobj, &f75375_group)))
++ if ((err = f75375_probe(client)) < 0)
+ goto exit_detach;
+
+- data->class_dev = hwmon_device_register(&client->dev);
+- if (IS_ERR(data->class_dev)) {
+- err = PTR_ERR(data->class_dev);
+- goto exit_remove;
+- }
+-
+ return 0;
+
+-exit_remove:
+- sysfs_remove_group(&client->dev.kobj, &f75375_group);
+ exit_detach:
+ i2c_detach_client(client);
+ exit_free:
+- kfree(data);
++ kfree(client);
+ exit:
+ return err;
+ }
+
+ static int __init sensors_f75375_init(void)
+ {
+- return i2c_add_driver(&f75375_driver);
++ int status;
++ status = i2c_add_driver(&f75375_driver);
++ if (status < 0)
++ return status;
++
++ status = i2c_add_driver(&f75375_legacy_driver);
++ if (status < 0)
++ i2c_del_driver(&f75375_driver);
++
++ return status;
+ }
+
+ static void __exit sensors_f75375_exit(void)
+ {
++ i2c_del_driver(&f75375_legacy_driver);
+ i2c_del_driver(&f75375_driver);
+ }
+
+--
+1.5.3.1
+
Added: dists/trunk/linux-2.6/debian/patches/features/f75375-set-fans-platform-data.patch
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/features/f75375-set-fans-platform-data.patch Thu Sep 27 11:40:25 2007
@@ -0,0 +1,137 @@
+Upstream status: Riku will submit it for 2.6.24
+
+From 588962ab89405c2cb480895253b3509ba15505ce Mon Sep 17 00:00:00 2001
+From: Riku Voipio <riku.voipio at movial.fi>
+Date: Tue, 25 Sep 2007 16:32:18 +0300
+Subject: [PATCH] Add support for setting up fans with platform_data
+
+
+Signed-off-by: Riku Voipio <riku.voipio at movial.fi>
+---
+ drivers/hwmon/f75375s.c | 42 +++++++++++++++++++++++++++++++++++-------
+ include/linux/f75375s.h | 21 +++++++++++++++++++++
+ 2 files changed, 56 insertions(+), 7 deletions(-)
+ create mode 100644 include/linux/f75375s.h
+
+diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c
+index 9336f5e..3074f74 100644
+--- a/drivers/hwmon/f75375s.c
++++ b/drivers/hwmon/f75375s.c
+@@ -34,6 +34,7 @@
+ #include <linux/i2c.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/f75375s.h>
+
+ /* Addresses to scan */
+ static unsigned short normal_i2c[] = { 0x2d, 0x2e, I2C_CLIENT_END };
+@@ -287,19 +288,14 @@ static ssize_t show_pwm_enable(struct device *dev, struct device_attribute
+ return sprintf(buf, "%d\n", data->pwm_enable[nr]);
+ }
+
+-static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr,
+- const char *buf, size_t count)
++static int set_pwm_enable_direct(struct i2c_client *client, int nr, int val)
+ {
+- int nr = to_sensor_dev_attr(attr)->index;
+- struct i2c_client *client = to_i2c_client(dev);
+ struct f75375_data *data = i2c_get_clientdata(client);
+- int val = simple_strtoul(buf, NULL, 10);
+ u8 fanmode;
+
+ if (val < 0 || val > 4)
+ return -EINVAL;
+
+- mutex_lock(&data->update_lock);
+ fanmode = f75375_read8(client, F75375_REG_FAN_TIMER);
+ fanmode = ~(3 << FAN_CTRL_MODE(nr));
+
+@@ -321,8 +317,22 @@ static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr,
+ }
+ f75375_write8(client, F75375_REG_FAN_TIMER, fanmode);
+ data->pwm_enable[nr] = val;
++ return 0;
++}
++
++static ssize_t set_pwm_enable(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ int nr = to_sensor_dev_attr(attr)->index;
++ struct i2c_client *client = to_i2c_client(dev);
++ struct f75375_data *data = i2c_get_clientdata(client);
++ int val = simple_strtoul(buf, NULL, 10);
++ int err = 0;
++
++ mutex_lock(&data->update_lock);
++ err = set_pwm_enable_direct(client, nr, val);
+ mutex_unlock(&data->update_lock);
+- return count;
++ return err ? err : count;
+ }
+
+ static ssize_t set_pwm_mode(struct device *dev, struct device_attribute *attr,
+@@ -604,9 +614,24 @@ static int f75375_detach_client(struct i2c_client *client)
+ return 0;
+ }
+
++static void f75375_init(struct i2c_client *client, struct f75375_data *data,
++ struct f75375s_platform_data *f75375s_pdata)
++{
++ int nr;
++ set_pwm_enable_direct(client, 0, f75375s_pdata->pwm_enable[0]);
++ set_pwm_enable_direct(client, 1, f75375s_pdata->pwm_enable[1]);
++ for (nr = 0; nr < 2; nr++) {
++ data->pwm[nr] = SENSORS_LIMIT(f75375s_pdata->pwm[nr], 0, 255);
++ f75375_write8(client, F75375_REG_FAN_PWM_DUTY(nr),
++ data->pwm[nr]);
++ }
++
++}
++
+ static int f75375_probe(struct i2c_client *client)
+ {
+ struct f75375_data *data = i2c_get_clientdata(client);
++ struct f75375s_platform_data *f75375s_pdata = client->dev.platform_data;
+ int err;
+
+ if (!i2c_check_functionality(client->adapter,
+@@ -637,6 +662,9 @@ static int f75375_probe(struct i2c_client *client)
+ goto exit_remove;
+ }
+
++ if (f75375s_pdata != NULL)
++ f75375_init(client, data, f75375s_pdata);
++
+ return 0;
+
+ exit_remove:
+diff --git a/include/linux/f75375s.h b/include/linux/f75375s.h
+new file mode 100644
+index 0000000..e99e225
+--- /dev/null
++++ b/include/linux/f75375s.h
+@@ -0,0 +1,21 @@
++/*
++ * f75375s.h - platform data structure for f75375s sensor
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ * Copyright (C) 2007, Riku Voipio <riku.voipio at iki.fi>
++ */
++
++#ifndef __LINUX_F75375S_H
++#define __LINUX_F75375S_H
++
++/* We want to set fans spinning on systems where there is no
++ * BIOS to do that for us */
++struct f75375s_platform_data {
++ u8 pwm[2];
++ u8 pwm_enable[2];
++};
++
++#endif /* __LINUX_F75375S_H */
+--
+1.5.3.1
+
Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1 (original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1 Thu Sep 27 11:40:25 2007
@@ -32,6 +32,9 @@
#+ bugfix/powerpc/drivers_macintosh-broken.patch
+ bugfix/ia64/hardcode-arch-script-output.patch
+ features/fintek-f75375.patch
++ features/f75375-new-style-bindings.patch
++ features/f75375-set-fans-platform-data.patch
++ features/arm/n2100-set-fan.patch
#+ features/alpha/isa-mapping-support.patch
+ bugfix/powerpc/libgcc-__ucmpdi2.patch
+ bugfix/arm/disable-dvb_b2c2_flexcop.patch
More information about the Kernel-svn-changes
mailing list