141845541SPeng Fan /* SPDX-License-Identifier: GPL-2.0-only */
241845541SPeng Fan /*
341845541SPeng Fan  * SCMI Message Protocol driver NXP extension header
441845541SPeng Fan  *
541845541SPeng Fan  * Copyright 2024 NXP.
641845541SPeng Fan  */
741845541SPeng Fan 
841845541SPeng Fan #ifndef _LINUX_SCMI_NXP_PROTOCOL_H
941845541SPeng Fan #define _LINUX_SCMI_NXP_PROTOCOL_H
1041845541SPeng Fan 
1141845541SPeng Fan #include <linux/bitfield.h>
1241845541SPeng Fan #include <linux/device.h>
1341845541SPeng Fan #include <linux/notifier.h>
1441845541SPeng Fan #include <linux/types.h>
1541845541SPeng Fan 
16*d4cc8912SCristian Marussi #define	SCMI_PROTOCOL_IMX_BBM	0x81
17*d4cc8912SCristian Marussi #define	SCMI_PROTOCOL_IMX_MISC	0x84
18*d4cc8912SCristian Marussi 
19*d4cc8912SCristian Marussi #define SCMI_IMX_VENDOR		"NXP"
20*d4cc8912SCristian Marussi #define SCMI_IMX_SUBVENDOR	"IMX"
2141845541SPeng Fan 
2241845541SPeng Fan struct scmi_imx_bbm_proto_ops {
2341845541SPeng Fan 	int (*rtc_time_set)(const struct scmi_protocol_handle *ph, u32 id,
2441845541SPeng Fan 			    uint64_t sec);
2541845541SPeng Fan 	int (*rtc_time_get)(const struct scmi_protocol_handle *ph, u32 id,
2641845541SPeng Fan 			    u64 *val);
2741845541SPeng Fan 	int (*rtc_alarm_set)(const struct scmi_protocol_handle *ph, u32 id,
2841845541SPeng Fan 			     bool enable, u64 sec);
2941845541SPeng Fan 	int (*button_get)(const struct scmi_protocol_handle *ph, u32 *state);
3041845541SPeng Fan };
3141845541SPeng Fan 
3241845541SPeng Fan enum scmi_nxp_notification_events {
3341845541SPeng Fan 	SCMI_EVENT_IMX_BBM_RTC = 0x0,
3441845541SPeng Fan 	SCMI_EVENT_IMX_BBM_BUTTON = 0x1,
3561c9f03eSPeng Fan 	SCMI_EVENT_IMX_MISC_CONTROL = 0x0,
3641845541SPeng Fan };
3741845541SPeng Fan 
3841845541SPeng Fan struct scmi_imx_bbm_notif_report {
3941845541SPeng Fan 	bool			is_rtc;
4041845541SPeng Fan 	bool			is_button;
4141845541SPeng Fan 	ktime_t			timestamp;
4241845541SPeng Fan 	unsigned int		rtc_id;
4341845541SPeng Fan 	unsigned int		rtc_evt;
4441845541SPeng Fan };
4561c9f03eSPeng Fan 
4661c9f03eSPeng Fan struct scmi_imx_misc_ctrl_notify_report {
4761c9f03eSPeng Fan 	ktime_t			timestamp;
4861c9f03eSPeng Fan 	unsigned int		ctrl_id;
4961c9f03eSPeng Fan 	unsigned int		flags;
5061c9f03eSPeng Fan };
5161c9f03eSPeng Fan 
5261c9f03eSPeng Fan struct scmi_imx_misc_proto_ops {
5361c9f03eSPeng Fan 	int (*misc_ctrl_set)(const struct scmi_protocol_handle *ph, u32 id,
5461c9f03eSPeng Fan 			     u32 num, u32 *val);
5561c9f03eSPeng Fan 	int (*misc_ctrl_get)(const struct scmi_protocol_handle *ph, u32 id,
5661c9f03eSPeng Fan 			     u32 *num, u32 *val);
5761c9f03eSPeng Fan 	int (*misc_ctrl_req_notify)(const struct scmi_protocol_handle *ph,
5861c9f03eSPeng Fan 				    u32 ctrl_id, u32 evt_id, u32 flags);
5961c9f03eSPeng Fan };
6041845541SPeng Fan #endif
61