| .. | .. |
|---|
| 584 | 584 | } |
|---|
| 585 | 585 | #endif |
|---|
| 586 | 586 | |
|---|
| 587 | +static void tw9910_set_gpio_value(struct gpio_desc *desc, int value) |
|---|
| 588 | +{ |
|---|
| 589 | + if (desc) { |
|---|
| 590 | + gpiod_set_value(desc, value); |
|---|
| 591 | + usleep_range(500, 1000); |
|---|
| 592 | + } |
|---|
| 593 | +} |
|---|
| 594 | + |
|---|
| 587 | 595 | static int tw9910_power_on(struct tw9910_priv *priv) |
|---|
| 588 | 596 | { |
|---|
| 589 | 597 | struct i2c_client *client = v4l2_get_subdevdata(&priv->subdev); |
|---|
| .. | .. |
|---|
| 595 | 603 | return ret; |
|---|
| 596 | 604 | } |
|---|
| 597 | 605 | |
|---|
| 598 | | - if (priv->pdn_gpio) { |
|---|
| 599 | | - gpiod_set_value(priv->pdn_gpio, 0); |
|---|
| 600 | | - usleep_range(500, 1000); |
|---|
| 601 | | - } |
|---|
| 606 | + tw9910_set_gpio_value(priv->pdn_gpio, 0); |
|---|
| 602 | 607 | |
|---|
| 603 | 608 | /* |
|---|
| 604 | 609 | * FIXME: The reset signal is connected to a shared GPIO on some |
|---|
| .. | .. |
|---|
| 610 | 615 | GPIOD_OUT_LOW); |
|---|
| 611 | 616 | if (IS_ERR(priv->rstb_gpio)) { |
|---|
| 612 | 617 | dev_info(&client->dev, "Unable to get GPIO \"rstb\""); |
|---|
| 618 | + clk_disable_unprepare(priv->clk); |
|---|
| 619 | + tw9910_set_gpio_value(priv->pdn_gpio, 1); |
|---|
| 613 | 620 | return PTR_ERR(priv->rstb_gpio); |
|---|
| 614 | 621 | } |
|---|
| 615 | 622 | |
|---|
| 616 | 623 | if (priv->rstb_gpio) { |
|---|
| 617 | | - gpiod_set_value(priv->rstb_gpio, 1); |
|---|
| 618 | | - usleep_range(500, 1000); |
|---|
| 619 | | - gpiod_set_value(priv->rstb_gpio, 0); |
|---|
| 620 | | - usleep_range(500, 1000); |
|---|
| 624 | + tw9910_set_gpio_value(priv->rstb_gpio, 1); |
|---|
| 625 | + tw9910_set_gpio_value(priv->rstb_gpio, 0); |
|---|
| 621 | 626 | |
|---|
| 622 | 627 | gpiod_put(priv->rstb_gpio); |
|---|
| 623 | 628 | } |
|---|
| .. | .. |
|---|
| 628 | 633 | static int tw9910_power_off(struct tw9910_priv *priv) |
|---|
| 629 | 634 | { |
|---|
| 630 | 635 | clk_disable_unprepare(priv->clk); |
|---|
| 631 | | - |
|---|
| 632 | | - if (priv->pdn_gpio) { |
|---|
| 633 | | - gpiod_set_value(priv->pdn_gpio, 1); |
|---|
| 634 | | - usleep_range(500, 1000); |
|---|
| 635 | | - } |
|---|
| 636 | + tw9910_set_gpio_value(priv->pdn_gpio, 1); |
|---|
| 636 | 637 | |
|---|
| 637 | 638 | return 0; |
|---|
| 638 | 639 | } |
|---|
| .. | .. |
|---|
| 933 | 934 | { |
|---|
| 934 | 935 | struct tw9910_priv *priv; |
|---|
| 935 | 936 | struct tw9910_video_info *info; |
|---|
| 936 | | - struct i2c_adapter *adapter = |
|---|
| 937 | | - to_i2c_adapter(client->dev.parent); |
|---|
| 937 | + struct i2c_adapter *adapter = client->adapter; |
|---|
| 938 | 938 | int ret; |
|---|
| 939 | 939 | |
|---|
| 940 | 940 | if (!client->dev.platform_data) { |
|---|