]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/char/hw_random/n2-drv.c
hwrng: n2 - add device data descriptions
[mirror_ubuntu-artful-kernel.git] / drivers / char / hw_random / n2-drv.c
index 102560ffed44a036225e3522b9f2e154c0d0ca56..74c26c7e98b6ba2ea0d0efd27976679e2fdf8536 100644 (file)
@@ -625,24 +625,23 @@ static const struct of_device_id n2rng_match[];
 static int n2rng_probe(struct platform_device *op)
 {
        const struct of_device_id *match;
-       int multi_capable;
        int err = -ENOMEM;
        struct n2rng *np;
 
        match = of_match_device(n2rng_match, &op->dev);
        if (!match)
                return -EINVAL;
-       multi_capable = (match->data != NULL);
 
        n2rng_driver_version();
        np = devm_kzalloc(&op->dev, sizeof(*np), GFP_KERNEL);
        if (!np)
                goto out;
        np->op = op;
+       np->data = (struct n2rng_template *)match->data;
 
        INIT_DELAYED_WORK(&np->work, n2rng_work);
 
-       if (multi_capable)
+       if (np->data->multi_capable)
                np->flags |= N2RNG_FLAG_MULTI;
 
        err = -ENODEV;
@@ -673,8 +672,9 @@ static int n2rng_probe(struct platform_device *op)
                        dev_err(&op->dev, "VF RNG lacks rng-#units property\n");
                        goto out_hvapi_unregister;
                }
-       } else
+       } else {
                np->num_units = 1;
+       }
 
        dev_info(&op->dev, "Registered RNG HVAPI major %lu minor %lu\n",
                 np->hvapi_major, np->hvapi_minor);
@@ -731,30 +731,61 @@ static int n2rng_remove(struct platform_device *op)
        return 0;
 }
 
+static struct n2rng_template n2_template = {
+       .id = N2_n2_rng,
+       .multi_capable = 0,
+       .chip_version = 1,
+};
+
+static struct n2rng_template vf_template = {
+       .id = N2_vf_rng,
+       .multi_capable = 1,
+       .chip_version = 1,
+};
+
+static struct n2rng_template kt_template = {
+       .id = N2_kt_rng,
+       .multi_capable = 1,
+       .chip_version = 1,
+};
+
+static struct n2rng_template m4_template = {
+       .id = N2_m4_rng,
+       .multi_capable = 1,
+       .chip_version = 2,
+};
+
+static struct n2rng_template m7_template = {
+       .id = N2_m7_rng,
+       .multi_capable = 1,
+       .chip_version = 2,
+};
+
 static const struct of_device_id n2rng_match[] = {
        {
                .name           = "random-number-generator",
                .compatible     = "SUNW,n2-rng",
+               .data           = &n2_template,
        },
        {
                .name           = "random-number-generator",
                .compatible     = "SUNW,vf-rng",
-               .data           = (void *) 1,
+               .data           = &vf_template,
        },
        {
                .name           = "random-number-generator",
                .compatible     = "SUNW,kt-rng",
-               .data           = (void *) 1,
+               .data           = &kt_template,
        },
        {
                .name           = "random-number-generator",
                .compatible     = "ORCL,m4-rng",
-               .data           = (void *) 1,
+               .data           = &m4_template,
        },
        {
                .name           = "random-number-generator",
                .compatible     = "ORCL,m7-rng",
-               .data           = (void *) 1,
+               .data           = &m7_template,
        },
        {},
 };