diff options
Diffstat (limited to 'drivers/net/pse-pd/pse_regulator.c')
| -rw-r--r-- | drivers/net/pse-pd/pse_regulator.c | 49 | 
1 files changed, 28 insertions, 21 deletions
diff --git a/drivers/net/pse-pd/pse_regulator.c b/drivers/net/pse-pd/pse_regulator.c index e2bf8306ca90..64ab36974fe0 100644 --- a/drivers/net/pse-pd/pse_regulator.c +++ b/drivers/net/pse-pd/pse_regulator.c @@ -24,38 +24,42 @@ static struct pse_reg_priv *to_pse_reg(struct pse_controller_dev *pcdev)  }  static int -pse_reg_ethtool_set_config(struct pse_controller_dev *pcdev, unsigned long id, -			   struct netlink_ext_ack *extack, -			   const struct pse_control_config *config) +pse_reg_pi_enable(struct pse_controller_dev *pcdev, int id)  {  	struct pse_reg_priv *priv = to_pse_reg(pcdev);  	int ret; -	if (priv->admin_state == config->admin_cotrol) -		return 0; - -	switch (config->admin_cotrol) { -	case ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED: -		ret = regulator_enable(priv->ps); -		break; -	case ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED: -		ret = regulator_disable(priv->ps); -		break; -	default: -		dev_err(pcdev->dev, "Unknown admin state %i\n", -			config->admin_cotrol); -		ret = -ENOTSUPP; -	} - +	ret = regulator_enable(priv->ps);  	if (ret)  		return ret; -	priv->admin_state = config->admin_cotrol; +	priv->admin_state = ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED; +	return 0; +} + +static int +pse_reg_pi_disable(struct pse_controller_dev *pcdev, int id) +{ +	struct pse_reg_priv *priv = to_pse_reg(pcdev); +	int ret; +	ret = regulator_disable(priv->ps); +	if (ret) +		return ret; + +	priv->admin_state = ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED;  	return 0;  }  static int +pse_reg_pi_is_enabled(struct pse_controller_dev *pcdev, int id) +{ +	struct pse_reg_priv *priv = to_pse_reg(pcdev); + +	return regulator_is_enabled(priv->ps); +} + +static int  pse_reg_ethtool_get_status(struct pse_controller_dev *pcdev, unsigned long id,  			   struct netlink_ext_ack *extack,  			   struct pse_control_status *status) @@ -80,7 +84,9 @@ pse_reg_ethtool_get_status(struct pse_controller_dev *pcdev, unsigned long id,  static const struct pse_controller_ops pse_reg_ops = {  	.ethtool_get_status = pse_reg_ethtool_get_status, -	.ethtool_set_config = pse_reg_ethtool_set_config, +	.pi_enable = pse_reg_pi_enable, +	.pi_is_enabled = pse_reg_pi_is_enabled, +	.pi_disable = pse_reg_pi_disable,  };  static int @@ -116,6 +122,7 @@ pse_reg_probe(struct platform_device *pdev)  	priv->pcdev.owner = THIS_MODULE;  	priv->pcdev.ops = &pse_reg_ops;  	priv->pcdev.dev = dev; +	priv->pcdev.types = ETHTOOL_PSE_PODL;  	ret = devm_pse_controller_register(dev, &priv->pcdev);  	if (ret) {  		dev_err(dev, "failed to register PSE controller (%pe)\n",  |