@@ -478,7 +478,38 @@ static int atomisp_get_acpi_power(struct device *dev, acpi_handle handle)
478
478
return clock_num ;
479
479
}
480
480
481
- static struct i2c_client * power ;
481
+ static u8 gmin_get_pmic_id_and_addr (struct device * dev )
482
+ {
483
+ struct i2c_client * power ;
484
+ static u8 pmic_i2c_addr ;
485
+
486
+ if (pmic_id )
487
+ return pmic_i2c_addr ;
488
+
489
+ if (gmin_i2c_dev_exists (dev , PMIC_ACPI_TI , & power ))
490
+ pmic_id = PMIC_TI ;
491
+ else if (gmin_i2c_dev_exists (dev , PMIC_ACPI_AXP , & power ))
492
+ pmic_id = PMIC_AXP ;
493
+ else if (gmin_i2c_dev_exists (dev , PMIC_ACPI_CRYSTALCOVE , & power ))
494
+ pmic_id = PMIC_CRYSTALCOVE ;
495
+ else
496
+ pmic_id = PMIC_REGULATOR ;
497
+
498
+ pmic_i2c_addr = power ? power -> addr : 0 ;
499
+ return pmic_i2c_addr ;
500
+ }
501
+
502
+ static int gmin_detect_pmic (struct v4l2_subdev * subdev )
503
+ {
504
+ struct i2c_client * client = v4l2_get_subdevdata (subdev );
505
+ struct device * dev = & client -> dev ;
506
+ u8 pmic_i2c_addr ;
507
+
508
+ pmic_i2c_addr = gmin_get_pmic_id_and_addr (dev );
509
+ dev_info (dev , "gmin: power management provided via %s (i2c addr 0x%02x)\n" ,
510
+ pmic_name [pmic_id ], pmic_i2c_addr );
511
+ return pmic_i2c_addr ;
512
+ }
482
513
483
514
static struct gmin_subdev * gmin_subdev_add (struct v4l2_subdev * subdev )
484
515
{
@@ -580,27 +611,6 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
580
611
* in order to set clocks and do power management.
581
612
*/
582
613
583
- if (!pmic_id ) {
584
- if (gmin_i2c_dev_exists (dev , PMIC_ACPI_TI , & power ))
585
- pmic_id = PMIC_TI ;
586
- else if (gmin_i2c_dev_exists (dev , PMIC_ACPI_AXP , & power ))
587
- pmic_id = PMIC_AXP ;
588
- else if (gmin_i2c_dev_exists (dev , PMIC_ACPI_CRYSTALCOVE , & power ))
589
- pmic_id = PMIC_CRYSTALCOVE ;
590
- else
591
- pmic_id = PMIC_REGULATOR ;
592
- }
593
-
594
- if (power ) {
595
- gs -> pwm_i2c_addr = power -> addr ;
596
- dev_info (dev ,
597
- "gmin: power management provided via %s (i2c addr 0x%02x)\n" ,
598
- pmic_name [pmic_id ], power -> addr );
599
- } else {
600
- dev_info (dev , "gmin: power management provided via %s\n" ,
601
- pmic_name [pmic_id ]);
602
- }
603
-
604
614
/*
605
615
* According with :
606
616
* https://github.com/projectceladon/hardware-intel-kernelflinger/blob/master/doc/fastboot.md
@@ -1053,10 +1063,13 @@ struct camera_sensor_platform_data *gmin_camera_platform_data(
1053
1063
enum atomisp_input_format csi_format ,
1054
1064
enum atomisp_bayer_order csi_bayer )
1055
1065
{
1056
- struct gmin_subdev * gs = gmin_subdev_add (subdev );
1066
+ struct gmin_subdev * gs ;
1067
+ u8 pmic_i2c_addr = gmin_detect_pmic (subdev );
1057
1068
1069
+ gs = gmin_subdev_add (subdev );
1058
1070
gs -> csi_fmt = csi_format ;
1059
1071
gs -> csi_bayer = csi_bayer ;
1072
+ gs -> pwm_i2c_addr = pmic_i2c_addr ;
1060
1073
1061
1074
if (gs -> pmc_clk )
1062
1075
return & pmic_gmin_plat ;
0 commit comments