diff options
author | Yegor Yefremov <yegor_sub1@visionsystems.de> | 2010-03-18 20:50:44 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-21 23:33:37 -0400 |
commit | 986917b7b7570f889fa9c8c54962a9f2c3b32bf4 (patch) | |
tree | d96a4bf278ea05db315f2985903182fd6b5a48e4 | |
parent | abde89d7f57adfae5a43f086b45e5746be16e3f0 (diff) |
can: sja1000: add read/write routines for 8, 16 and 32-bit register access
add routines for 8, 16 and 32-bit access like in
drivers/i2c/busses/i2c-pca-platform.c
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/can/sja1000/sja1000_platform.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/drivers/net/can/sja1000/sja1000_platform.c b/drivers/net/can/sja1000/sja1000_platform.c index bec0d3d99fe3..1083b42ab6cb 100644 --- a/drivers/net/can/sja1000/sja1000_platform.c +++ b/drivers/net/can/sja1000/sja1000_platform.c | |||
@@ -37,16 +37,36 @@ MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>"); | |||
37 | MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus"); | 37 | MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus"); |
38 | MODULE_LICENSE("GPL v2"); | 38 | MODULE_LICENSE("GPL v2"); |
39 | 39 | ||
40 | static u8 sp_read_reg(const struct sja1000_priv *priv, int reg) | 40 | static u8 sp_read_reg8(const struct sja1000_priv *priv, int reg) |
41 | { | 41 | { |
42 | return ioread8(priv->reg_base + reg); | 42 | return ioread8(priv->reg_base + reg); |
43 | } | 43 | } |
44 | 44 | ||
45 | static void sp_write_reg(const struct sja1000_priv *priv, int reg, u8 val) | 45 | static void sp_write_reg8(const struct sja1000_priv *priv, int reg, u8 val) |
46 | { | 46 | { |
47 | iowrite8(val, priv->reg_base + reg); | 47 | iowrite8(val, priv->reg_base + reg); |
48 | } | 48 | } |
49 | 49 | ||
50 | static u8 sp_read_reg16(const struct sja1000_priv *priv, int reg) | ||
51 | { | ||
52 | return ioread8(priv->reg_base + reg * 2); | ||
53 | } | ||
54 | |||
55 | static void sp_write_reg16(const struct sja1000_priv *priv, int reg, u8 val) | ||
56 | { | ||
57 | iowrite8(val, priv->reg_base + reg * 2); | ||
58 | } | ||
59 | |||
60 | static u8 sp_read_reg32(const struct sja1000_priv *priv, int reg) | ||
61 | { | ||
62 | return ioread8(priv->reg_base + reg * 4); | ||
63 | } | ||
64 | |||
65 | static void sp_write_reg32(const struct sja1000_priv *priv, int reg, u8 val) | ||
66 | { | ||
67 | iowrite8(val, priv->reg_base + reg * 4); | ||
68 | } | ||
69 | |||
50 | static int sp_probe(struct platform_device *pdev) | 70 | static int sp_probe(struct platform_device *pdev) |
51 | { | 71 | { |
52 | int err; | 72 | int err; |
@@ -92,12 +112,26 @@ static int sp_probe(struct platform_device *pdev) | |||
92 | dev->irq = res_irq->start; | 112 | dev->irq = res_irq->start; |
93 | priv->irq_flags = res_irq->flags & (IRQF_TRIGGER_MASK | IRQF_SHARED); | 113 | priv->irq_flags = res_irq->flags & (IRQF_TRIGGER_MASK | IRQF_SHARED); |
94 | priv->reg_base = addr; | 114 | priv->reg_base = addr; |
95 | priv->read_reg = sp_read_reg; | ||
96 | priv->write_reg = sp_write_reg; | ||
97 | priv->can.clock.freq = pdata->clock; | 115 | priv->can.clock.freq = pdata->clock; |
98 | priv->ocr = pdata->ocr; | 116 | priv->ocr = pdata->ocr; |
99 | priv->cdr = pdata->cdr; | 117 | priv->cdr = pdata->cdr; |
100 | 118 | ||
119 | switch (res_mem->flags & IORESOURCE_MEM_TYPE_MASK) { | ||
120 | case IORESOURCE_MEM_32BIT: | ||
121 | priv->read_reg = sp_read_reg32; | ||
122 | priv->write_reg = sp_write_reg32; | ||
123 | break; | ||
124 | case IORESOURCE_MEM_16BIT: | ||
125 | priv->read_reg = sp_read_reg16; | ||
126 | priv->write_reg = sp_write_reg16; | ||
127 | break; | ||
128 | case IORESOURCE_MEM_8BIT: | ||
129 | default: | ||
130 | priv->read_reg = sp_read_reg8; | ||
131 | priv->write_reg = sp_write_reg8; | ||
132 | break; | ||
133 | } | ||
134 | |||
101 | dev_set_drvdata(&pdev->dev, dev); | 135 | dev_set_drvdata(&pdev->dev, dev); |
102 | SET_NETDEV_DEV(dev, &pdev->dev); | 136 | SET_NETDEV_DEV(dev, &pdev->dev); |
103 | 137 | ||