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
[ Upstream commit 5cdceab ]

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Christopher Alexander Tobias Schulze authored and Greg Kroah-Hartman committed Aug 14, 2014
1 parent 38f4577 commit c1853d6
Show file tree
Hide file tree
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
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
11 changes: 8 additions & 3 deletions drivers/sbus/char/bbc_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,13 +301,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);
Expand Down

0 comments on commit c1853d6

Please sign in to comment.