Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15a75380 authored by Sneh Shah's avatar Sneh Shah Committed by Gerrit - the friendly Code Review server
Browse files

net: stmmac: cleanup and free the nodes and gpios setup in probe



Cleanup debugfs, dev nodes and gpios on driver removal.

Change-Id: Icd18103ef0d968edb9f2ab254321a14323dd1c5a
Signed-off-by: default avatarSneh Shah <snehshah@codeaurora.org>
parent 701109ad
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1522,6 +1522,20 @@ static int ethqos_create_debugfs(struct qcom_ethqos *ethqos)
	return -ENOMEM;
}

static int ethqos_cleanup_debugfs(struct qcom_ethqos *ethqos)
{
	if (!ethqos) {
		ETHQOSERR("Null Param");
		return -ENODEV;
	}

	debugfs_remove_recursive(ethqos->debugfs_dir);
	ethqos->debugfs_dir = NULL;

	ETHQOSDBG("debugfs Deleted Successfully");
	return 0;
}

static int qcom_ethqos_probe(struct platform_device *pdev)
{
	struct device_node *np = pdev->dev.of_node;
@@ -1722,6 +1736,11 @@ static int qcom_ethqos_remove(struct platform_device *pdev)
	if (phy_intr_en)
		cancel_work_sync(&ethqos->emac_phy_work);

	if (ethqos->emac_ver == EMAC_HW_v2_3_2_RG)
		ethqos_remove_pps_dev(ethqos);

	ethqos_cleanup_debugfs(ethqos);
	ethqos_free_gpios(ethqos);
	emac_emb_smmu_exit();
	ethqos_disable_regulators(ethqos);

+1 −0
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ int create_pps_interrupt_device_node(dev_t *pps_dev_t,
				     struct cdev **pps_cdev,
				     struct class **pps_class,
				     char *pps_dev_node_name);
int ethqos_remove_pps_dev(struct qcom_ethqos *ethqos);
bool qcom_ethqos_is_phy_link_up(struct qcom_ethqos *ethqos);
void *qcom_ethqos_get_priv(struct qcom_ethqos *ethqos);

+14 −0
Original line number Diff line number Diff line
@@ -453,3 +453,17 @@ int create_pps_interrupt_device_node(dev_t *pps_dev_t,
alloc_chrdev1_region_fail:
		return ret;
}

int ethqos_remove_pps_dev(struct qcom_ethqos *ethqos)
{
	device_destroy(ethqos->avb_class_a_class, ethqos->avb_class_a_dev_t);
	class_destroy(ethqos->avb_class_a_class);
	cdev_del(ethqos->avb_class_a_cdev);
	unregister_chrdev_region(ethqos->avb_class_a_dev_t, 1);

	device_destroy(ethqos->avb_class_b_class, ethqos->avb_class_b_dev_t);
	class_destroy(ethqos->avb_class_b_class);
	cdev_del(ethqos->avb_class_b_cdev);
	unregister_chrdev_region(ethqos->avb_class_b_dev_t, 1);
	return 0;
}