ASoC: samsung idma: Add proper annotation for casting iomem pointers
authorLars-Peter Clausen <lars@metafoo.de>
Sun, 17 Aug 2014 14:18:21 +0000 (16:18 +0200)
committerMark Brown <broonie@linaro.org>
Sun, 17 Aug 2014 14:34:45 +0000 (09:34 -0500)
It is not always possible to interchange iomem pointers with normal pointers,
which why we have annotations for iomem pointers and warn when casting them to a
normal pointer or vice versa. In this case the casting is fine and unfortunately
necessary so add the proper annotations to tell code checkers that it is
intentional. This silences the following warnings from sparse:
sound/soc/samsung/idma.c:354:20: warning: incorrect type in argument 1
 (different address spaces) expected void volatile [noderef]
  <asn:2>*addr got unsigned char *area
sound/soc/samsung/idma.c:372:22: warning: cast removes address space of
 expression

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/samsung/idma.c

index db6cefa18017c1db57568689661fc21bc80ec6ea..0e8dd985fcb315dab9bf293c8d7ee4dea0b9b34e 100644 (file)
@@ -351,7 +351,7 @@ static void idma_free(struct snd_pcm *pcm)
        if (!buf->area)
                return;
 
-       iounmap(buf->area);
+       iounmap((void __iomem *)buf->area);
 
        buf->area = NULL;
        buf->addr = 0;
@@ -369,7 +369,7 @@ static int preallocate_idma_buffer(struct snd_pcm *pcm, int stream)
        buf->dev.type = SNDRV_DMA_TYPE_CONTINUOUS;
        buf->addr = idma.lp_tx_addr;
        buf->bytes = idma_hardware.buffer_bytes_max;
-       buf->area = (unsigned char *)ioremap(buf->addr, buf->bytes);
+       buf->area = (unsigned char * __force)ioremap(buf->addr, buf->bytes);
 
        return 0;
 }