X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=recipes-kernel%2Fmost%2Ffiles%2F0008-dim2-read-clock-speed-from-the-device-tree.patch;fp=recipes-kernel%2Fmost%2Ffiles%2F0008-dim2-read-clock-speed-from-the-device-tree.patch;h=1b01fb15669b825b727e0179f6d231a78242e505;hb=41591d4f8c586aa801220fac0924556f406c58bd;hp=0000000000000000000000000000000000000000;hpb=4830bcef14e7f49cdc851c646a69c9bb9bd92e82;p=AGL%2Fmeta-agl-demo.git diff --git a/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch b/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch new file mode 100644 index 000000000..1b01fb156 --- /dev/null +++ b/recipes-kernel/most/files/0008-dim2-read-clock-speed-from-the-device-tree.patch @@ -0,0 +1,92 @@ +From 839ad403a2d8081a6c15f6fc2836b01919338f3c Mon Sep 17 00:00:00 2001 +From: Andrey Shvetsov +Date: Mon, 12 Feb 2018 12:24:37 +0100 +Subject: [PATCH] staging: most: dim2: read clock speed from the device tree + +This implements reading of the clock speed parameter from the device +tree. + +Signed-off-by: Andrey Shvetsov +--- + Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + hdm-dim2/dim2_hdm.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- + 2 files changed, 113 insertions(+), 1 deletion(-) + create mode 100644 Documentation/devicetree/bindings/inic/microchip,inic-dim2.txt + +diff --git a/hdm-dim2/dim2_hdm.c b/hdm-dim2/dim2_hdm.c +index 2dba917..05e1896 100644 +--- a/hdm-dim2/dim2_hdm.c ++++ b/hdm-dim2/dim2_hdm.c +@@ -698,6 +698,42 @@ static void dma_free(struct mbo *mbo, u32 size) + + static const struct of_device_id dim2_of_match[]; + ++static struct { ++ const char *clock_speed; ++ u8 clk_speed; ++} clk_mt[] = { ++ { "256fs", CLK_256FS }, ++ { "512fs", CLK_512FS }, ++ { "1024fs", CLK_1024FS }, ++ { "2048fs", CLK_2048FS }, ++ { "3072fs", CLK_3072FS }, ++ { "4096fs", CLK_4096FS }, ++ { "6144fs", CLK_6144FS }, ++ { "8192fs", CLK_8192FS }, ++}; ++ ++/** ++ * get_dim2_clk_speed - converts string to DIM2 clock speed value ++ * ++ * @clock_speed: string in the format "{NUMBER}fs" ++ * @val: pointer to get one of the CLK_{NUMBER}FS values ++ * ++ * By success stores one of the CLK_{NUMBER}FS in the *val and returns 0, ++ * otherwise returns -EINVAL. ++ */ ++static int get_dim2_clk_speed(const char *clock_speed, u8 *val) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(clk_mt); i++) { ++ if (!strcmp(clock_speed, clk_mt[i].clock_speed)) { ++ *val = clk_mt[i].clk_speed; ++ return 0; ++ } ++ } ++ return -EINVAL; ++} ++ + /* + * dim2_probe - dim2 probe handler + * @pdev: platform device structure +@@ -708,6 +744,7 @@ static const struct of_device_id dim2_of_match[]; + static int dim2_probe(struct platform_device *pdev) + { + const struct dim2_platform_data *pdata; ++ const char *clock_speed; + struct dim2_hdm *dev; + struct resource *res; + int ret, i; +@@ -725,7 +762,18 @@ static int dim2_probe(struct platform_device *pdev) + + platform_set_drvdata(pdev, dev); + +- dev->clk_speed = CLK_4096FS; ++ ret = of_property_read_string(pdev->dev.of_node, ++ "microchip,clock-speed", &clock_speed); ++ if (ret) { ++ dev_err(&pdev->dev, "missing dt property clock-speed\n"); ++ return ret; ++ } ++ ++ ret = get_dim2_clk_speed(clock_speed, &dev->clk_speed); ++ if (ret) { ++ dev_err(&pdev->dev, "bad dt property clock-speed\n"); ++ return ret; ++ } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + dev->io_base = devm_ioremap_resource(&pdev->dev, res); +-- +libgit2 0.26.0