Commit 481d342e authored by Laurent Pinchart's avatar Laurent Pinchart

drm/rcar-du: Add platform module device table

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: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
parent d5b6dcc4
...@@ -123,6 +123,7 @@ static int rcar_du_load(struct drm_device *dev, unsigned long flags) ...@@ -123,6 +123,7 @@ static int rcar_du_load(struct drm_device *dev, unsigned long flags)
rcdu->dev = &pdev->dev; rcdu->dev = &pdev->dev;
rcdu->pdata = pdata; rcdu->pdata = pdata;
rcdu->info = (struct rcar_du_device_info *)pdev->id_entry->driver_data;
rcdu->ddev = dev; rcdu->ddev = dev;
dev->dev_private = rcdu; dev->dev_private = rcdu;
...@@ -297,6 +298,17 @@ static int rcar_du_remove(struct platform_device *pdev) ...@@ -297,6 +298,17 @@ static int rcar_du_remove(struct platform_device *pdev)
return 0; 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 = { static struct platform_driver rcar_du_platform_driver = {
.probe = rcar_du_probe, .probe = rcar_du_probe,
.remove = rcar_du_remove, .remove = rcar_du_remove,
...@@ -305,6 +317,7 @@ static struct platform_driver rcar_du_platform_driver = { ...@@ -305,6 +317,7 @@ static struct platform_driver rcar_du_platform_driver = {
.name = "rcar-du", .name = "rcar-du",
.pm = &rcar_du_pm_ops, .pm = &rcar_du_pm_ops,
}, },
.id_table = rcar_du_id_table,
}; };
module_platform_driver(rcar_du_platform_driver); module_platform_driver(rcar_du_platform_driver);
......
...@@ -25,9 +25,18 @@ struct clk; ...@@ -25,9 +25,18 @@ struct clk;
struct device; struct device;
struct drm_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 rcar_du_device {
struct device *dev; struct device *dev;
const struct rcar_du_platform_data *pdata; const struct rcar_du_platform_data *pdata;
const struct rcar_du_device_info *info;
void __iomem *mmio; void __iomem *mmio;
struct clk *clock; struct clk *clock;
...@@ -50,6 +59,12 @@ struct rcar_du_device { ...@@ -50,6 +59,12 @@ struct rcar_du_device {
} planes; } 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); int rcar_du_get(struct rcar_du_device *rcdu);
void rcar_du_put(struct rcar_du_device *rcdu); void rcar_du_put(struct rcar_du_device *rcdu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment