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

Commit 00126945 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Sudeep Holla
Browse files

firmware: arm_scpi: remove usage of drvdata and don't reset scpi_info to null



There's no benefit using drvdata as variable scpi_info is global.

Setting scpi_info to NULL in scpi_remove isn't needed too. If arm_scpi
is built-in, then this code is never used. And if arm_scpi is built as
a module and some other module calls get_scpi_ops() then due to this
dependency scpi_remove is called only after the other module has been
removed.

Last but not least, users usually store the result of get_scpi_ops(),
therefore setting scpi_info to NULL wouldn't really help.

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
[sudeep.holla: reworded the commit log a bit]
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 2bd6bf03
Loading
Loading
Loading
Loading
+6 −16
Original line number Diff line number Diff line
@@ -862,8 +862,6 @@ static int scpi_init_versions(struct scpi_drvinfo *info)
static ssize_t protocol_version_show(struct device *dev,
				     struct device_attribute *attr, char *buf)
{
	struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev);

	return sprintf(buf, "%d.%d\n",
		       PROTOCOL_REV_MAJOR(scpi_info->protocol_version),
		       PROTOCOL_REV_MINOR(scpi_info->protocol_version));
@@ -873,8 +871,6 @@ static DEVICE_ATTR_RO(protocol_version);
static ssize_t firmware_version_show(struct device *dev,
				     struct device_attribute *attr, char *buf)
{
	struct scpi_drvinfo *scpi_info = dev_get_drvdata(dev);

	return sprintf(buf, "%d.%d.%d\n",
		       FW_REV_MAJOR(scpi_info->firmware_version),
		       FW_REV_MINOR(scpi_info->firmware_version),
@@ -905,21 +901,17 @@ static int scpi_remove(struct platform_device *pdev)
{
	int i;
	struct device *dev = &pdev->dev;
	struct scpi_drvinfo *info = platform_get_drvdata(pdev);

	scpi_info = NULL; /* stop exporting SCPI ops through get_scpi_ops */

	of_platform_depopulate(dev);
	sysfs_remove_groups(&dev->kobj, versions_groups);
	scpi_free_channels(dev, info->channels, info->num_chans);
	platform_set_drvdata(pdev, NULL);
	scpi_free_channels(dev, scpi_info->channels, scpi_info->num_chans);

	for (i = 0; i < MAX_DVFS_DOMAINS && info->dvfs[i]; i++) {
		kfree(info->dvfs[i]->opps);
		kfree(info->dvfs[i]);
	for (i = 0; i < MAX_DVFS_DOMAINS && scpi_info->dvfs[i]; i++) {
		kfree(scpi_info->dvfs[i]->opps);
		kfree(scpi_info->dvfs[i]);
	}
	devm_kfree(dev, info->channels);
	devm_kfree(dev, info);
	devm_kfree(dev, scpi_info->channels);
	devm_kfree(dev, scpi_info);

	return 0;
}
@@ -1027,8 +1019,6 @@ static int scpi_probe(struct platform_device *pdev)
	scpi_info->num_chans = count;
	scpi_info->commands = scpi_std_commands;

	platform_set_drvdata(pdev, scpi_info);

	if (scpi_info->is_legacy) {
		/* Replace with legacy variants */
		scpi_ops.clk_set_val = legacy_scpi_clk_set_val;