Lines Matching defs:canvas
12 #include <linux/soc/amlogic/meson-canvas.h>
36 spinlock_t lock; /* canvas device lock */
41 static void canvas_write(struct meson_canvas *canvas, u32 reg, u32 val)
43 writel_relaxed(val, canvas->reg_base + reg);
46 static u32 canvas_read(struct meson_canvas *canvas, u32 reg)
48 return readl_relaxed(canvas->reg_base + reg);
55 struct meson_canvas *canvas;
57 canvas_node = of_parse_phandle(dev->of_node, "amlogic,canvas", 0);
70 * If priv is NULL, it's probably because the canvas hasn't
74 canvas = dev_get_drvdata(&canvas_pdev->dev);
75 if (!canvas) {
80 return canvas;
84 int meson_canvas_config(struct meson_canvas *canvas, u8 canvas_index,
92 if (endian && !canvas->supports_endianness) {
93 dev_err(canvas->dev,
98 spin_lock_irqsave(&canvas->lock, flags);
99 if (!canvas->used[canvas_index]) {
100 dev_err(canvas->dev,
101 "Trying to setup non allocated canvas %u\n",
103 spin_unlock_irqrestore(&canvas->lock, flags);
107 canvas_write(canvas, DMC_CAV_LUT_DATAL,
111 canvas_write(canvas, DMC_CAV_LUT_DATAH,
119 canvas_write(canvas, DMC_CAV_LUT_ADDR,
123 canvas_read(canvas, DMC_CAV_LUT_DATAH);
124 spin_unlock_irqrestore(&canvas->lock, flags);
130 int meson_canvas_alloc(struct meson_canvas *canvas, u8 *canvas_index)
135 spin_lock_irqsave(&canvas->lock, flags);
137 if (!canvas->used[i]) {
138 canvas->used[i] = 1;
139 spin_unlock_irqrestore(&canvas->lock, flags);
144 spin_unlock_irqrestore(&canvas->lock, flags);
146 dev_err(canvas->dev, "No more canvas available\n");
151 int meson_canvas_free(struct meson_canvas *canvas, u8 canvas_index)
155 spin_lock_irqsave(&canvas->lock, flags);
156 if (!canvas->used[canvas_index]) {
157 dev_err(canvas->dev,
158 "Trying to free unused canvas %u\n", canvas_index);
159 spin_unlock_irqrestore(&canvas->lock, flags);
162 canvas->used[canvas_index] = 0;
163 spin_unlock_irqrestore(&canvas->lock, flags);
172 struct meson_canvas *canvas;
175 canvas = devm_kzalloc(dev, sizeof(*canvas), GFP_KERNEL);
176 if (!canvas)
180 canvas->reg_base = devm_ioremap_resource(dev, res);
181 if (IS_ERR(canvas->reg_base))
182 return PTR_ERR(canvas->reg_base);
184 canvas->supports_endianness = of_device_get_match_data(dev);
186 canvas->dev = dev;
187 spin_lock_init(&canvas->lock);
188 dev_set_drvdata(dev, canvas);
194 { .compatible = "amlogic,meson8-canvas", .data = (void *)false, },
195 { .compatible = "amlogic,meson8b-canvas", .data = (void *)false, },
196 { .compatible = "amlogic,meson8m2-canvas", .data = (void *)false, },
197 { .compatible = "amlogic,canvas", .data = (void *)true, },
205 .name = "amlogic-canvas",