Skip to content

Commit 5cb30ae

Browse files
andy-shevmchehab
authored andcommitted
media: atomisp: Provide Gmin subdev as parameter to gmin_subdev_add()
Provide Gmin subdev as parameter to gmin_subdev_add() to avoid direct global variable usage. Signed-off-by: Andy Shevchenko <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent fecd883 commit 5cb30ae

File tree

1 file changed

+24
-27
lines changed

1 file changed

+24
-27
lines changed

drivers/staging/media/atomisp/pci/atomisp_gmin_platform.c

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -511,32 +511,23 @@ static int gmin_detect_pmic(struct v4l2_subdev *subdev)
511511
return pmic_i2c_addr;
512512
}
513513

514-
static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
514+
static int gmin_subdev_add(struct gmin_subdev *gs)
515515
{
516-
struct i2c_client *client = v4l2_get_subdevdata(subdev);
516+
struct i2c_client *client = v4l2_get_subdevdata(gs->subdev);
517517
struct device *dev = &client->dev;
518518
struct acpi_device *adev;
519-
struct gmin_subdev *gs;
520519
acpi_handle handle;
521-
int i, ret, clock_num = -1;
520+
int ret, clock_num = -1;
522521

523522
handle = ACPI_HANDLE(dev);
524523
adev = ACPI_COMPANION(dev);
525524

526525
dev_info(&client->dev, "%s: ACPI detected it on bus ID=%s, HID=%s\n",
527526
__func__, acpi_device_bid(adev), acpi_device_hid(adev));
528527

529-
for (i = 0; i < MAX_SUBDEVS && gmin_subdevs[i].subdev; i++)
530-
;
531-
if (i >= MAX_SUBDEVS)
532-
return NULL;
533-
534-
gs = &gmin_subdevs[i];
535-
gs->subdev = subdev;
536-
537528
/*WA:CHT requires XTAL clock as PLL is not stable.*/
538-
gmin_subdevs[i].clock_src = gmin_get_var_int(dev, false, "ClkSrc",
539-
VLV2_CLK_PLL_19P2MHZ);
529+
gs->clock_src = gmin_get_var_int(dev, false, "ClkSrc",
530+
VLV2_CLK_PLL_19P2MHZ);
540531

541532
gs->csi_port = gmin_get_var_int(dev, false, "CsiPort", 0);
542533
gs->csi_lanes = gmin_get_var_int(dev, false, "CsiLanes", 1);
@@ -596,8 +587,7 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
596587
acpi_device_can_poweroff(adev)) {
597588
dev_info(dev,
598589
"gmin: power management provided via device PM\n");
599-
600-
return gs;
590+
return 0;
601591
}
602592

603593
/*
@@ -630,7 +620,7 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
630620

631621
if (clock_num < 0 || clock_num > MAX_CLK_COUNT) {
632622
dev_err(dev, "Invalid clock number\n");
633-
return NULL;
623+
return -EINVAL;
634624
}
635625

636626
snprintf(gmin_pmc_clk_name, sizeof(gmin_pmc_clk_name),
@@ -639,13 +629,8 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
639629
gs->pmc_clk = devm_clk_get(dev, gmin_pmc_clk_name);
640630
if (IS_ERR(gs->pmc_clk)) {
641631
ret = PTR_ERR(gs->pmc_clk);
642-
643-
dev_err(dev,
644-
"Failed to get clk from %s : %d\n",
645-
gmin_pmc_clk_name,
646-
ret);
647-
648-
return NULL;
632+
dev_err(dev, "Failed to get clk from %s: %d\n", gmin_pmc_clk_name, ret);
633+
return ret;
649634
}
650635
dev_info(dev, "Will use CLK%d (%s)\n", clock_num, gmin_pmc_clk_name);
651636

@@ -705,7 +690,7 @@ static struct gmin_subdev *gmin_subdev_add(struct v4l2_subdev *subdev)
705690
break;
706691
}
707692

708-
return gs;
693+
return 0;
709694
}
710695

711696
static struct gmin_subdev *find_gmin_subdev(struct v4l2_subdev *subdev)
@@ -718,6 +703,16 @@ static struct gmin_subdev *find_gmin_subdev(struct v4l2_subdev *subdev)
718703
return NULL;
719704
}
720705

706+
static struct gmin_subdev *find_free_gmin_subdev_slot(void)
707+
{
708+
unsigned int i;
709+
710+
for (i = 0; i < MAX_SUBDEVS; i++)
711+
if (gmin_subdevs[i].subdev == NULL)
712+
return &gmin_subdevs[i];
713+
return NULL;
714+
}
715+
721716
static int axp_regulator_set(struct device *dev, struct gmin_subdev *gs,
722717
int sel_reg, u8 setting,
723718
int ctrl_reg, int shift, bool on)
@@ -1050,14 +1045,16 @@ struct camera_sensor_platform_data *gmin_camera_platform_data(
10501045
enum atomisp_input_format csi_format,
10511046
enum atomisp_bayer_order csi_bayer)
10521047
{
1053-
struct gmin_subdev *gs;
10541048
u8 pmic_i2c_addr = gmin_detect_pmic(subdev);
1049+
struct gmin_subdev *gs;
10551050

1056-
gs = gmin_subdev_add(subdev);
1051+
gs = find_free_gmin_subdev_slot();
1052+
gs->subdev = subdev;
10571053
gs->csi_fmt = csi_format;
10581054
gs->csi_bayer = csi_bayer;
10591055
gs->pwm_i2c_addr = pmic_i2c_addr;
10601056

1057+
gmin_subdev_add(gs);
10611058
if (gs->pmc_clk)
10621059
return &pmic_gmin_plat;
10631060
else

0 commit comments

Comments
 (0)