Lines Matching refs:canvas

41 static void canvas_write(struct meson_canvas *canvas, u32 reg, u32 val)  in canvas_write()  argument
43 writel_relaxed(val, canvas->reg_base + reg); in canvas_write()
46 static u32 canvas_read(struct meson_canvas *canvas, u32 reg) in canvas_read() argument
48 return readl_relaxed(canvas->reg_base + reg); in canvas_read()
55 struct meson_canvas *canvas; in meson_canvas_get() local
74 canvas = dev_get_drvdata(&canvas_pdev->dev); in meson_canvas_get()
75 if (!canvas) { in meson_canvas_get()
80 return canvas; in meson_canvas_get()
84 int meson_canvas_config(struct meson_canvas *canvas, u8 canvas_index, in meson_canvas_config() argument
92 if (endian && !canvas->supports_endianness) { in meson_canvas_config()
93 dev_err(canvas->dev, in meson_canvas_config()
98 spin_lock_irqsave(&canvas->lock, flags); in meson_canvas_config()
99 if (!canvas->used[canvas_index]) { in meson_canvas_config()
100 dev_err(canvas->dev, in meson_canvas_config()
103 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_config()
107 canvas_write(canvas, DMC_CAV_LUT_DATAL, in meson_canvas_config()
111 canvas_write(canvas, DMC_CAV_LUT_DATAH, in meson_canvas_config()
119 canvas_write(canvas, DMC_CAV_LUT_ADDR, in meson_canvas_config()
123 canvas_read(canvas, DMC_CAV_LUT_DATAH); in meson_canvas_config()
124 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_config()
130 int meson_canvas_alloc(struct meson_canvas *canvas, u8 *canvas_index) in meson_canvas_alloc() argument
135 spin_lock_irqsave(&canvas->lock, flags); in meson_canvas_alloc()
137 if (!canvas->used[i]) { in meson_canvas_alloc()
138 canvas->used[i] = 1; in meson_canvas_alloc()
139 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_alloc()
144 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_alloc()
146 dev_err(canvas->dev, "No more canvas available\n"); in meson_canvas_alloc()
151 int meson_canvas_free(struct meson_canvas *canvas, u8 canvas_index) in meson_canvas_free() argument
155 spin_lock_irqsave(&canvas->lock, flags); in meson_canvas_free()
156 if (!canvas->used[canvas_index]) { in meson_canvas_free()
157 dev_err(canvas->dev, in meson_canvas_free()
159 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_free()
162 canvas->used[canvas_index] = 0; in meson_canvas_free()
163 spin_unlock_irqrestore(&canvas->lock, flags); in meson_canvas_free()
171 struct meson_canvas *canvas; in meson_canvas_probe() local
174 canvas = devm_kzalloc(dev, sizeof(*canvas), GFP_KERNEL); in meson_canvas_probe()
175 if (!canvas) in meson_canvas_probe()
178 canvas->reg_base = devm_platform_ioremap_resource(pdev, 0); in meson_canvas_probe()
179 if (IS_ERR(canvas->reg_base)) in meson_canvas_probe()
180 return PTR_ERR(canvas->reg_base); in meson_canvas_probe()
182 canvas->supports_endianness = of_device_get_match_data(dev); in meson_canvas_probe()
184 canvas->dev = dev; in meson_canvas_probe()
185 spin_lock_init(&canvas->lock); in meson_canvas_probe()
186 dev_set_drvdata(dev, canvas); in meson_canvas_probe()