Lines Matching refs:vpdma

242 static u32 read_reg(struct vpdma_data *vpdma, int offset)  in read_reg()  argument
244 return ioread32(vpdma->base + offset); in read_reg()
247 static void write_reg(struct vpdma_data *vpdma, int offset, u32 value) in write_reg() argument
249 iowrite32(value, vpdma->base + offset); in write_reg()
252 static int read_field_reg(struct vpdma_data *vpdma, int offset, in read_field_reg() argument
255 return (read_reg(vpdma, offset) & (mask << shift)) >> shift; in read_field_reg()
258 static void write_field_reg(struct vpdma_data *vpdma, int offset, u32 field, in write_field_reg() argument
261 u32 val = read_reg(vpdma, offset); in write_field_reg()
266 write_reg(vpdma, offset, val); in write_field_reg()
269 void vpdma_dump_regs(struct vpdma_data *vpdma) in vpdma_dump_regs() argument
271 struct device *dev = &vpdma->pdev->dev; in vpdma_dump_regs()
273 #define DUMPREG(r) dev_dbg(dev, "%-35s %08x\n", #r, read_reg(vpdma, VPDMA_##r)) in vpdma_dump_regs()
348 int vpdma_map_desc_buf(struct vpdma_data *vpdma, struct vpdma_buf *buf) in vpdma_map_desc_buf() argument
350 struct device *dev = &vpdma->pdev->dev; in vpdma_map_desc_buf()
369 void vpdma_unmap_desc_buf(struct vpdma_data *vpdma, struct vpdma_buf *buf) in vpdma_unmap_desc_buf() argument
371 struct device *dev = &vpdma->pdev->dev; in vpdma_unmap_desc_buf()
420 static bool vpdma_list_busy(struct vpdma_data *vpdma, int list_num) in vpdma_list_busy() argument
422 return read_reg(vpdma, VPDMA_LIST_STAT_SYNC) & BIT(list_num + 16); in vpdma_list_busy()
428 int vpdma_submit_descs(struct vpdma_data *vpdma, struct vpdma_desc_list *list) in vpdma_submit_descs() argument
434 if (vpdma_list_busy(vpdma, list_num)) in vpdma_submit_descs()
440 write_reg(vpdma, VPDMA_LIST_ADDR, (u32) list->buf.dma_addr); in vpdma_submit_descs()
442 write_reg(vpdma, VPDMA_LIST_ATTR, in vpdma_submit_descs()
752 void vpdma_enable_list_complete_irq(struct vpdma_data *vpdma, int list_num, in vpdma_enable_list_complete_irq() argument
757 val = read_reg(vpdma, VPDMA_INT_LIST0_MASK); in vpdma_enable_list_complete_irq()
762 write_reg(vpdma, VPDMA_INT_LIST0_MASK, val); in vpdma_enable_list_complete_irq()
766 void vpdma_clear_list_stat(struct vpdma_data *vpdma) in vpdma_clear_list_stat() argument
768 write_reg(vpdma, VPDMA_INT_LIST0_STAT, in vpdma_clear_list_stat()
769 read_reg(vpdma, VPDMA_INT_LIST0_STAT)); in vpdma_clear_list_stat()
777 void vpdma_set_line_mode(struct vpdma_data *vpdma, int line_mode, in vpdma_set_line_mode() argument
782 write_field_reg(vpdma, client_cstat, line_mode, in vpdma_set_line_mode()
790 void vpdma_set_frame_start_event(struct vpdma_data *vpdma, in vpdma_set_frame_start_event() argument
796 write_field_reg(vpdma, client_cstat, fs_event, in vpdma_set_frame_start_event()
802 struct vpdma_data *vpdma = context; in vpdma_firmware_cb() local
806 dev_dbg(&vpdma->pdev->dev, "firmware callback\n"); in vpdma_firmware_cb()
809 dev_err(&vpdma->pdev->dev, "couldn't get firmware\n"); in vpdma_firmware_cb()
814 if (read_field_reg(vpdma, VPDMA_LIST_ATTR, VPDMA_LIST_RDY_MASK, in vpdma_firmware_cb()
816 vpdma->cb(vpdma->pdev); in vpdma_firmware_cb()
822 dev_err(&vpdma->pdev->dev, in vpdma_firmware_cb()
829 vpdma_map_desc_buf(vpdma, &fw_dma_buf); in vpdma_firmware_cb()
831 write_reg(vpdma, VPDMA_LIST_ADDR, (u32) fw_dma_buf.dma_addr); in vpdma_firmware_cb()
836 if (read_field_reg(vpdma, VPDMA_LIST_ATTR, VPDMA_LIST_RDY_MASK, in vpdma_firmware_cb()
842 dev_err(&vpdma->pdev->dev, "firmware upload failed\n"); in vpdma_firmware_cb()
846 vpdma->cb(vpdma->pdev); in vpdma_firmware_cb()
849 vpdma_unmap_desc_buf(vpdma, &fw_dma_buf); in vpdma_firmware_cb()
856 static int vpdma_load_firmware(struct vpdma_data *vpdma) in vpdma_load_firmware() argument
859 struct device *dev = &vpdma->pdev->dev; in vpdma_load_firmware()
862 (const char *) VPDMA_FIRMWARE, dev, GFP_KERNEL, vpdma, in vpdma_load_firmware()
878 struct vpdma_data *vpdma; in vpdma_create() local
883 vpdma = devm_kzalloc(&pdev->dev, sizeof(*vpdma), GFP_KERNEL); in vpdma_create()
884 if (!vpdma) { in vpdma_create()
889 vpdma->pdev = pdev; in vpdma_create()
890 vpdma->cb = cb; in vpdma_create()
898 vpdma->base = devm_ioremap(&pdev->dev, res->start, resource_size(res)); in vpdma_create()
899 if (!vpdma->base) { in vpdma_create()
904 r = vpdma_load_firmware(vpdma); in vpdma_create()
910 return vpdma; in vpdma_create()