at master 2.1 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2025 Nuvoton Technology Corp. 4 * 5 * Nuvoton NCT6694 USB transaction and data structure. 6 */ 7 8#ifndef __MFD_NCT6694_H 9#define __MFD_NCT6694_H 10 11#define NCT6694_VENDOR_ID 0x0416 12#define NCT6694_PRODUCT_ID 0x200B 13#define NCT6694_INT_IN_EP 0x81 14#define NCT6694_BULK_IN_EP 0x02 15#define NCT6694_BULK_OUT_EP 0x03 16 17#define NCT6694_HCTRL_SET 0x40 18#define NCT6694_HCTRL_GET 0x80 19 20#define NCT6694_URB_TIMEOUT 1000 21 22enum nct6694_irq_id { 23 NCT6694_IRQ_GPIO0 = 0, 24 NCT6694_IRQ_GPIO1, 25 NCT6694_IRQ_GPIO2, 26 NCT6694_IRQ_GPIO3, 27 NCT6694_IRQ_GPIO4, 28 NCT6694_IRQ_GPIO5, 29 NCT6694_IRQ_GPIO6, 30 NCT6694_IRQ_GPIO7, 31 NCT6694_IRQ_GPIO8, 32 NCT6694_IRQ_GPIO9, 33 NCT6694_IRQ_GPIOA, 34 NCT6694_IRQ_GPIOB, 35 NCT6694_IRQ_GPIOC, 36 NCT6694_IRQ_GPIOD, 37 NCT6694_IRQ_GPIOE, 38 NCT6694_IRQ_GPIOF, 39 NCT6694_IRQ_CAN0, 40 NCT6694_IRQ_CAN1, 41 NCT6694_IRQ_RTC, 42 NCT6694_NR_IRQS, 43}; 44 45enum nct6694_response_err_status { 46 NCT6694_NO_ERROR = 0, 47 NCT6694_FORMAT_ERROR, 48 NCT6694_RESERVED1, 49 NCT6694_RESERVED2, 50 NCT6694_NOT_SUPPORT_ERROR, 51 NCT6694_NO_RESPONSE_ERROR, 52 NCT6694_TIMEOUT_ERROR, 53 NCT6694_PENDING, 54}; 55 56struct __packed nct6694_cmd_header { 57 u8 rsv1; 58 u8 mod; 59 union __packed { 60 __le16 offset; 61 struct __packed { 62 u8 cmd; 63 u8 sel; 64 }; 65 }; 66 u8 hctrl; 67 u8 rsv2; 68 __le16 len; 69}; 70 71struct __packed nct6694_response_header { 72 u8 sequence_id; 73 u8 sts; 74 u8 reserved[4]; 75 __le16 len; 76}; 77 78union __packed nct6694_usb_msg { 79 struct nct6694_cmd_header cmd_header; 80 struct nct6694_response_header response_header; 81}; 82 83struct nct6694 { 84 struct device *dev; 85 struct ida gpio_ida; 86 struct ida i2c_ida; 87 struct ida canfd_ida; 88 struct ida wdt_ida; 89 struct irq_domain *domain; 90 struct mutex access_lock; 91 spinlock_t irq_lock; 92 struct urb *int_in_urb; 93 struct usb_device *udev; 94 union nct6694_usb_msg *usb_msg; 95 __le32 *int_buffer; 96 unsigned int irq_enable; 97}; 98 99int nct6694_read_msg(struct nct6694 *nct6694, const struct nct6694_cmd_header *cmd_hd, void *buf); 100int nct6694_write_msg(struct nct6694 *nct6694, const struct nct6694_cmd_header *cmd_hd, void *buf); 101 102#endif