Merge tag 'hsi-for-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Oct 2022 18:46:18 +0000 (11:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Oct 2022 18:46:18 +0000 (11:46 -0700)
Pull HSI updates from Sebastian Reichel:

 - completely switch to gpiod API

 - misc small fixes

* tag 'hsi-for-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi:
  HSI: nokia-modem: Replace of_gpio_count() by gpiod_count()
  HSI: ssi_protocol: fix potential resource leak in ssip_pn_open()
  HSI: omap_ssi_port: Fix dma_map_sg error check
  HSI: cmt_speech: Pass a pointer to virt_to_page()
  HSI: omap_ssi: Fix refcount leak in ssi_probe
  HSI: clients: remove duplicate assignment

drivers/hsi/clients/cmt_speech.c
drivers/hsi/clients/nokia-modem.c
drivers/hsi/clients/ssi_protocol.c
drivers/hsi/controllers/omap_ssi_core.c
drivers/hsi/controllers/omap_ssi_port.c

index e014ef3..8069f79 100644 (file)
@@ -1089,7 +1089,7 @@ static vm_fault_t cs_char_vma_fault(struct vm_fault *vmf)
        struct cs_char *csdata = vmf->vma->vm_private_data;
        struct page *page;
 
-       page = virt_to_page(csdata->mmap_base);
+       page = virt_to_page((void *)csdata->mmap_base);
        get_page(page);
        vmf->page = page;
 
index cd7ebf4..97ba59e 100644 (file)
@@ -13,7 +13,6 @@
 #include <linux/interrupt.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
-#include <linux/of_gpio.h>
 #include <linux/hsi/ssi_protocol.h>
 
 static unsigned int pm = 1;
@@ -75,8 +74,7 @@ static int nokia_modem_gpio_probe(struct device *dev)
        struct nokia_modem_device *modem = dev_get_drvdata(dev);
        int gpio_count, gpio_name_count, i, err;
 
-       gpio_count = of_gpio_count(np);
-
+       gpio_count = gpiod_count(dev, NULL);
        if (gpio_count < 0) {
                dev_err(dev, "missing gpios: %d\n", gpio_count);
                return gpio_count;
index 21f11a5..274ad84 100644 (file)
@@ -796,7 +796,6 @@ static void ssip_rx_strans(struct hsi_client *cl, u32 cmd)
                dev_err(&cl->device, "No memory for rx skb\n");
                goto out1;
        }
-       skb->dev = ssi->netdev;
        skb_put(skb, len * 4);
        msg = ssip_alloc_data(ssi, skb, GFP_ATOMIC);
        if (unlikely(!msg)) {
@@ -931,6 +930,7 @@ static int ssip_pn_open(struct net_device *dev)
        if (err < 0) {
                dev_err(&cl->device, "Register HSI port event failed (%d)\n",
                        err);
+               hsi_release_port(cl);
                return err;
        }
        dev_dbg(&cl->device, "Configuring SSI port\n");
index 44a3f56..eb98201 100644 (file)
@@ -524,6 +524,7 @@ static int ssi_probe(struct platform_device *pd)
                if (!childpdev) {
                        err = -ENODEV;
                        dev_err(&pd->dev, "failed to create ssi controller port\n");
+                       of_node_put(child);
                        goto out3;
                }
        }
index a0cb5be..b9495b7 100644 (file)
@@ -230,10 +230,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
        if (msg->ttype == HSI_MSG_READ) {
                err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
                                                        DMA_FROM_DEVICE);
-               if (err < 0) {
+               if (!err) {
                        dev_dbg(&ssi->device, "DMA map SG failed !\n");
                        pm_runtime_put_autosuspend(omap_port->pdev);
-                       return err;
+                       return -EIO;
                }
                csdp = SSI_DST_BURST_4x32_BIT | SSI_DST_MEMORY_PORT |
                        SSI_SRC_SINGLE_ACCESS0 | SSI_SRC_PERIPHERAL_PORT |
@@ -247,10 +247,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
        } else {
                err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
                                                        DMA_TO_DEVICE);
-               if (err < 0) {
+               if (!err) {
                        dev_dbg(&ssi->device, "DMA map SG failed !\n");
                        pm_runtime_put_autosuspend(omap_port->pdev);
-                       return err;
+                       return -EIO;
                }
                csdp = SSI_SRC_BURST_4x32_BIT | SSI_SRC_MEMORY_PORT |
                        SSI_DST_SINGLE_ACCESS0 | SSI_DST_PERIPHERAL_PORT |