.. | .. |
---|
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) { |
---|