@@ -818,6 +818,28 @@ static int usb_write_otp(struct bladerf *dev, char *otp)
818818 return status == 0 ? restore_status : status ;
819819}
820820
821+ static int usb_lock_otp (struct bladerf * dev )
822+ {
823+ int status , restore_status , commit_status ;
824+
825+ status = change_setting (dev , USB_IF_SPI_FLASH );
826+ if (status ) {
827+ return status ;
828+ }
829+
830+ status = vendor_cmd_int_windex (dev , BLADE_USB_CMD_LOCK_OTP ,
831+ 0 , & commit_status );
832+
833+ if (commit_status != 0 ) {
834+ log_error ("Failed to lock OTP, FW returned %d\n" , commit_status );
835+ if (status == 0 )
836+ status = commit_status ;
837+ }
838+
839+ restore_status = restore_post_flash_setting (dev );
840+ return status == 0 ? restore_status : status ;
841+ }
842+
821843static int usb_get_device_speed (struct bladerf * dev , bladerf_dev_speed * speed )
822844{
823845 struct bladerf_usb * usb = dev -> backend_data ;
@@ -1198,6 +1220,7 @@ const struct backend_fns backend_fns_usb_legacy = {
11981220 FIELD_INIT (.get_cal , usb_get_cal ),
11991221 FIELD_INIT (.get_otp , usb_get_otp ),
12001222 FIELD_INIT (.write_otp , usb_write_otp ),
1223+ FIELD_INIT (.lock_otp , usb_lock_otp ),
12011224 FIELD_INIT (.get_device_speed , usb_get_device_speed ),
12021225
12031226 FIELD_INIT (.config_gpio_write , legacy_config_gpio_write ),
@@ -1308,6 +1331,7 @@ const struct backend_fns backend_fns_usb = {
13081331 FIELD_INIT (.get_cal , usb_get_cal ),
13091332 FIELD_INIT (.get_otp , usb_get_otp ),
13101333 FIELD_INIT (.write_otp , usb_write_otp ),
1334+ FIELD_INIT (.lock_otp , usb_lock_otp ),
13111335 FIELD_INIT (.get_device_speed , usb_get_device_speed ),
13121336
13131337 FIELD_INIT (.config_gpio_write , config_gpio_write ),
0 commit comments