]> www.infradead.org Git - users/willy/linux.git/commitdiff
turris-omnia-mcu-interface.h: Move command execution function to global header
authorMarek BehĂșn <kabel@kernel.org>
Mon, 11 Nov 2024 10:03:45 +0000 (11:03 +0100)
committerLee Jones <lee@kernel.org>
Thu, 12 Dec 2024 18:36:07 +0000 (18:36 +0000)
Move the command execution functions from the turris-omnia-mcu platform
driver private header to the global turris-omnia-mcu-interface.h header,
so that they can be used by the LED driver.

Signed-off-by: Marek BehĂșn <kabel@kernel.org>
Link: https://lore.kernel.org/r/20241111100355.6978-2-kabel@kernel.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/platform/cznic/turris-omnia-mcu-base.c
drivers/platform/cznic/turris-omnia-mcu.h
include/linux/turris-omnia-mcu-interface.h

index 58f9afae28673753eed1ad5aebb51529ab8849e6..bb871226e357c205de56fa5b41148ed9a4878907 100644 (file)
@@ -52,6 +52,7 @@ int omnia_cmd_write_read(const struct i2c_client *client,
 
        return 0;
 }
+EXPORT_SYMBOL_GPL(omnia_cmd_write_read);
 
 static int omnia_get_version_hash(struct omnia_mcu *mcu, bool bootloader,
                                  char version[static OMNIA_FW_VERSION_HEX_LEN])
index 2b13e28ee323b3058d9f2b603e3f6084a4413333..088541be3f4cc045cbce5b5aaeaac8eb6162a8d3 100644 (file)
@@ -8,7 +8,6 @@
 #ifndef __TURRIS_OMNIA_MCU_H
 #define __TURRIS_OMNIA_MCU_H
 
-#include <linux/bitops.h>
 #include <linux/completion.h>
 #include <linux/gpio/driver.h>
 #include <linux/hw_random.h>
@@ -17,8 +16,6 @@
 #include <linux/types.h>
 #include <linux/watchdog.h>
 #include <linux/workqueue.h>
-#include <asm/byteorder.h>
-#include <linux/unaligned.h>
 
 struct i2c_client;
 struct rtc_device;
@@ -93,133 +90,6 @@ struct omnia_mcu {
 #endif
 };
 
-int omnia_cmd_write_read(const struct i2c_client *client,
-                        void *cmd, unsigned int cmd_len,
-                        void *reply, unsigned int reply_len);
-
-static inline int omnia_cmd_write(const struct i2c_client *client, void *cmd,
-                                 unsigned int len)
-{
-       return omnia_cmd_write_read(client, cmd, len, NULL, 0);
-}
-
-static inline int omnia_cmd_write_u8(const struct i2c_client *client, u8 cmd,
-                                    u8 val)
-{
-       u8 buf[2] = { cmd, val };
-
-       return omnia_cmd_write(client, buf, sizeof(buf));
-}
-
-static inline int omnia_cmd_write_u16(const struct i2c_client *client, u8 cmd,
-                                     u16 val)
-{
-       u8 buf[3];
-
-       buf[0] = cmd;
-       put_unaligned_le16(val, &buf[1]);
-
-       return omnia_cmd_write(client, buf, sizeof(buf));
-}
-
-static inline int omnia_cmd_write_u32(const struct i2c_client *client, u8 cmd,
-                                     u32 val)
-{
-       u8 buf[5];
-
-       buf[0] = cmd;
-       put_unaligned_le32(val, &buf[1]);
-
-       return omnia_cmd_write(client, buf, sizeof(buf));
-}
-
-static inline int omnia_cmd_read(const struct i2c_client *client, u8 cmd,
-                                void *reply, unsigned int len)
-{
-       return omnia_cmd_write_read(client, &cmd, 1, reply, len);
-}
-
-static inline unsigned int
-omnia_compute_reply_length(unsigned long mask, bool interleaved,
-                          unsigned int offset)
-{
-       if (!mask)
-               return 0;
-
-       return ((__fls(mask) >> 3) << interleaved) + 1 + offset;
-}
-
-/* Returns 0 on success */
-static inline int omnia_cmd_read_bits(const struct i2c_client *client, u8 cmd,
-                                     unsigned long bits, unsigned long *dst)
-{
-       __le32 reply;
-       int err;
-
-       if (!bits) {
-               *dst = 0;
-               return 0;
-       }
-
-       err = omnia_cmd_read(client, cmd, &reply,
-                            omnia_compute_reply_length(bits, false, 0));
-       if (err)
-               return err;
-
-       *dst = le32_to_cpu(reply) & bits;
-
-       return 0;
-}
-
-static inline int omnia_cmd_read_bit(const struct i2c_client *client, u8 cmd,
-                                    unsigned long bit)
-{
-       unsigned long reply;
-       int err;
-
-       err = omnia_cmd_read_bits(client, cmd, bit, &reply);
-       if (err)
-               return err;
-
-       return !!reply;
-}
-
-static inline int omnia_cmd_read_u32(const struct i2c_client *client, u8 cmd,
-                                    u32 *dst)
-{
-       __le32 reply;
-       int err;
-
-       err = omnia_cmd_read(client, cmd, &reply, sizeof(reply));
-       if (err)
-               return err;
-
-       *dst = le32_to_cpu(reply);
-
-       return 0;
-}
-
-static inline int omnia_cmd_read_u16(const struct i2c_client *client, u8 cmd,
-                                    u16 *dst)
-{
-       __le16 reply;
-       int err;
-
-       err = omnia_cmd_read(client, cmd, &reply, sizeof(reply));
-       if (err)
-               return err;
-
-       *dst = le16_to_cpu(reply);
-
-       return 0;
-}
-
-static inline int omnia_cmd_read_u8(const struct i2c_client *client, u8 cmd,
-                                   u8 *reply)
-{
-       return omnia_cmd_read(client, cmd, reply, sizeof(*reply));
-}
-
 #ifdef CONFIG_TURRIS_OMNIA_MCU_GPIO
 extern const u8 omnia_int_to_gpio_idx[32];
 extern const struct attribute_group omnia_mcu_gpio_group;
index 2da8cbeb158a7643c000c06f41656881c801298b..7f24cc6827808a110fdd3be3dccb29bbef0683a7 100644 (file)
@@ -9,7 +9,10 @@
 #define __TURRIS_OMNIA_MCU_INTERFACE_H
 
 #include <linux/bitfield.h>
-#include <linux/bits.h>
+#include <linux/bitops.h>
+#include <linux/types.h>
+#include <linux/unaligned.h>
+#include <asm/byteorder.h>
 
 enum omnia_commands_e {
        OMNIA_CMD_GET_STATUS_WORD               = 0x01, /* slave sends status word back */
@@ -246,4 +249,135 @@ enum omnia_cmd_usb_ovc_prot_e {
        OMNIA_CMD_xET_USB_OVC_PROT_ENABLE       = BIT(4),
 };
 
+/* Command execution functions */
+
+struct i2c_client;
+
+int omnia_cmd_write_read(const struct i2c_client *client,
+                        void *cmd, unsigned int cmd_len,
+                        void *reply, unsigned int reply_len);
+
+static inline int omnia_cmd_write(const struct i2c_client *client, void *cmd,
+                                 unsigned int len)
+{
+       return omnia_cmd_write_read(client, cmd, len, NULL, 0);
+}
+
+static inline int omnia_cmd_write_u8(const struct i2c_client *client, u8 cmd,
+                                    u8 val)
+{
+       u8 buf[2] = { cmd, val };
+
+       return omnia_cmd_write(client, buf, sizeof(buf));
+}
+
+static inline int omnia_cmd_write_u16(const struct i2c_client *client, u8 cmd,
+                                     u16 val)
+{
+       u8 buf[3];
+
+       buf[0] = cmd;
+       put_unaligned_le16(val, &buf[1]);
+
+       return omnia_cmd_write(client, buf, sizeof(buf));
+}
+
+static inline int omnia_cmd_write_u32(const struct i2c_client *client, u8 cmd,
+                                     u32 val)
+{
+       u8 buf[5];
+
+       buf[0] = cmd;
+       put_unaligned_le32(val, &buf[1]);
+
+       return omnia_cmd_write(client, buf, sizeof(buf));
+}
+
+static inline int omnia_cmd_read(const struct i2c_client *client, u8 cmd,
+                                void *reply, unsigned int len)
+{
+       return omnia_cmd_write_read(client, &cmd, 1, reply, len);
+}
+
+static inline unsigned int
+omnia_compute_reply_length(unsigned long mask, bool interleaved,
+                          unsigned int offset)
+{
+       if (!mask)
+               return 0;
+
+       return ((__fls(mask) >> 3) << interleaved) + 1 + offset;
+}
+
+/* Returns 0 on success */
+static inline int omnia_cmd_read_bits(const struct i2c_client *client, u8 cmd,
+                                     unsigned long bits, unsigned long *dst)
+{
+       __le32 reply;
+       int err;
+
+       if (!bits) {
+               *dst = 0;
+               return 0;
+       }
+
+       err = omnia_cmd_read(client, cmd, &reply,
+                            omnia_compute_reply_length(bits, false, 0));
+       if (err)
+               return err;
+
+       *dst = le32_to_cpu(reply) & bits;
+
+       return 0;
+}
+
+static inline int omnia_cmd_read_bit(const struct i2c_client *client, u8 cmd,
+                                    unsigned long bit)
+{
+       unsigned long reply;
+       int err;
+
+       err = omnia_cmd_read_bits(client, cmd, bit, &reply);
+       if (err)
+               return err;
+
+       return !!reply;
+}
+
+static inline int omnia_cmd_read_u32(const struct i2c_client *client, u8 cmd,
+                                    u32 *dst)
+{
+       __le32 reply;
+       int err;
+
+       err = omnia_cmd_read(client, cmd, &reply, sizeof(reply));
+       if (err)
+               return err;
+
+       *dst = le32_to_cpu(reply);
+
+       return 0;
+}
+
+static inline int omnia_cmd_read_u16(const struct i2c_client *client, u8 cmd,
+                                    u16 *dst)
+{
+       __le16 reply;
+       int err;
+
+       err = omnia_cmd_read(client, cmd, &reply, sizeof(reply));
+       if (err)
+               return err;
+
+       *dst = le16_to_cpu(reply);
+
+       return 0;
+}
+
+static inline int omnia_cmd_read_u8(const struct i2c_client *client, u8 cmd,
+                                   u8 *reply)
+{
+       return omnia_cmd_read(client, cmd, reply, sizeof(*reply));
+}
+
 #endif /* __TURRIS_OMNIA_MCU_INTERFACE_H */