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