103 lines
2.0 KiB
C
103 lines
2.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2025 Nuvoton Technology Corp.
|
|
*
|
|
* Nuvoton NCT6694 USB transaction and data structure.
|
|
*/
|
|
|
|
#ifndef __MFD_NCT6694_H
|
|
#define __MFD_NCT6694_H
|
|
|
|
#define NCT6694_VENDOR_ID 0x0416
|
|
#define NCT6694_PRODUCT_ID 0x200B
|
|
#define NCT6694_INT_IN_EP 0x81
|
|
#define NCT6694_BULK_IN_EP 0x02
|
|
#define NCT6694_BULK_OUT_EP 0x03
|
|
|
|
#define NCT6694_HCTRL_SET 0x40
|
|
#define NCT6694_HCTRL_GET 0x80
|
|
|
|
#define NCT6694_URB_TIMEOUT 1000
|
|
|
|
enum nct6694_irq_id {
|
|
NCT6694_IRQ_GPIO0 = 0,
|
|
NCT6694_IRQ_GPIO1,
|
|
NCT6694_IRQ_GPIO2,
|
|
NCT6694_IRQ_GPIO3,
|
|
NCT6694_IRQ_GPIO4,
|
|
NCT6694_IRQ_GPIO5,
|
|
NCT6694_IRQ_GPIO6,
|
|
NCT6694_IRQ_GPIO7,
|
|
NCT6694_IRQ_GPIO8,
|
|
NCT6694_IRQ_GPIO9,
|
|
NCT6694_IRQ_GPIOA,
|
|
NCT6694_IRQ_GPIOB,
|
|
NCT6694_IRQ_GPIOC,
|
|
NCT6694_IRQ_GPIOD,
|
|
NCT6694_IRQ_GPIOE,
|
|
NCT6694_IRQ_GPIOF,
|
|
NCT6694_IRQ_CAN0,
|
|
NCT6694_IRQ_CAN1,
|
|
NCT6694_IRQ_RTC,
|
|
NCT6694_NR_IRQS,
|
|
};
|
|
|
|
enum nct6694_response_err_status {
|
|
NCT6694_NO_ERROR = 0,
|
|
NCT6694_FORMAT_ERROR,
|
|
NCT6694_RESERVED1,
|
|
NCT6694_RESERVED2,
|
|
NCT6694_NOT_SUPPORT_ERROR,
|
|
NCT6694_NO_RESPONSE_ERROR,
|
|
NCT6694_TIMEOUT_ERROR,
|
|
NCT6694_PENDING,
|
|
};
|
|
|
|
struct __packed nct6694_cmd_header {
|
|
u8 rsv1;
|
|
u8 mod;
|
|
union __packed {
|
|
__le16 offset;
|
|
struct __packed {
|
|
u8 cmd;
|
|
u8 sel;
|
|
};
|
|
};
|
|
u8 hctrl;
|
|
u8 rsv2;
|
|
__le16 len;
|
|
};
|
|
|
|
struct __packed nct6694_response_header {
|
|
u8 sequence_id;
|
|
u8 sts;
|
|
u8 reserved[4];
|
|
__le16 len;
|
|
};
|
|
|
|
union __packed nct6694_usb_msg {
|
|
struct nct6694_cmd_header cmd_header;
|
|
struct nct6694_response_header response_header;
|
|
};
|
|
|
|
struct nct6694 {
|
|
struct device *dev;
|
|
struct ida gpio_ida;
|
|
struct ida i2c_ida;
|
|
struct ida canfd_ida;
|
|
struct ida wdt_ida;
|
|
struct irq_domain *domain;
|
|
struct mutex access_lock;
|
|
spinlock_t irq_lock;
|
|
struct urb *int_in_urb;
|
|
struct usb_device *udev;
|
|
union nct6694_usb_msg *usb_msg;
|
|
__le32 *int_buffer;
|
|
unsigned int irq_enable;
|
|
};
|
|
|
|
int nct6694_read_msg(struct nct6694 *nct6694, const struct nct6694_cmd_header *cmd_hd, void *buf);
|
|
int nct6694_write_msg(struct nct6694 *nct6694, const struct nct6694_cmd_header *cmd_hd, void *buf);
|
|
|
|
#endif
|