From 4ca388fb943d17c7f7e8992fba04aac38714fdb2 Mon Sep 17 00:00:00 2001 From: Bryan Wu Date: Fri, 21 Feb 2014 10:45:03 -0800 Subject: driver: vi: tegra_camera: correct pdev->id for DT DT will initialize the pdev->id as -1 for both vi.0 and vi.1. This will cause several subtle issues since checking pdev->id is used a in VI and Tegra V4L2 camera drivers. Set the pdev->id as the right value during probing for DT case. Then no change is need for others Bug 1463966 Change-Id: I8adf124c4d3489e9c06abbecb6d3587437954c50 Signed-off-by: Bryan Wu Reviewed-on: http://git-master/r/373000 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Jihoon Bang Reviewed-by: Terje Bergstrom --- .../media/platform/soc_camera/tegra_camera/vi2.c | 25 ++++++++-------------- 1 file changed, 9 insertions(+), 16 deletions(-) (limited to 'drivers/media/platform/soc_camera/tegra_camera/vi2.c') diff --git a/drivers/media/platform/soc_camera/tegra_camera/vi2.c b/drivers/media/platform/soc_camera/tegra_camera/vi2.c index f58c03bff8a5..60bdaa4dabc7 100644 --- a/drivers/media/platform/soc_camera/tegra_camera/vi2.c +++ b/drivers/media/platform/soc_camera/tegra_camera/vi2.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2013-2014, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -329,20 +329,10 @@ static struct tegra_camera_clk vi2_clks1[] = { static int vi2_clks_init(struct tegra_camera_dev *cam) { struct platform_device *pdev = cam->ndev; - char devname[MAX_DEVID_LENGTH]; - const char *pdev_name; struct tegra_camera_clk *clks; - int i, dev_id, ret; - - pdev_name = dev_name(&pdev->dev); - ret = sscanf(pdev_name, "vi.%1d", &dev_id); - if (ret != 1) { - dev_err(&pdev->dev, "Read dev_id failed!\n"); - return -ENODEV; - } - snprintf(devname, MAX_DEVID_LENGTH, "tegra_%s", pdev_name); + int i; - switch (dev_id) { + switch (pdev->id) { case 0: cam->num_clks = ARRAY_SIZE(vi2_clks0); cam->clks = vi2_clks0; @@ -352,16 +342,19 @@ static int vi2_clks_init(struct tegra_camera_dev *cam) cam->clks = vi2_clks1; break; default: - dev_err(&pdev->dev, "Wrong device ID %d\n", dev_id); + dev_err(&pdev->dev, "Wrong device ID %d\n", pdev->id); return -ENODEV; } for (i = 0; i < cam->num_clks; i++) { clks = &cam->clks[i]; - if (clks->use_devname) + if (clks->use_devname) { + char devname[MAX_DEVID_LENGTH]; + snprintf(devname, MAX_DEVID_LENGTH, + "tegra_%s", dev_name(&pdev->dev)); clks->clk = clk_get_sys(devname, clks->name); - else + } else clks->clk = clk_get(&pdev->dev, clks->name); if (IS_ERR_OR_NULL(clks->clk)) { dev_err(&pdev->dev, "Failed to get clock %s.\n", -- cgit v1.2.3