mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
usb: typec: tcpm: Remove tcpc_config configuration mechanism
All configuration can and should be done through fwnodes instead of through the tcpc_config struct and there are no existing users left of struct tcpc_config, so lets remove it. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/20191114111840.40876-1-hdegoede@redhat.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
07a594f353
commit
a079973f46
@ -380,9 +380,6 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
|
||||
return SNK_UNATTACHED;
|
||||
else if (port->try_role == TYPEC_SOURCE)
|
||||
return SRC_UNATTACHED;
|
||||
else if (port->tcpc->config &&
|
||||
port->tcpc->config->default_role == TYPEC_SINK)
|
||||
return SNK_UNATTACHED;
|
||||
/* Fall through to return SRC_UNATTACHED */
|
||||
} else if (port->port_type == TYPEC_PORT_SNK) {
|
||||
return SNK_UNATTACHED;
|
||||
@ -4122,7 +4119,7 @@ static int tcpm_try_role(struct typec_port *p, int role)
|
||||
mutex_lock(&port->lock);
|
||||
if (tcpc->try_role)
|
||||
ret = tcpc->try_role(tcpc, role);
|
||||
if (!ret && (!tcpc->config || !tcpc->config->try_role_hw))
|
||||
if (!ret)
|
||||
port->try_role = role;
|
||||
port->try_src_count = 0;
|
||||
port->try_snk_count = 0;
|
||||
@ -4366,34 +4363,6 @@ void tcpm_tcpc_reset(struct tcpm_port *port)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tcpm_tcpc_reset);
|
||||
|
||||
static int tcpm_copy_pdos(u32 *dest_pdo, const u32 *src_pdo,
|
||||
unsigned int nr_pdo)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (nr_pdo > PDO_MAX_OBJECTS)
|
||||
nr_pdo = PDO_MAX_OBJECTS;
|
||||
|
||||
for (i = 0; i < nr_pdo; i++)
|
||||
dest_pdo[i] = src_pdo[i];
|
||||
|
||||
return nr_pdo;
|
||||
}
|
||||
|
||||
static int tcpm_copy_vdos(u32 *dest_vdo, const u32 *src_vdo,
|
||||
unsigned int nr_vdo)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (nr_vdo > VDO_MAX_OBJECTS)
|
||||
nr_vdo = VDO_MAX_OBJECTS;
|
||||
|
||||
for (i = 0; i < nr_vdo; i++)
|
||||
dest_vdo[i] = src_vdo[i];
|
||||
|
||||
return nr_vdo;
|
||||
}
|
||||
|
||||
static int tcpm_fw_get_caps(struct tcpm_port *port,
|
||||
struct fwnode_handle *fwnode)
|
||||
{
|
||||
@ -4696,35 +4665,10 @@ static int devm_tcpm_psy_register(struct tcpm_port *port)
|
||||
return PTR_ERR_OR_ZERO(port->psy);
|
||||
}
|
||||
|
||||
static int tcpm_copy_caps(struct tcpm_port *port,
|
||||
const struct tcpc_config *tcfg)
|
||||
{
|
||||
if (tcpm_validate_caps(port, tcfg->src_pdo, tcfg->nr_src_pdo) ||
|
||||
tcpm_validate_caps(port, tcfg->snk_pdo, tcfg->nr_snk_pdo))
|
||||
return -EINVAL;
|
||||
|
||||
port->nr_src_pdo = tcpm_copy_pdos(port->src_pdo, tcfg->src_pdo,
|
||||
tcfg->nr_src_pdo);
|
||||
port->nr_snk_pdo = tcpm_copy_pdos(port->snk_pdo, tcfg->snk_pdo,
|
||||
tcfg->nr_snk_pdo);
|
||||
|
||||
port->nr_snk_vdo = tcpm_copy_vdos(port->snk_vdo, tcfg->snk_vdo,
|
||||
tcfg->nr_snk_vdo);
|
||||
|
||||
port->operating_snk_mw = tcfg->operating_snk_mw;
|
||||
|
||||
port->typec_caps.prefer_role = tcfg->default_role;
|
||||
port->typec_caps.type = tcfg->type;
|
||||
port->typec_caps.data = tcfg->data;
|
||||
port->self_powered = tcfg->self_powered;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
|
||||
{
|
||||
struct tcpm_port *port;
|
||||
int i, err;
|
||||
int err;
|
||||
|
||||
if (!dev || !tcpc ||
|
||||
!tcpc->get_vbus || !tcpc->set_cc || !tcpc->get_cc ||
|
||||
@ -4757,15 +4701,10 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
|
||||
tcpm_debugfs_init(port);
|
||||
|
||||
err = tcpm_fw_get_caps(port, tcpc->fwnode);
|
||||
if ((err < 0) && tcpc->config)
|
||||
err = tcpm_copy_caps(port, tcpc->config);
|
||||
if (err < 0)
|
||||
goto out_destroy_wq;
|
||||
|
||||
if (!tcpc->config || !tcpc->config->try_role_hw)
|
||||
port->try_role = port->typec_caps.prefer_role;
|
||||
else
|
||||
port->try_role = TYPEC_NO_PREFERRED_ROLE;
|
||||
port->try_role = port->typec_caps.prefer_role;
|
||||
|
||||
port->typec_caps.fwnode = tcpc->fwnode;
|
||||
port->typec_caps.revision = 0x0120; /* Type-C spec release 1.2 */
|
||||
@ -4792,29 +4731,6 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
|
||||
goto out_role_sw_put;
|
||||
}
|
||||
|
||||
if (tcpc->config && tcpc->config->alt_modes) {
|
||||
const struct typec_altmode_desc *paltmode = tcpc->config->alt_modes;
|
||||
|
||||
i = 0;
|
||||
while (paltmode->svid && i < ARRAY_SIZE(port->port_altmode)) {
|
||||
struct typec_altmode *alt;
|
||||
|
||||
alt = typec_port_register_altmode(port->typec_port,
|
||||
paltmode);
|
||||
if (IS_ERR(alt)) {
|
||||
tcpm_log(port,
|
||||
"%s: failed to register port alternate mode 0x%x",
|
||||
dev_name(dev), paltmode->svid);
|
||||
break;
|
||||
}
|
||||
typec_altmode_set_drvdata(alt, port);
|
||||
alt->ops = &tcpm_altmode_ops;
|
||||
port->port_altmode[i] = alt;
|
||||
i++;
|
||||
paltmode++;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_lock(&port->lock);
|
||||
tcpm_init(port);
|
||||
mutex_unlock(&port->lock);
|
||||
|
@ -46,45 +46,6 @@ enum tcpm_transmit_type {
|
||||
TCPC_TX_BIST_MODE_2 = 7
|
||||
};
|
||||
|
||||
/**
|
||||
* struct tcpc_config - Port configuration
|
||||
* @src_pdo: PDO parameters sent to port partner as response to
|
||||
* PD_CTRL_GET_SOURCE_CAP message
|
||||
* @nr_src_pdo: Number of entries in @src_pdo
|
||||
* @snk_pdo: PDO parameters sent to partner as response to
|
||||
* PD_CTRL_GET_SINK_CAP message
|
||||
* @nr_snk_pdo: Number of entries in @snk_pdo
|
||||
* @operating_snk_mw:
|
||||
* Required operating sink power in mW
|
||||
* @type: Port type (TYPEC_PORT_DFP, TYPEC_PORT_UFP, or
|
||||
* TYPEC_PORT_DRP)
|
||||
* @default_role:
|
||||
* Default port role (TYPEC_SINK or TYPEC_SOURCE).
|
||||
* Set to TYPEC_NO_PREFERRED_ROLE if no default role.
|
||||
* @try_role_hw:True if try.{Src,Snk} is implemented in hardware
|
||||
* @alt_modes: List of supported alternate modes
|
||||
*/
|
||||
struct tcpc_config {
|
||||
const u32 *src_pdo;
|
||||
unsigned int nr_src_pdo;
|
||||
|
||||
const u32 *snk_pdo;
|
||||
unsigned int nr_snk_pdo;
|
||||
|
||||
const u32 *snk_vdo;
|
||||
unsigned int nr_snk_vdo;
|
||||
|
||||
unsigned int operating_snk_mw;
|
||||
|
||||
enum typec_port_type type;
|
||||
enum typec_port_data data;
|
||||
enum typec_role default_role;
|
||||
bool try_role_hw; /* try.{src,snk} implemented in hardware */
|
||||
bool self_powered; /* port belongs to a self powered device */
|
||||
|
||||
const struct typec_altmode_desc *alt_modes;
|
||||
};
|
||||
|
||||
/* Mux state attributes */
|
||||
#define TCPC_MUX_USB_ENABLED BIT(0) /* USB enabled */
|
||||
#define TCPC_MUX_DP_ENABLED BIT(1) /* DP enabled */
|
||||
@ -92,7 +53,6 @@ struct tcpc_config {
|
||||
|
||||
/**
|
||||
* struct tcpc_dev - Port configuration and callback functions
|
||||
* @config: Pointer to port configuration
|
||||
* @fwnode: Pointer to port fwnode
|
||||
* @get_vbus: Called to read current VBUS state
|
||||
* @get_current_limit:
|
||||
@ -121,7 +81,6 @@ struct tcpc_config {
|
||||
* @mux: Pointer to multiplexer data
|
||||
*/
|
||||
struct tcpc_dev {
|
||||
const struct tcpc_config *config;
|
||||
struct fwnode_handle *fwnode;
|
||||
|
||||
int (*init)(struct tcpc_dev *dev);
|
||||
|
Loading…
Reference in New Issue
Block a user