int (*discovery_status)(struct amd_mp2_dev *privdata);
        void (*suspend)(struct amd_mp2_dev *mp2);
        void (*resume)(struct amd_mp2_dev *mp2);
+       void (*remove)(void *privdata);
        int (*get_rep_desc)(int sensor_idx, u8 rep_desc[]);
        u32 (*get_desc_sz)(int sensor_idx, int descriptor_name);
        u8 (*get_feat_rep)(int sensor_idx, int report_id, u8 *feature_report);
 
        .clear_intr = amd_sfh_clear_intr_v2,
        .init_intr = amd_sfh_irq_init_v2,
        .discovery_status = amd_sfh_dis_sts_v2,
+       .remove = amd_mp2_pci_remove,
 };
 
 static struct amd_mp2_ops amd_sfh_ops = {
        .start = amd_start_sensor,
        .stop = amd_stop_sensor,
        .stop_all = amd_stop_all_sensors,
+       .remove = amd_mp2_pci_remove,
 };
 
 static void mp2_select_ops(struct amd_mp2_dev *privdata)
 
        amd_sfh_clear_intr(privdata);
 
-       return devm_add_action_or_reset(&pdev->dev, amd_mp2_pci_remove, privdata);
+       return devm_add_action_or_reset(&pdev->dev, privdata->mp2_ops->remove, privdata);
 }
 
 static int __maybe_unused amd_mp2_pci_resume(struct device *dev)