hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/media/i2c/tw9910.c
....@@ -584,6 +584,14 @@
584584 }
585585 #endif
586586
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
+
587595 static int tw9910_power_on(struct tw9910_priv *priv)
588596 {
589597 struct i2c_client *client = v4l2_get_subdevdata(&priv->subdev);
....@@ -595,10 +603,7 @@
595603 return ret;
596604 }
597605
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);
602607
603608 /*
604609 * FIXME: The reset signal is connected to a shared GPIO on some
....@@ -610,14 +615,14 @@
610615 GPIOD_OUT_LOW);
611616 if (IS_ERR(priv->rstb_gpio)) {
612617 dev_info(&client->dev, "Unable to get GPIO \"rstb\"");
618
+ clk_disable_unprepare(priv->clk);
619
+ tw9910_set_gpio_value(priv->pdn_gpio, 1);
613620 return PTR_ERR(priv->rstb_gpio);
614621 }
615622
616623 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);
621626
622627 gpiod_put(priv->rstb_gpio);
623628 }
....@@ -628,11 +633,7 @@
628633 static int tw9910_power_off(struct tw9910_priv *priv)
629634 {
630635 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);
636637
637638 return 0;
638639 }
....@@ -933,8 +934,7 @@
933934 {
934935 struct tw9910_priv *priv;
935936 struct tw9910_video_info *info;
936
- struct i2c_adapter *adapter =
937
- to_i2c_adapter(client->dev.parent);
937
+ struct i2c_adapter *adapter = client->adapter;
938938 int ret;
939939
940940 if (!client->dev.platform_data) {