167def4efSMarc Kleine-Budde /* SPDX-License-Identifier: GPL-2.0 267def4efSMarc Kleine-Budde * 367def4efSMarc Kleine-Budde * tcan4x5x - Texas Instruments TCAN4x5x Family CAN controller driver 467def4efSMarc Kleine-Budde * 567def4efSMarc Kleine-Budde * Copyright (c) 2020 Pengutronix, 667def4efSMarc Kleine-Budde * Marc Kleine-Budde <kernel@pengutronix.de> 767def4efSMarc Kleine-Budde */ 867def4efSMarc Kleine-Budde 967def4efSMarc Kleine-Budde #ifndef _TCAN4X5X_H 1067def4efSMarc Kleine-Budde #define _TCAN4X5X_H 1167def4efSMarc Kleine-Budde 1267def4efSMarc Kleine-Budde #include <linux/gpio/consumer.h> 1367def4efSMarc Kleine-Budde #include <linux/regmap.h> 1467def4efSMarc Kleine-Budde #include <linux/regulator/consumer.h> 1567def4efSMarc Kleine-Budde #include <linux/spi/spi.h> 1667def4efSMarc Kleine-Budde 1767def4efSMarc Kleine-Budde #include "m_can.h" 1867def4efSMarc Kleine-Budde 191c5d0fc4SMarc Kleine-Budde #define TCAN4X5X_SANITIZE_SPI 1 201c5d0fc4SMarc Kleine-Budde 211c5d0fc4SMarc Kleine-Budde struct __packed tcan4x5x_buf_cmd { 221c5d0fc4SMarc Kleine-Budde u8 cmd; 231c5d0fc4SMarc Kleine-Budde __be16 addr; 241c5d0fc4SMarc Kleine-Budde u8 len; 251c5d0fc4SMarc Kleine-Budde }; 261c5d0fc4SMarc Kleine-Budde 27*1105592cSMarc Kleine-Budde struct tcan4x5x_map_buf { 281c5d0fc4SMarc Kleine-Budde struct tcan4x5x_buf_cmd cmd; 291c5d0fc4SMarc Kleine-Budde u8 data[256 * sizeof(u32)]; 301c5d0fc4SMarc Kleine-Budde } ____cacheline_aligned; 311c5d0fc4SMarc Kleine-Budde 3267def4efSMarc Kleine-Budde struct tcan4x5x_priv { 3367def4efSMarc Kleine-Budde struct m_can_classdev cdev; 3467def4efSMarc Kleine-Budde 3567def4efSMarc Kleine-Budde struct regmap *regmap; 3667def4efSMarc Kleine-Budde struct spi_device *spi; 3767def4efSMarc Kleine-Budde 3867def4efSMarc Kleine-Budde struct gpio_desc *reset_gpio; 3967def4efSMarc Kleine-Budde struct gpio_desc *device_wake_gpio; 4067def4efSMarc Kleine-Budde struct gpio_desc *device_state_gpio; 4167def4efSMarc Kleine-Budde struct regulator *power; 421c5d0fc4SMarc Kleine-Budde 431c5d0fc4SMarc Kleine-Budde struct tcan4x5x_map_buf map_buf_rx; 441c5d0fc4SMarc Kleine-Budde struct tcan4x5x_map_buf map_buf_tx; 4567def4efSMarc Kleine-Budde }; 4667def4efSMarc Kleine-Budde 471c5d0fc4SMarc Kleine-Budde static inline void tcan4x5x_spi_cmd_set_len(struct tcan4x5x_buf_cmd * cmd,u8 len)481c5d0fc4SMarc Kleine-Buddetcan4x5x_spi_cmd_set_len(struct tcan4x5x_buf_cmd *cmd, u8 len) 491c5d0fc4SMarc Kleine-Budde { 501c5d0fc4SMarc Kleine-Budde /* number of u32 */ 511c5d0fc4SMarc Kleine-Budde cmd->len = len >> 2; 521c5d0fc4SMarc Kleine-Budde } 531c5d0fc4SMarc Kleine-Budde 5467def4efSMarc Kleine-Budde int tcan4x5x_regmap_init(struct tcan4x5x_priv *priv); 5567def4efSMarc Kleine-Budde 5667def4efSMarc Kleine-Budde #endif 57