1

usb: typec: Update sysfs when setting ops

When adding altmode ops, update the sysfs group so that visibility is
also recalculated.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Benson Leung <bleung@chromium.org>
Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Signed-off-by: Jameson Thies <jthies@google.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240510201244.2968152-3-jthies@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Abhishek Pandit-Subedi 2024-05-10 20:12:42 +00:00 committed by Greg Kroah-Hartman
parent 99516f76db
commit fe8db0bbe0
4 changed files with 22 additions and 3 deletions

View File

@ -746,7 +746,7 @@ int dp_altmode_probe(struct typec_altmode *alt)
dp->alt = alt;
alt->desc = "DisplayPort";
alt->ops = &dp_altmode_ops;
typec_altmode_set_ops(alt, &dp_altmode_ops);
if (plug) {
plug->desc = "Displayport";

View File

@ -467,6 +467,22 @@ static const struct attribute_group *typec_altmode_groups[] = {
NULL
};
/**
* typec_altmode_set_ops - Set ops for altmode
* @adev: Handle to the alternate mode
* @ops: Ops for the alternate mode
*
* After setting ops, attribute visiblity needs to be refreshed if the alternate
* mode can be activated.
*/
void typec_altmode_set_ops(struct typec_altmode *adev,
const struct typec_altmode_ops *ops)
{
adev->ops = ops;
sysfs_update_group(&adev->dev.kobj, &typec_altmode_group);
}
EXPORT_SYMBOL_GPL(typec_altmode_set_ops);
static int altmode_id_get(struct device *dev)
{
struct ida *ids;
@ -2317,7 +2333,7 @@ void typec_port_register_altmodes(struct typec_port *port,
continue;
}
alt->ops = ops;
typec_altmode_set_ops(alt, ops);
typec_altmode_set_drvdata(alt, drvdata);
altmodes[index] = alt;
index++;

View File

@ -333,7 +333,7 @@ struct typec_altmode *ucsi_register_displayport(struct ucsi_connector *con,
dp->con = con;
dp->alt = alt;
alt->ops = &ucsi_displayport_ops;
typec_altmode_set_ops(alt, &ucsi_displayport_ops);
typec_altmode_set_drvdata(alt, dp);
return alt;

View File

@ -167,6 +167,9 @@ struct typec_port *typec_altmode2port(struct typec_altmode *alt);
void typec_altmode_update_active(struct typec_altmode *alt, bool active);
void typec_altmode_set_ops(struct typec_altmode *alt,
const struct typec_altmode_ops *ops);
enum typec_plug_index {
TYPEC_PLUG_SOP_P,
TYPEC_PLUG_SOP_PP,