aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/can
diff options
context:
space:
mode:
authorYegor Yefremov <yegor_sub1@visionsystems.de>2010-03-18 20:50:44 -0400
committerDavid S. Miller <davem@davemloft.net>2010-03-21 23:33:37 -0400
commit986917b7b7570f889fa9c8c54962a9f2c3b32bf4 (patch)
treed96a4bf278ea05db315f2985903182fd6b5a48e4 /drivers/net/can
parentabde89d7f57adfae5a43f086b45e5746be16e3f0 (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>
Diffstat (limited to 'drivers/net/can')
-rw-r--r--drivers/net/can/sja1000/sja1000_platform.c42
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>");
37MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus"); 37MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus");
38MODULE_LICENSE("GPL v2"); 38MODULE_LICENSE("GPL v2");
39 39
40static u8 sp_read_reg(const struct sja1000_priv *priv, int reg) 40static 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
45static void sp_write_reg(const struct sja1000_priv *priv, int reg, u8 val) 45static 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
50static u8 sp_read_reg16(const struct sja1000_priv *priv, int reg)
51{
52 return ioread8(priv->reg_base + reg * 2);
53}
54
55static void sp_write_reg16(const struct sja1000_priv *priv, int reg, u8 val)
56{
57 iowrite8(val, priv->reg_base + reg * 2);
58}
59
60static u8 sp_read_reg32(const struct sja1000_priv *priv, int reg)
61{
62 return ioread8(priv->reg_base + reg * 4);
63}
64
65static void sp_write_reg32(const struct sja1000_priv *priv, int reg, u8 val)
66{
67 iowrite8(val, priv->reg_base + reg * 4);
68}
69
50static int sp_probe(struct platform_device *pdev) 70static 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