drm/rcar-du: Add platform module device table
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 14 Jun 2013 11:38:33 +0000 (13:38 +0200)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 9 Aug 2013 21:17:40 +0000 (23:17 +0200)
The platform device id driver data field points to a device information
structure that only contains a (currently empty) features field for now.
Support for additional model-dependent features will be added later.

Only the R8A7779 variant is currently supported.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
drivers/gpu/drm/rcar-du/rcar_du_drv.c
drivers/gpu/drm/rcar-du/rcar_du_drv.h

index f776b1c..bb7193d 100644 (file)
@@ -123,6 +123,7 @@ static int rcar_du_load(struct drm_device *dev, unsigned long flags)
 
        rcdu->dev = &pdev->dev;
        rcdu->pdata = pdata;
+       rcdu->info = (struct rcar_du_device_info *)pdev->id_entry->driver_data;
        rcdu->ddev = dev;
        dev->dev_private = rcdu;
 
@@ -297,6 +298,17 @@ static int rcar_du_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct rcar_du_device_info rcar_du_r8a7779_info = {
+       .features = 0,
+};
+
+static const struct platform_device_id rcar_du_id_table[] = {
+       { "rcar-du-r8a7779", (kernel_ulong_t)&rcar_du_r8a7779_info },
+       { }
+};
+
+MODULE_DEVICE_TABLE(platform, rcar_du_id_table);
+
 static struct platform_driver rcar_du_platform_driver = {
        .probe          = rcar_du_probe,
        .remove         = rcar_du_remove,
@@ -305,6 +317,7 @@ static struct platform_driver rcar_du_platform_driver = {
                .name   = "rcar-du",
                .pm     = &rcar_du_pm_ops,
        },
+       .id_table       = rcar_du_id_table,
 };
 
 module_platform_driver(rcar_du_platform_driver);
index 193cc59..06dbf4f 100644 (file)
@@ -25,9 +25,18 @@ struct clk;
 struct device;
 struct drm_device;
 
+/*
+ * struct rcar_du_device_info - DU model-specific information
+ * @features: device features (RCAR_DU_FEATURE_*)
+ */
+struct rcar_du_device_info {
+       unsigned int features;
+};
+
 struct rcar_du_device {
        struct device *dev;
        const struct rcar_du_platform_data *pdata;
+       const struct rcar_du_device_info *info;
 
        void __iomem *mmio;
        struct clk *clock;
@@ -50,6 +59,12 @@ struct rcar_du_device {
        } planes;
 };
 
+static inline bool rcar_du_has(struct rcar_du_device *rcdu,
+                              unsigned int feature)
+{
+       return rcdu->info->features & feature;
+}
+
 int rcar_du_get(struct rcar_du_device *rcdu);
 void rcar_du_put(struct rcar_du_device *rcdu);