This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: bttv: refactor bttv_set_dma()
Author:  Deborah Brouwer <deborah.brou...@collabora.com>
Date:    Fri Jul 14 19:16:07 2023 -0700

Break bttv_set_dma() into several smaller, separate functions so it is
easier to read the risc and dma code. Replace numeric values with
descriptive macros. Also remove the unused field btv->cap_ctl.

Signed-off-by: Deborah Brouwer <deborah.brou...@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 drivers/media/pci/bt8xx/bttv-risc.c | 111 +++++++++++++++++++++++-------------
 drivers/media/pci/bt8xx/bttvp.h     |   1 -
 2 files changed, 71 insertions(+), 41 deletions(-)

---

diff --git a/drivers/media/pci/bt8xx/bttv-risc.c 
b/drivers/media/pci/bt8xx/bttv-risc.c
index 97248e340a28..3e0dac56de54 100644
--- a/drivers/media/pci/bt8xx/bttv-risc.c
+++ b/drivers/media/pci/bt8xx/bttv-risc.c
@@ -360,21 +360,80 @@ bttv_apply_geo(struct bttv *btv, struct bttv_geometry 
*geo, int odd)
 /* ---------------------------------------------------------- */
 /* risc group / risc main loop / dma management               */
 
-void
-bttv_set_dma(struct bttv *btv, int override)
+static void bttv_set_risc_status(struct bttv *btv)
 {
-       unsigned long cmd;
-       int capctl;
+       unsigned long cmd = BT848_RISC_JUMP;
+       /*
+        * The value of btv->loop_irq sets or resets the RISC_STATUS for video
+        * and/or vbi by setting the value of bits [23:16] in the first dword
+        * of the JUMP instruction:
+        * video risc: set (1) and reset (~1)
+        * vbi risc: set(4) and reset (~4)
+        */
+       if (btv->loop_irq) {
+               cmd |= BT848_RISC_IRQ;
+               cmd |= (btv->loop_irq  & 0x0f) << 16;
+               cmd |= (~btv->loop_irq & 0x0f) << 20;
+       }
+       btv->main.cpu[RISC_SLOT_LOOP] = cpu_to_le32(cmd);
+}
+
+static void bttv_set_irq_timer(struct bttv *btv)
+{
+       if (btv->curr.frame_irq || btv->loop_irq || btv->cvbi)
+               mod_timer(&btv->timeout, jiffies + BTTV_TIMEOUT);
+       else
+               del_timer(&btv->timeout);
+}
+
+static int bttv_set_capture_control(struct bttv *btv, int start_capture)
+{
+       int capctl = 0;
+
+       if (btv->curr.top || btv->curr.bottom)
+               capctl = BT848_CAP_CTL_CAPTURE_ODD |
+                        BT848_CAP_CTL_CAPTURE_EVEN;
+
+       if (btv->cvbi)
+               capctl |= BT848_CAP_CTL_CAPTURE_VBI_ODD |
+                         BT848_CAP_CTL_CAPTURE_VBI_EVEN;
+
+       capctl |= start_capture;
+
+       btaor(capctl, ~0x0f, BT848_CAP_CTL);
+
+       return capctl;
+}
+
+static void bttv_start_dma(struct bttv *btv)
+{
+       if (btv->dma_on)
+               return;
+       btwrite(btv->main.dma, BT848_RISC_STRT_ADD);
+       btor(0x3, BT848_GPIO_DMA_CTL);
+       btv->dma_on = 1;
+}
+
+static void bttv_stop_dma(struct bttv *btv)
+{
+       if (!btv->dma_on)
+               return;
+       btand(~0x3, BT848_GPIO_DMA_CTL);
+       btv->dma_on = 0;
+}
+
+void bttv_set_dma(struct bttv *btv, int start_capture)
+{
+       int capctl = 0;
 
-       btv->cap_ctl = 0;
-       if (NULL != btv->curr.top)      btv->cap_ctl |= 0x02;
-       if (NULL != btv->curr.bottom)   btv->cap_ctl |= 0x01;
-       if (NULL != btv->cvbi)          btv->cap_ctl |= 0x0c;
+       bttv_set_risc_status(btv);
+       bttv_set_irq_timer(btv);
+       capctl = bttv_set_capture_control(btv, start_capture);
 
-       capctl  = 0;
-       capctl |= (btv->cap_ctl & 0x03) ? 0x03 : 0x00;  /* capture  */
-       capctl |= (btv->cap_ctl & 0x0c) ? 0x0c : 0x00;  /* vbi data */
-       capctl |= override;
+       if (capctl)
+               bttv_start_dma(btv);
+       else
+               bttv_stop_dma(btv);
 
        d2printk("%d: capctl=%x lirq=%d top=%08llx/%08llx even=%08llx/%08llx\n",
                 btv->c.nr,capctl,btv->loop_irq,
@@ -382,34 +441,6 @@ bttv_set_dma(struct bttv *btv, int override)
                 btv->curr.top     ? (unsigned long long)btv->curr.top->top.dma 
       : 0,
                 btv->cvbi         ? (unsigned long long)btv->cvbi->bottom.dma  
       : 0,
                 btv->curr.bottom  ? (unsigned long 
long)btv->curr.bottom->bottom.dma  : 0);
-
-       cmd = BT848_RISC_JUMP;
-       if (btv->loop_irq) {
-               cmd |= BT848_RISC_IRQ;
-               cmd |= (btv->loop_irq  & 0x0f) << 16;
-               cmd |= (~btv->loop_irq & 0x0f) << 20;
-       }
-       if (btv->curr.frame_irq || btv->loop_irq || btv->cvbi) {
-               mod_timer(&btv->timeout, jiffies+BTTV_TIMEOUT);
-       } else {
-               del_timer(&btv->timeout);
-       }
-       btv->main.cpu[RISC_SLOT_LOOP] = cpu_to_le32(cmd);
-
-       btaor(capctl, ~0x0f, BT848_CAP_CTL);
-       if (capctl) {
-               if (btv->dma_on)
-                       return;
-               btwrite(btv->main.dma, BT848_RISC_STRT_ADD);
-               btor(3, BT848_GPIO_DMA_CTL);
-               btv->dma_on = 1;
-       } else {
-               if (!btv->dma_on)
-                       return;
-               btand(~3, BT848_GPIO_DMA_CTL);
-               btv->dma_on = 0;
-       }
-       return;
 }
 
 int
diff --git a/drivers/media/pci/bt8xx/bttvp.h b/drivers/media/pci/bt8xx/bttvp.h
index bce2401de9bd..b750dfbc75cc 100644
--- a/drivers/media/pci/bt8xx/bttvp.h
+++ b/drivers/media/pci/bt8xx/bttvp.h
@@ -430,7 +430,6 @@ struct bttv {
        int                     loop_irq;
        int                     new_input;
 
-       unsigned long cap_ctl;
        unsigned long dma_on;
        struct timer_list timeout;
        struct bttv_suspend_state state;

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to