Skip to content

Commit

Permalink
hwmon: (dme1737) group functions logically
Browse files Browse the repository at this point in the history
Move functions to group them logically. Device and I2C functions go in separate
places. No functional changes (really!).

Signed-off-by: Juerg Haefliger <juergh at gmail.com>
Acked-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Mark M. Hoffman <mhoffman@lightlink.com>
  • Loading branch information
Juerg Haefliger authored and Mark M. Hoffman committed Oct 11, 2007
1 parent b237eb2 commit 67e2f32
Showing 1 changed file with 58 additions and 48 deletions.
106 changes: 58 additions & 48 deletions drivers/hwmon/dme1737.c
Original file line number Diff line number Diff line change
Expand Up @@ -1697,58 +1697,11 @@ static inline void dme1737_sio_outb(int sio_cip, int reg, int val)
outb(val, sio_cip + 1);
}

static int dme1737_i2c_get_features(int sio_cip, struct dme1737_data *data)
{
int err = 0, reg;
u16 addr;

dme1737_sio_enter(sio_cip);

/* Check device ID
* The DME1737 can return either 0x78 or 0x77 as its device ID. */
reg = dme1737_sio_inb(sio_cip, 0x20);
if (!(reg == 0x77 || reg == 0x78)) {
err = -ENODEV;
goto exit;
}

/* Select logical device A (runtime registers) */
dme1737_sio_outb(sio_cip, 0x07, 0x0a);

/* Get the base address of the runtime registers */
if (!(addr = (dme1737_sio_inb(sio_cip, 0x60) << 8) |
dme1737_sio_inb(sio_cip, 0x61))) {
err = -ENODEV;
goto exit;
}

/* Read the runtime registers to determine which optional features
* are enabled and available. Bits [3:2] of registers 0x43-0x46 are set
* to '10' if the respective feature is enabled. */
if ((inb(addr + 0x43) & 0x0c) == 0x08) { /* fan6 */
data->has_fan |= (1 << 5);
}
if ((inb(addr + 0x44) & 0x0c) == 0x08) { /* pwm6 */
data->has_pwm |= (1 << 5);
}
if ((inb(addr + 0x45) & 0x0c) == 0x08) { /* fan5 */
data->has_fan |= (1 << 4);
}
if ((inb(addr + 0x46) & 0x0c) == 0x08) { /* pwm5 */
data->has_pwm |= (1 << 4);
}

exit:
dme1737_sio_exit(sio_cip);

return err;
}

/* ---------------------------------------------------------------------
* Device detection, registration and initialization
* --------------------------------------------------------------------- */

static struct i2c_driver dme1737_i2c_driver;
static int dme1737_i2c_get_features(int, struct dme1737_data*);

static void dme1737_chmod_file(struct device *dev,
struct attribute *attr, mode_t mode)
Expand Down Expand Up @@ -1967,6 +1920,59 @@ static int dme1737_init_device(struct device *dev)
return 0;
}

/* ---------------------------------------------------------------------
* I2C device detection and registration
* --------------------------------------------------------------------- */

static struct i2c_driver dme1737_i2c_driver;

static int dme1737_i2c_get_features(int sio_cip, struct dme1737_data *data)
{
int err = 0, reg;
u16 addr;

dme1737_sio_enter(sio_cip);

/* Check device ID
* The DME1737 can return either 0x78 or 0x77 as its device ID. */
reg = dme1737_sio_inb(sio_cip, 0x20);
if (!(reg == 0x77 || reg == 0x78)) {
err = -ENODEV;
goto exit;
}

/* Select logical device A (runtime registers) */
dme1737_sio_outb(sio_cip, 0x07, 0x0a);

/* Get the base address of the runtime registers */
if (!(addr = (dme1737_sio_inb(sio_cip, 0x60) << 8) |
dme1737_sio_inb(sio_cip, 0x61))) {
err = -ENODEV;
goto exit;
}

/* Read the runtime registers to determine which optional features
* are enabled and available. Bits [3:2] of registers 0x43-0x46 are set
* to '10' if the respective feature is enabled. */
if ((inb(addr + 0x43) & 0x0c) == 0x08) { /* fan6 */
data->has_fan |= (1 << 5);
}
if ((inb(addr + 0x44) & 0x0c) == 0x08) { /* pwm6 */
data->has_pwm |= (1 << 5);
}
if ((inb(addr + 0x45) & 0x0c) == 0x08) { /* fan5 */
data->has_fan |= (1 << 4);
}
if ((inb(addr + 0x46) & 0x0c) == 0x08) { /* pwm5 */
data->has_pwm |= (1 << 4);
}

exit:
dme1737_sio_exit(sio_cip);

return err;
}

static int dme1737_i2c_detect(struct i2c_adapter *adapter, int address,
int kind)
{
Expand Down Expand Up @@ -2087,6 +2093,10 @@ static struct i2c_driver dme1737_i2c_driver = {
.detach_client = dme1737_i2c_detach_client,
};

/* ---------------------------------------------------------------------
* Module initialization and cleanup
* --------------------------------------------------------------------- */

static int __init dme1737_init(void)
{
return i2c_add_driver(&dme1737_i2c_driver);
Expand Down

0 comments on commit 67e2f32

Please sign in to comment.