Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

can: tcan4x5x: move regmap code into seperate file

This patch moves the regmap code into a seperate file.

Reviewed-by: Dan Murphy <dmurphy@ti.com>
Tested-by: Sean Nyekjaer <sean@geanix.com>
Link: https://lore.kernel.org/r/20201215231746.1132907-5-mkl@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

+133 -101
+1
drivers/net/can/m_can/Makefile
··· 10 10 11 11 tcan4x5x-objs := 12 12 tcan4x5x-objs += tcan4x5x-core.o 13 + tcan4x5x-objs += tcan4x5x-regmap.o
+3 -101
drivers/net/can/m_can/tcan4x5x-core.c
··· 2 2 // SPI to CAN driver for the Texas Instruments TCAN4x5x 3 3 // Copyright (C) 2018-19 Texas Instruments Incorporated - http://www.ti.com/ 4 4 5 - #include <linux/regmap.h> 6 - #include <linux/spi/spi.h> 7 - 8 - #include <linux/regulator/consumer.h> 9 - #include <linux/gpio/consumer.h> 10 - 11 - #include "m_can.h" 5 + #include "tcan4x5x.h" 12 6 13 7 #define TCAN4X5X_EXT_CLK_DEF 40000000 14 8 ··· 81 87 82 88 #define TCAN4X5X_MRAM_START 0x8000 83 89 #define TCAN4X5X_MCAN_OFFSET 0x1000 84 - #define TCAN4X5X_MAX_REGISTER 0x8fff 85 90 86 91 #define TCAN4X5X_CLEAR_ALL_INT 0xffffffff 87 92 #define TCAN4X5X_SET_ALL_INT 0xffffffff 88 - 89 - #define TCAN4X5X_WRITE_CMD (0x61 << 24) 90 - #define TCAN4X5X_READ_CMD (0x41 << 24) 91 93 92 94 #define TCAN4X5X_MODE_SEL_MASK (BIT(7) | BIT(6)) 93 95 #define TCAN4X5X_MODE_SLEEP 0x00 ··· 101 111 #define TCAN4X5X_WD_600_MS_TIMER BIT(28) 102 112 #define TCAN4X5X_WD_3_S_TIMER BIT(29) 103 113 #define TCAN4X5X_WD_6_S_TIMER (BIT(28) | BIT(29)) 104 - 105 - struct tcan4x5x_priv { 106 - struct m_can_classdev cdev; 107 - 108 - struct regmap *regmap; 109 - struct spi_device *spi; 110 - 111 - struct gpio_desc *reset_gpio; 112 - struct gpio_desc *device_wake_gpio; 113 - struct gpio_desc *device_state_gpio; 114 - struct regulator *power; 115 - }; 116 114 117 115 static inline struct tcan4x5x_priv *cdev_to_priv(struct m_can_classdev *cdev) 118 116 { ··· 167 189 168 190 return ret; 169 191 } 170 - 171 - static int regmap_spi_gather_write(void *context, const void *reg, 172 - size_t reg_len, const void *val, 173 - size_t val_len) 174 - { 175 - struct device *dev = context; 176 - struct spi_device *spi = to_spi_device(dev); 177 - struct spi_message m; 178 - u32 addr; 179 - struct spi_transfer t[2] = { 180 - { .tx_buf = &addr, .len = reg_len, .cs_change = 0,}, 181 - { .tx_buf = val, .len = val_len, }, 182 - }; 183 - 184 - addr = TCAN4X5X_WRITE_CMD | (*((u16 *)reg) << 8) | val_len >> 2; 185 - 186 - spi_message_init(&m); 187 - spi_message_add_tail(&t[0], &m); 188 - spi_message_add_tail(&t[1], &m); 189 - 190 - return spi_sync(spi, &m); 191 - } 192 - 193 - static int tcan4x5x_regmap_write(void *context, const void *data, size_t count) 194 - { 195 - u16 *reg = (u16 *)(data); 196 - const u32 *val = data + 4; 197 - 198 - return regmap_spi_gather_write(context, reg, 4, val, count - 4); 199 - } 200 - 201 - static int regmap_spi_async_write(void *context, 202 - const void *reg, size_t reg_len, 203 - const void *val, size_t val_len, 204 - struct regmap_async *a) 205 - { 206 - return -ENOTSUPP; 207 - } 208 - 209 - static struct regmap_async *regmap_spi_async_alloc(void) 210 - { 211 - return NULL; 212 - } 213 - 214 - static int tcan4x5x_regmap_read(void *context, 215 - const void *reg, size_t reg_size, 216 - void *val, size_t val_size) 217 - { 218 - struct device *dev = context; 219 - struct spi_device *spi = to_spi_device(dev); 220 - 221 - u32 addr = TCAN4X5X_READ_CMD | (*((u16 *)reg) << 8) | val_size >> 2; 222 - 223 - return spi_write_then_read(spi, &addr, reg_size, (u32 *)val, val_size); 224 - } 225 - 226 - static struct regmap_bus tcan4x5x_bus = { 227 - .write = tcan4x5x_regmap_write, 228 - .gather_write = regmap_spi_gather_write, 229 - .async_write = regmap_spi_async_write, 230 - .async_alloc = regmap_spi_async_alloc, 231 - .read = tcan4x5x_regmap_read, 232 - .read_flag_mask = 0x00, 233 - .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, 234 - .val_format_endian_default = REGMAP_ENDIAN_NATIVE, 235 - }; 236 192 237 193 static u32 tcan4x5x_read_reg(struct m_can_classdev *cdev, int reg) 238 194 { ··· 322 410 return 0; 323 411 } 324 412 325 - static const struct regmap_config tcan4x5x_regmap = { 326 - .reg_bits = 32, 327 - .val_bits = 32, 328 - .cache_type = REGCACHE_NONE, 329 - .max_register = TCAN4X5X_MAX_REGISTER, 330 - }; 331 - 332 413 static struct m_can_ops tcan4x5x_ops = { 333 414 .init = tcan4x5x_init, 334 415 .read_reg = tcan4x5x_read_reg, ··· 385 480 if (ret) 386 481 goto out_m_can_class_free_dev; 387 482 388 - priv->regmap = devm_regmap_init(&spi->dev, &tcan4x5x_bus, 389 - &spi->dev, &tcan4x5x_regmap); 390 - if (IS_ERR(priv->regmap)) { 391 - ret = PTR_ERR(priv->regmap); 483 + ret = tcan4x5x_regmap_init(priv); 484 + if (ret) 392 485 goto out_m_can_class_free_dev; 393 - } 394 486 395 487 ret = tcan4x5x_power_enable(priv->power, 1); 396 488 if (ret)
+95
drivers/net/can/m_can/tcan4x5x-regmap.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + // 3 + // tcan4x5x - Texas Instruments TCAN4x5x Family CAN controller driver 4 + // 5 + // Copyright (c) 2020 Pengutronix, 6 + // Marc Kleine-Budde <kernel@pengutronix.de> 7 + // Copyright (c) 2018-2019 Texas Instruments Incorporated 8 + // http://www.ti.com/ 9 + 10 + #include "tcan4x5x.h" 11 + 12 + #define TCAN4X5X_WRITE_CMD (0x61 << 24) 13 + #define TCAN4X5X_READ_CMD (0x41 << 24) 14 + 15 + #define TCAN4X5X_MAX_REGISTER 0x8fff 16 + 17 + static int regmap_spi_gather_write(void *context, const void *reg, 18 + size_t reg_len, const void *val, 19 + size_t val_len) 20 + { 21 + struct device *dev = context; 22 + struct spi_device *spi = to_spi_device(dev); 23 + struct spi_message m; 24 + u32 addr; 25 + struct spi_transfer t[2] = { 26 + { .tx_buf = &addr, .len = reg_len, .cs_change = 0,}, 27 + { .tx_buf = val, .len = val_len, }, 28 + }; 29 + 30 + addr = TCAN4X5X_WRITE_CMD | (*((u16 *)reg) << 8) | val_len >> 2; 31 + 32 + spi_message_init(&m); 33 + spi_message_add_tail(&t[0], &m); 34 + spi_message_add_tail(&t[1], &m); 35 + 36 + return spi_sync(spi, &m); 37 + } 38 + 39 + static int tcan4x5x_regmap_write(void *context, const void *data, size_t count) 40 + { 41 + u16 *reg = (u16 *)(data); 42 + const u32 *val = data + 4; 43 + 44 + return regmap_spi_gather_write(context, reg, 4, val, count - 4); 45 + } 46 + 47 + static int regmap_spi_async_write(void *context, 48 + const void *reg, size_t reg_len, 49 + const void *val, size_t val_len, 50 + struct regmap_async *a) 51 + { 52 + return -ENOTSUPP; 53 + } 54 + 55 + static struct regmap_async *regmap_spi_async_alloc(void) 56 + { 57 + return NULL; 58 + } 59 + 60 + static int tcan4x5x_regmap_read(void *context, 61 + const void *reg, size_t reg_size, 62 + void *val, size_t val_size) 63 + { 64 + struct device *dev = context; 65 + struct spi_device *spi = to_spi_device(dev); 66 + 67 + u32 addr = TCAN4X5X_READ_CMD | (*((u16 *)reg) << 8) | val_size >> 2; 68 + 69 + return spi_write_then_read(spi, &addr, reg_size, (u32 *)val, val_size); 70 + } 71 + 72 + static const struct regmap_config tcan4x5x_regmap = { 73 + .reg_bits = 32, 74 + .val_bits = 32, 75 + .cache_type = REGCACHE_NONE, 76 + .max_register = TCAN4X5X_MAX_REGISTER, 77 + }; 78 + 79 + static struct regmap_bus tcan4x5x_bus = { 80 + .write = tcan4x5x_regmap_write, 81 + .gather_write = regmap_spi_gather_write, 82 + .async_write = regmap_spi_async_write, 83 + .async_alloc = regmap_spi_async_alloc, 84 + .read = tcan4x5x_regmap_read, 85 + .read_flag_mask = 0x00, 86 + .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, 87 + .val_format_endian_default = REGMAP_ENDIAN_NATIVE, 88 + }; 89 + 90 + int tcan4x5x_regmap_init(struct tcan4x5x_priv *priv) 91 + { 92 + priv->regmap = devm_regmap_init(&priv->spi->dev, &tcan4x5x_bus, 93 + &priv->spi->dev, &tcan4x5x_regmap); 94 + return PTR_ERR_OR_ZERO(priv->regmap); 95 + }
+34
drivers/net/can/m_can/tcan4x5x.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 2 + * 3 + * tcan4x5x - Texas Instruments TCAN4x5x Family CAN controller driver 4 + * 5 + * Copyright (c) 2020 Pengutronix, 6 + * Marc Kleine-Budde <kernel@pengutronix.de> 7 + */ 8 + 9 + #ifndef _TCAN4X5X_H 10 + #define _TCAN4X5X_H 11 + 12 + #include <linux/gpio/consumer.h> 13 + #include <linux/regmap.h> 14 + #include <linux/regmap.h> 15 + #include <linux/regulator/consumer.h> 16 + #include <linux/spi/spi.h> 17 + 18 + #include "m_can.h" 19 + 20 + struct tcan4x5x_priv { 21 + struct m_can_classdev cdev; 22 + 23 + struct regmap *regmap; 24 + struct spi_device *spi; 25 + 26 + struct gpio_desc *reset_gpio; 27 + struct gpio_desc *device_wake_gpio; 28 + struct gpio_desc *device_state_gpio; 29 + struct regulator *power; 30 + }; 31 + 32 + int tcan4x5x_regmap_init(struct tcan4x5x_priv *priv); 33 + 34 + #endif