diff options
Diffstat (limited to 'drivers/soc/amlogic/meson-canvas.c')
-rw-r--r-- | drivers/soc/amlogic/meson-canvas.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/soc/amlogic/meson-canvas.c b/drivers/soc/amlogic/meson-canvas.c index be95a37c3fec..c655f5f92b12 100644 --- a/drivers/soc/amlogic/meson-canvas.c +++ b/drivers/soc/amlogic/meson-canvas.c | |||
@@ -35,6 +35,7 @@ struct meson_canvas { | |||
35 | void __iomem *reg_base; | 35 | void __iomem *reg_base; |
36 | spinlock_t lock; /* canvas device lock */ | 36 | spinlock_t lock; /* canvas device lock */ |
37 | u8 used[NUM_CANVAS]; | 37 | u8 used[NUM_CANVAS]; |
38 | bool supports_endianness; | ||
38 | }; | 39 | }; |
39 | 40 | ||
40 | static void canvas_write(struct meson_canvas *canvas, u32 reg, u32 val) | 41 | static void canvas_write(struct meson_canvas *canvas, u32 reg, u32 val) |
@@ -86,6 +87,12 @@ int meson_canvas_config(struct meson_canvas *canvas, u8 canvas_index, | |||
86 | { | 87 | { |
87 | unsigned long flags; | 88 | unsigned long flags; |
88 | 89 | ||
90 | if (endian && !canvas->supports_endianness) { | ||
91 | dev_err(canvas->dev, | ||
92 | "Endianness is not supported on this SoC\n"); | ||
93 | return -EINVAL; | ||
94 | } | ||
95 | |||
89 | spin_lock_irqsave(&canvas->lock, flags); | 96 | spin_lock_irqsave(&canvas->lock, flags); |
90 | if (!canvas->used[canvas_index]) { | 97 | if (!canvas->used[canvas_index]) { |
91 | dev_err(canvas->dev, | 98 | dev_err(canvas->dev, |
@@ -172,6 +179,8 @@ static int meson_canvas_probe(struct platform_device *pdev) | |||
172 | if (IS_ERR(canvas->reg_base)) | 179 | if (IS_ERR(canvas->reg_base)) |
173 | return PTR_ERR(canvas->reg_base); | 180 | return PTR_ERR(canvas->reg_base); |
174 | 181 | ||
182 | canvas->supports_endianness = of_device_get_match_data(dev); | ||
183 | |||
175 | canvas->dev = dev; | 184 | canvas->dev = dev; |
176 | spin_lock_init(&canvas->lock); | 185 | spin_lock_init(&canvas->lock); |
177 | dev_set_drvdata(dev, canvas); | 186 | dev_set_drvdata(dev, canvas); |
@@ -180,7 +189,10 @@ static int meson_canvas_probe(struct platform_device *pdev) | |||
180 | } | 189 | } |
181 | 190 | ||
182 | static const struct of_device_id canvas_dt_match[] = { | 191 | static const struct of_device_id canvas_dt_match[] = { |
183 | { .compatible = "amlogic,canvas" }, | 192 | { .compatible = "amlogic,meson8-canvas", .data = (void *)false, }, |
193 | { .compatible = "amlogic,meson8b-canvas", .data = (void *)false, }, | ||
194 | { .compatible = "amlogic,meson8m2-canvas", .data = (void *)false, }, | ||
195 | { .compatible = "amlogic,canvas", .data = (void *)true, }, | ||
184 | {} | 196 | {} |
185 | }; | 197 | }; |
186 | MODULE_DEVICE_TABLE(of, canvas_dt_match); | 198 | MODULE_DEVICE_TABLE(of, canvas_dt_match); |