Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 73640
b: refs/heads/master
c: ff312d0
h: refs/heads/master
v: v3
  • Loading branch information
Riku Voipio authored and Mark M. Hoffman committed Nov 8, 2007
1 parent 6b58dfb commit 2c9cd4c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 620c142db20477149bf04c7e8e8fde70d608e8c7
refs/heads/master: ff312d07c2e1b1482fcc139b8af67ca39e9e98f0
42 changes: 35 additions & 7 deletions trunk/drivers/hwmon/f75375s.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
Expand Down Expand Up @@ -286,19 +287,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));

Expand All @@ -320,8 +316,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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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:
Expand Down
21 changes: 21 additions & 0 deletions trunk/include/linux/f75375s.h
Original file line number Diff line number Diff line change
@@ -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@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 */

0 comments on commit 2c9cd4c

Please sign in to comment.