Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 292205
b: refs/heads/master
c: 36564ef
h: refs/heads/master
i:
  292203: 0e1d14c
v: v3
  • Loading branch information
Guenter Roeck authored and Guenter Roeck committed Mar 19, 2012
1 parent cce4bf6 commit ad6f336
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 28 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: b6707b78ff3172f03ee197b7e638cf6bc81d4407
refs/heads/master: 36564efaddb7c1ace20f531860985a9848714c79
72 changes: 45 additions & 27 deletions trunk/drivers/hwmon/pc87427.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,11 @@ static struct platform_device *pdev;

#define DRVNAME "pc87427"

/* The lock mutex protects both the I/O accesses (needed because the
device is using banked registers) and the register cache (needed to keep
the data in the registers and the cache in sync at any time). */
/*
* The lock mutex protects both the I/O accesses (needed because the
* device is using banked registers) and the register cache (needed to keep
* the data in the registers and the cache in sync at any time).
*/
struct pc87427_data {
struct device *hwmon_dev;
struct mutex lock;
Expand Down Expand Up @@ -173,10 +175,12 @@ static inline void pc87427_write8_bank(struct pc87427_data *data, u8 ldi,
#define FAN_STATUS_LOSPD (1 << 1)
#define FAN_STATUS_MONEN (1 << 0)

/* Dedicated function to read all registers related to a given fan input.
This saves us quite a few locks and bank selections.
Must be called with data->lock held.
nr is from 0 to 7 */
/*
* Dedicated function to read all registers related to a given fan input.
* This saves us quite a few locks and bank selections.
* Must be called with data->lock held.
* nr is from 0 to 7
*/
static void pc87427_readall_fan(struct pc87427_data *data, u8 nr)
{
int iobase = data->address[LD_FAN];
Expand All @@ -189,8 +193,10 @@ static void pc87427_readall_fan(struct pc87427_data *data, u8 nr)
outb(data->fan_status[nr], iobase + PC87427_REG_FAN_STATUS);
}

/* The 2 LSB of fan speed registers are used for something different.
The actual 2 LSB of the measurements are not available. */
/*
* The 2 LSB of fan speed registers are used for something different.
* The actual 2 LSB of the measurements are not available.
*/
static inline unsigned long fan_from_reg(u16 reg)
{
reg &= 0xfffc;
Expand Down Expand Up @@ -224,10 +230,12 @@ static inline u16 fan_to_reg(unsigned long val)
#define PWM_MODE_OFF (2 << 4)
#define PWM_MODE_ON (7 << 4)

/* Dedicated function to read all registers related to a given PWM output.
This saves us quite a few locks and bank selections.
Must be called with data->lock held.
nr is from 0 to 3 */
/*
* Dedicated function to read all registers related to a given PWM output.
* This saves us quite a few locks and bank selections.
* Must be called with data->lock held.
* nr is from 0 to 3
*/
static void pc87427_readall_pwm(struct pc87427_data *data, u8 nr)
{
int iobase = data->address[LD_FAN];
Expand Down Expand Up @@ -286,10 +294,12 @@ static inline u8 pwm_enable_to_reg(unsigned long val, u8 pwmval)
#define TEMP_TYPE_REMOTE_DIODE (2 << 5)
#define TEMP_TYPE_LOCAL_DIODE (3 << 5)

/* Dedicated function to read all registers related to a given temperature
input. This saves us quite a few locks and bank selections.
Must be called with data->lock held.
nr is from 0 to 5 */
/*
* Dedicated function to read all registers related to a given temperature
* input. This saves us quite a few locks and bank selections.
* Must be called with data->lock held.
* nr is from 0 to 5
*/
static void pc87427_readall_temp(struct pc87427_data *data, u8 nr)
{
int iobase = data->address[LD_TEMP];
Expand Down Expand Up @@ -318,8 +328,10 @@ static inline unsigned int temp_type_from_reg(u8 reg)
}
}

/* We assume 8-bit thermal sensors; 9-bit thermal sensors are possible
too, but I have no idea how to figure out when they are used. */
/*
* We assume 8-bit thermal sensors; 9-bit thermal sensors are possible
* too, but I have no idea how to figure out when they are used.
*/
static inline long temp_from_reg(s16 reg)
{
return reg * 1000 / 256;
Expand Down Expand Up @@ -423,9 +435,11 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute

mutex_lock(&data->lock);
outb(BANK_FM(nr), iobase + PC87427_REG_BANK);
/* The low speed limit registers are read-only while monitoring
is enabled, so we have to disable monitoring, then change the
limit, and finally enable monitoring again. */
/*
* The low speed limit registers are read-only while monitoring
* is enabled, so we have to disable monitoring, then change the
* limit, and finally enable monitoring again.
*/
outb(0, iobase + PC87427_REG_FAN_STATUS);
data->fan_min[nr] = fan_to_reg(val);
outw(data->fan_min[nr], iobase + PC87427_REG_FAN_MIN);
Expand Down Expand Up @@ -542,8 +556,10 @@ static const struct attribute_group pc87427_group_fan[8] = {
{ .attrs = pc87427_attributes_fan[7] },
};

/* Must be called with data->lock held and pc87427_readall_pwm() freshly
called */
/*
* Must be called with data->lock held and pc87427_readall_pwm() freshly
* called
*/
static void update_pwm_enable(struct pc87427_data *data, int nr, u8 mode)
{
int iobase = data->address[LD_FAN];
Expand Down Expand Up @@ -1023,9 +1039,11 @@ static void __devinit pc87427_init_device(struct device *dev)
if (reg & PWM_ENABLE_CTLEN)
data->pwm_enabled |= (1 << i);

/* We don't expose an interface to reconfigure the automatic
fan control mode, so only allow to return to this mode if
it was originally set. */
/*
* We don't expose an interface to reconfigure the automatic
* fan control mode, so only allow to return to this mode if
* it was originally set.
*/
if ((reg & PWM_ENABLE_MODE_MASK) == PWM_MODE_AUTO) {
dev_dbg(dev, "PWM%d is in automatic control mode\n",
i + 1);
Expand Down

0 comments on commit ad6f336

Please sign in to comment.