Lines Matching defs:canvas
13 #include <linux/soc/amlogic/meson-canvas.h>
37 spinlock_t lock; /* canvas device lock */
42 static void canvas_write(struct meson_canvas *canvas, u32 reg, u32 val)
44 writel_relaxed(val, canvas->reg_base + reg);
47 static u32 canvas_read(struct meson_canvas *canvas, u32 reg)
49 return readl_relaxed(canvas->reg_base + reg);
56 struct meson_canvas *canvas;
58 canvas_node = of_parse_phandle(dev->of_node, "amlogic,canvas", 0);
71 * If priv is NULL, it's probably because the canvas hasn't
75 canvas = dev_get_drvdata(&canvas_pdev->dev);
76 if (!canvas) {
81 return canvas;
85 int meson_canvas_config(struct meson_canvas *canvas, u8 canvas_index,
93 if (endian && !canvas->supports_endianness) {
94 dev_err(canvas->dev,
99 spin_lock_irqsave(&canvas->lock, flags);
100 if (!canvas->used[canvas_index]) {
101 dev_err(canvas->dev,
102 "Trying to setup non allocated canvas %u\n",
104 spin_unlock_irqrestore(&canvas->lock, flags);
108 canvas_write(canvas, DMC_CAV_LUT_DATAL,
112 canvas_write(canvas, DMC_CAV_LUT_DATAH,
120 canvas_write(canvas, DMC_CAV_LUT_ADDR,
124 canvas_read(canvas, DMC_CAV_LUT_DATAH);
125 spin_unlock_irqrestore(&canvas->lock, flags);
131 int meson_canvas_alloc(struct meson_canvas *canvas, u8 *canvas_index)
136 spin_lock_irqsave(&canvas->lock, flags);
138 if (!canvas->used[i]) {
139 canvas->used[i] = 1;
140 spin_unlock_irqrestore(&canvas->lock, flags);
145 spin_unlock_irqrestore(&canvas->lock, flags);
147 dev_err(canvas->dev, "No more canvas available\n");
152 int meson_canvas_free(struct meson_canvas *canvas, u8 canvas_index)
156 spin_lock_irqsave(&canvas->lock, flags);
157 if (!canvas->used[canvas_index]) {
158 dev_err(canvas->dev,
159 "Trying to free unused canvas %u\n", canvas_index);
160 spin_unlock_irqrestore(&canvas->lock, flags);
163 canvas->used[canvas_index] = 0;
164 spin_unlock_irqrestore(&canvas->lock, flags);
172 struct meson_canvas *canvas;
175 canvas = devm_kzalloc(dev, sizeof(*canvas), GFP_KERNEL);
176 if (!canvas)
179 canvas->reg_base = devm_platform_ioremap_resource(pdev, 0);
180 if (IS_ERR(canvas->reg_base))
181 return PTR_ERR(canvas->reg_base);
183 canvas->supports_endianness = of_device_get_match_data(dev);
185 canvas->dev = dev;
186 spin_lock_init(&canvas->lock);
187 dev_set_drvdata(dev, canvas);
193 { .compatible = "amlogic,meson8-canvas", .data = (void *)false, },
194 { .compatible = "amlogic,meson8b-canvas", .data = (void *)false, },
195 { .compatible = "amlogic,meson8m2-canvas", .data = (void *)false, },
196 { .compatible = "amlogic,canvas", .data = (void *)true, },
204 .name = "amlogic-canvas",