Skip to content

Commit

Permalink
bbc-i2c: Fix BBC I2C envctrl on SunBlade 2000
Browse files Browse the repository at this point in the history
Fix regression in bbc i2c temperature and fan control on some Sun systems
that causes the driver to refuse to load due to the bbc_i2c_bussel resource not
being present on the (second) i2c bus where the temperature sensors and fan
control are located. (The check for the number of resources was removed when
the driver was ported to a pure OF driver in mid 2008.)

Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Christopher Alexander Tobias Schulze authored and David S. Miller committed Aug 4, 2014
1 parent 18f3813 commit 5cdceab
Showing 2 changed files with 14 additions and 3 deletions.
6 changes: 6 additions & 0 deletions drivers/sbus/char/bbc_envctrl.c
Original file line number Diff line number Diff line change
@@ -452,6 +452,9 @@ static void attach_one_temp(struct bbc_i2c_bus *bp, struct platform_device *op,
if (!tp)
return;

INIT_LIST_HEAD(&tp->bp_list);
INIT_LIST_HEAD(&tp->glob_list);

tp->client = bbc_i2c_attach(bp, op);
if (!tp->client) {
kfree(tp);
@@ -497,6 +500,9 @@ static void attach_one_fan(struct bbc_i2c_bus *bp, struct platform_device *op,
if (!fp)
return;

INIT_LIST_HEAD(&fp->bp_list);
INIT_LIST_HEAD(&fp->glob_list);

fp->client = bbc_i2c_attach(bp, op);
if (!fp->client) {
kfree(fp);
11 changes: 8 additions & 3 deletions drivers/sbus/char/bbc_i2c.c
Original file line number Diff line number Diff line change
@@ -300,13 +300,18 @@ static struct bbc_i2c_bus * attach_one_i2c(struct platform_device *op, int index
if (!bp)
return NULL;

INIT_LIST_HEAD(&bp->temps);
INIT_LIST_HEAD(&bp->fans);

bp->i2c_control_regs = of_ioremap(&op->resource[0], 0, 0x2, "bbc_i2c_regs");
if (!bp->i2c_control_regs)
goto fail;

bp->i2c_bussel_reg = of_ioremap(&op->resource[1], 0, 0x1, "bbc_i2c_bussel");
if (!bp->i2c_bussel_reg)
goto fail;
if (op->num_resources == 2) {
bp->i2c_bussel_reg = of_ioremap(&op->resource[1], 0, 0x1, "bbc_i2c_bussel");
if (!bp->i2c_bussel_reg)
goto fail;
}

bp->waiting = 0;
init_waitqueue_head(&bp->wq);

0 comments on commit 5cdceab

Please sign in to comment.