@@ -705,6 +705,9 @@ struct sensor_read_config {
705
705
/* Used to submit an RTIO sqe to the sensor's iodev */
706
706
typedef void (* sensor_submit_t )(const struct device * sensor , struct rtio_iodev_sqe * sqe );
707
707
708
+ /* Used to provide a driver specific callback to upload a f/w in the sensor */
709
+ typedef int (* sensor_upload_fw_t )(const struct device * dev , const void * fw_buf , size_t fw_len );
710
+
708
711
/* The default decoder API */
709
712
extern const struct sensor_decoder_api __sensor_default_decoder ;
710
713
@@ -719,6 +722,7 @@ __subsystem struct sensor_driver_api {
719
722
sensor_channel_get_t channel_get ;
720
723
sensor_get_decoder_t get_decoder ;
721
724
sensor_submit_t submit ;
725
+ sensor_upload_fw_t upload_fw ;
722
726
};
723
727
724
728
/**
@@ -1004,6 +1008,32 @@ static inline int z_impl_sensor_get_decoder(const struct device *dev,
1004
1008
return api -> get_decoder (dev , decoder );
1005
1009
}
1006
1010
1011
+ /**
1012
+ * @brief Upload a Firmware to the sensor
1013
+ *
1014
+ * @param[in] dev The sensor device
1015
+ * @param[in] fw_buf Pointer to the Firmware buffer
1016
+ * @param[in] fw_len Length of Firmware
1017
+ * @return 0 on success
1018
+ * @return < 0 on error
1019
+ */
1020
+ __syscall int sensor_upload_fw (const struct device * dev ,
1021
+ const void * fw_buf , size_t fw_len );
1022
+
1023
+ static inline int z_impl_sensor_upload_fw (const struct device * dev ,
1024
+ const void * fw_buf , size_t fw_len )
1025
+ {
1026
+ const struct sensor_driver_api * api = (const struct sensor_driver_api * )dev -> api ;
1027
+
1028
+ __ASSERT_NO_MSG (api != NULL );
1029
+
1030
+ if (api -> upload_fw == NULL ) {
1031
+ return - ENOSYS ;
1032
+ }
1033
+
1034
+ return api -> upload_fw (dev , fw_buf , fw_len );
1035
+ }
1036
+
1007
1037
/**
1008
1038
* @brief Reconfigure a reading iodev
1009
1039
*
0 commit comments