Commit 830ae442 authored by Chanwoo Choi's avatar Chanwoo Choi

extcon: Remove the deprecated extcon functions

This patch removes the deprecated extcon functions using string type
to identify the type of external connector. The Commit 2a9de9c0
("extcon: Use the unique id for external connector instead of string)
uses the unique id to separate the type of external connector instead of
string name.
- extcon_register_interest()
- extcon_unregister_interest()
- extcon_set_cable_state()
- extcon_get_cable_state()

And, extcon_register_interest() finds the first extcon device to include the
requested external connector from extcon client device and then register the
notifier if extcon device argument is NULL. Instead, extcon_register_notifier()
supports this feature.

But, this patch remains the deprecatd function definition to prevent
the build break.
Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent b396cff5
...@@ -127,38 +127,6 @@ static int find_cable_index_by_id(struct extcon_dev *edev, const unsigned int id ...@@ -127,38 +127,6 @@ static int find_cable_index_by_id(struct extcon_dev *edev, const unsigned int id
return -EINVAL; return -EINVAL;
} }
static int find_cable_id_by_name(struct extcon_dev *edev, const char *name)
{
int id = -EINVAL;
int i = 0;
/* Find the id of extcon cable */
while (extcon_name[i]) {
if (!strncmp(extcon_name[i], name, CABLE_NAME_MAX)) {
id = i;
break;
}
i++;
}
return id;
}
static int find_cable_index_by_name(struct extcon_dev *edev, const char *name)
{
int id;
if (edev->max_supported == 0)
return -EINVAL;
/* Find the the number of extcon cable */
id = find_cable_id_by_name(edev, name);
if (id < 0)
return id;
return find_cable_index_by_id(edev, id);
}
static bool is_extcon_changed(u32 prev, u32 new, int idx, bool *attached) static bool is_extcon_changed(u32 prev, u32 new, int idx, bool *attached)
{ {
if (((prev >> idx) & 0x1) != ((new >> idx) & 0x1)) { if (((prev >> idx) & 0x1) != ((new >> idx) & 0x1)) {
...@@ -373,25 +341,6 @@ int extcon_get_cable_state_(struct extcon_dev *edev, const unsigned int id) ...@@ -373,25 +341,6 @@ int extcon_get_cable_state_(struct extcon_dev *edev, const unsigned int id)
} }
EXPORT_SYMBOL_GPL(extcon_get_cable_state_); EXPORT_SYMBOL_GPL(extcon_get_cable_state_);
/**
* extcon_get_cable_state() - Get the status of a specific cable.
* @edev: the extcon device that has the cable.
* @cable_name: cable name.
*
* Note that this is slower than extcon_get_cable_state_.
*/
int extcon_get_cable_state(struct extcon_dev *edev, const char *cable_name)
{
int id;
id = find_cable_id_by_name(edev, cable_name);
if (id < 0)
return id;
return extcon_get_cable_state_(edev, id);
}
EXPORT_SYMBOL_GPL(extcon_get_cable_state);
/** /**
* extcon_set_cable_state_() - Set the status of a specific cable. * extcon_set_cable_state_() - Set the status of a specific cable.
* @edev: the extcon device that has the cable. * @edev: the extcon device that has the cable.
...@@ -421,28 +370,6 @@ int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id, ...@@ -421,28 +370,6 @@ int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id,
} }
EXPORT_SYMBOL_GPL(extcon_set_cable_state_); EXPORT_SYMBOL_GPL(extcon_set_cable_state_);
/**
* extcon_set_cable_state() - Set the status of a specific cable.
* @edev: the extcon device that has the cable.
* @cable_name: cable name.
* @cable_state: the new cable status. The default semantics is
* true: attached / false: detached.
*
* Note that this is slower than extcon_set_cable_state_.
*/
int extcon_set_cable_state(struct extcon_dev *edev,
const char *cable_name, bool cable_state)
{
int id;
id = find_cable_id_by_name(edev, cable_name);
if (id < 0)
return id;
return extcon_set_cable_state_(edev, id, cable_state);
}
EXPORT_SYMBOL_GPL(extcon_set_cable_state);
/** /**
* extcon_get_extcon_dev() - Get the extcon device instance from the name * extcon_get_extcon_dev() - Get the extcon device instance from the name
* @extcon_name: The extcon name provided with extcon_dev_register() * @extcon_name: The extcon name provided with extcon_dev_register()
...@@ -466,105 +393,6 @@ struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) ...@@ -466,105 +393,6 @@ struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name)
} }
EXPORT_SYMBOL_GPL(extcon_get_extcon_dev); EXPORT_SYMBOL_GPL(extcon_get_extcon_dev);
/**
* extcon_register_interest() - Register a notifier for a state change of a
* specific cable, not an entier set of cables of a
* extcon device.
* @obj: an empty extcon_specific_cable_nb object to be returned.
* @extcon_name: the name of extcon device.
* if NULL, extcon_register_interest will register
* every cable with the target cable_name given.
* @cable_name: the target cable name.
* @nb: the notifier block to get notified.
*
* Provide an empty extcon_specific_cable_nb. extcon_register_interest() sets
* the struct for you.
*
* extcon_register_interest is a helper function for those who want to get
* notification for a single specific cable's status change. If a user wants
* to get notification for any changes of all cables of a extcon device,
* he/she should use the general extcon_register_notifier().
*
* Note that the second parameter given to the callback of nb (val) is
* "old_state", not the current state. The current state can be retrieved
* by looking at the third pameter (edev pointer)'s state value.
*/
int extcon_register_interest(struct extcon_specific_cable_nb *obj,
const char *extcon_name, const char *cable_name,
struct notifier_block *nb)
{
unsigned long flags;
int ret;
if (!obj || !cable_name || !nb)
return -EINVAL;
if (extcon_name) {
obj->edev = extcon_get_extcon_dev(extcon_name);
if (!obj->edev)
return -ENODEV;
obj->cable_index = find_cable_index_by_name(obj->edev,
cable_name);
if (obj->cable_index < 0)
return obj->cable_index;
obj->user_nb = nb;
spin_lock_irqsave(&obj->edev->lock, flags);
ret = raw_notifier_chain_register(
&obj->edev->nh[obj->cable_index],
obj->user_nb);
spin_unlock_irqrestore(&obj->edev->lock, flags);
} else {
struct class_dev_iter iter;
struct extcon_dev *extd;
struct device *dev;
if (!extcon_class)
return -ENODEV;
class_dev_iter_init(&iter, extcon_class, NULL, NULL);
while ((dev = class_dev_iter_next(&iter))) {
extd = dev_get_drvdata(dev);
if (find_cable_index_by_name(extd, cable_name) < 0)
continue;
class_dev_iter_exit(&iter);
return extcon_register_interest(obj, extd->name,
cable_name, nb);
}
ret = -ENODEV;
}
return ret;
}
EXPORT_SYMBOL_GPL(extcon_register_interest);
/**
* extcon_unregister_interest() - Unregister the notifier registered by
* extcon_register_interest().
* @obj: the extcon_specific_cable_nb object returned by
* extcon_register_interest().
*/
int extcon_unregister_interest(struct extcon_specific_cable_nb *obj)
{
unsigned long flags;
int ret;
if (!obj)
return -EINVAL;
spin_lock_irqsave(&obj->edev->lock, flags);
ret = raw_notifier_chain_unregister(
&obj->edev->nh[obj->cable_index], obj->user_nb);
spin_unlock_irqrestore(&obj->edev->lock, flags);
return ret;
}
EXPORT_SYMBOL_GPL(extcon_unregister_interest);
/** /**
* extcon_register_notifier() - Register a notifiee to get notified by * extcon_register_notifier() - Register a notifiee to get notified by
* any attach status changes from the extcon. * any attach status changes from the extcon.
...@@ -582,14 +410,33 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id, ...@@ -582,14 +410,33 @@ int extcon_register_notifier(struct extcon_dev *edev, unsigned int id,
unsigned long flags; unsigned long flags;
int ret, idx; int ret, idx;
if (!edev || !nb) if (!nb)
return -EINVAL; return -EINVAL;
idx = find_cable_index_by_id(edev, id); if (edev) {
idx = find_cable_index_by_id(edev, id);
spin_lock_irqsave(&edev->lock, flags); spin_lock_irqsave(&edev->lock, flags);
ret = raw_notifier_chain_register(&edev->nh[idx], nb); ret = raw_notifier_chain_register(&edev->nh[idx], nb);
spin_unlock_irqrestore(&edev->lock, flags); spin_unlock_irqrestore(&edev->lock, flags);
} else {
struct extcon_dev *extd;
mutex_lock(&extcon_dev_list_lock);
list_for_each_entry(extd, &extcon_dev_list, entry) {
idx = find_cable_index_by_id(extd, id);
if (idx >= 0)
break;
}
mutex_unlock(&extcon_dev_list_lock);
if (idx >= 0) {
edev = extd;
return extcon_register_notifier(extd, id, nb);
} else {
ret = -ENODEV;
}
}
return ret; return ret;
} }
......
...@@ -146,22 +146,6 @@ struct extcon_cable { ...@@ -146,22 +146,6 @@ struct extcon_cable {
struct attribute *attrs[3]; /* to be fed to attr_g.attrs */ struct attribute *attrs[3]; /* to be fed to attr_g.attrs */
}; };
/**
* struct extcon_specific_cable_nb - An internal data for
* extcon_register_interest().
* @user_nb: user provided notifier block for events from
* a specific cable.
* @cable_index: the target cable.
* @edev: the target extcon device.
* @previous_value: the saved previous event value.
*/
struct extcon_specific_cable_nb {
struct notifier_block *user_nb;
int cable_index;
struct extcon_dev *edev;
unsigned long previous_value;
};
#if IS_ENABLED(CONFIG_EXTCON) #if IS_ENABLED(CONFIG_EXTCON)
/* /*
...@@ -207,23 +191,6 @@ extern int extcon_get_cable_state_(struct extcon_dev *edev, unsigned int id); ...@@ -207,23 +191,6 @@ extern int extcon_get_cable_state_(struct extcon_dev *edev, unsigned int id);
extern int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id, extern int extcon_set_cable_state_(struct extcon_dev *edev, unsigned int id,
bool cable_state); bool cable_state);
extern int extcon_get_cable_state(struct extcon_dev *edev,
const char *cable_name);
extern int extcon_set_cable_state(struct extcon_dev *edev,
const char *cable_name, bool cable_state);
/*
* Following APIs are for notifiees (those who want to be notified)
* to register a callback for events from a specific cable of the extcon.
* Notifiees are the connected device drivers wanting to get notified by
* a specific external port of a connection device.
*/
extern int extcon_register_interest(struct extcon_specific_cable_nb *obj,
const char *extcon_name,
const char *cable_name,
struct notifier_block *nb);
extern int extcon_unregister_interest(struct extcon_specific_cable_nb *nb);
/* /*
* Following APIs are to monitor every action of a notifier. * Following APIs are to monitor every action of a notifier.
* Registrar gets notified for every external port of a connection device. * Registrar gets notified for every external port of a connection device.
...@@ -246,6 +213,7 @@ extern struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, ...@@ -246,6 +213,7 @@ extern struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
/* Following API to get information of extcon device */ /* Following API to get information of extcon device */
extern const char *extcon_get_edev_name(struct extcon_dev *edev); extern const char *extcon_get_edev_name(struct extcon_dev *edev);
#else /* CONFIG_EXTCON */ #else /* CONFIG_EXTCON */
static inline int extcon_dev_register(struct extcon_dev *edev) static inline int extcon_dev_register(struct extcon_dev *edev)
{ {
...@@ -306,18 +274,6 @@ static inline int extcon_set_cable_state_(struct extcon_dev *edev, ...@@ -306,18 +274,6 @@ static inline int extcon_set_cable_state_(struct extcon_dev *edev,
return 0; return 0;
} }
static inline int extcon_get_cable_state(struct extcon_dev *edev,
const char *cable_name)
{
return 0;
}
static inline int extcon_set_cable_state(struct extcon_dev *edev,
const char *cable_name, int state)
{
return 0;
}
static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name)
{ {
return NULL; return NULL;
...@@ -337,24 +293,34 @@ static inline int extcon_unregister_notifier(struct extcon_dev *edev, ...@@ -337,24 +293,34 @@ static inline int extcon_unregister_notifier(struct extcon_dev *edev,
return 0; return 0;
} }
static inline int extcon_register_interest(struct extcon_specific_cable_nb *obj, static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
const char *extcon_name, int index)
const char *cable_name,
struct notifier_block *nb)
{ {
return 0; return ERR_PTR(-ENODEV);
} }
#endif /* CONFIG_EXTCON */
static inline int extcon_unregister_interest(struct extcon_specific_cable_nb /*
*obj) * Following structure and API are deprecated. EXTCON remains the function
* definition to prevent the build break.
*/
struct extcon_specific_cable_nb {
struct notifier_block *user_nb;
int cable_index;
struct extcon_dev *edev;
unsigned long previous_value;
};
static inline int extcon_register_interest(struct extcon_specific_cable_nb *obj,
const char *extcon_name, const char *cable_name,
struct notifier_block *nb)
{ {
return 0; return -EINVAL;
} }
static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, static inline int extcon_unregister_interest(struct extcon_specific_cable_nb
int index) *obj)
{ {
return ERR_PTR(-ENODEV); return -EINVAL;
} }
#endif /* CONFIG_EXTCON */
#endif /* __LINUX_EXTCON_H__ */ #endif /* __LINUX_EXTCON_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment