mirror of
https://github.com/torvalds/linux
synced 2024-10-07 03:42:55 +00:00
ALSA: hda: codec: Reduce CONFIG_PM dependencies
CONFIG_PM is almost mandatory nowadays for real systems, but we have lots of CONFIG_PM dependent code in snd-hda-codec helper code. Let's reduce the dependencies of CONFIG_PM now. The only visible drawback would be a couple of superfluous trace entries for runtime PM, but we can live with that. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://lore.kernel.org/r/20240506161359.6960-3-tiwai@suse.de
This commit is contained in:
parent
32d7c6cdc9
commit
9e993b3d72
|
@ -109,11 +109,9 @@ struct hda_codec_ops {
|
||||||
void (*unsol_event)(struct hda_codec *codec, unsigned int res);
|
void (*unsol_event)(struct hda_codec *codec, unsigned int res);
|
||||||
void (*set_power_state)(struct hda_codec *codec, hda_nid_t fg,
|
void (*set_power_state)(struct hda_codec *codec, hda_nid_t fg,
|
||||||
unsigned int power_state);
|
unsigned int power_state);
|
||||||
#ifdef CONFIG_PM
|
|
||||||
int (*suspend)(struct hda_codec *codec);
|
int (*suspend)(struct hda_codec *codec);
|
||||||
int (*resume)(struct hda_codec *codec);
|
int (*resume)(struct hda_codec *codec);
|
||||||
int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
|
int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
|
||||||
#endif
|
|
||||||
void (*stream_pm)(struct hda_codec *codec, hda_nid_t nid, bool on);
|
void (*stream_pm)(struct hda_codec *codec, hda_nid_t nid, bool on);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -259,11 +257,9 @@ struct hda_codec {
|
||||||
unsigned int no_stream_clean_at_suspend:1; /* do not clean streams at suspend */
|
unsigned int no_stream_clean_at_suspend:1; /* do not clean streams at suspend */
|
||||||
unsigned int ctl_dev_id:1; /* old control element id build behaviour */
|
unsigned int ctl_dev_id:1; /* old control element id build behaviour */
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
unsigned long power_on_acct;
|
unsigned long power_on_acct;
|
||||||
unsigned long power_off_acct;
|
unsigned long power_off_acct;
|
||||||
unsigned long power_jiffies;
|
unsigned long power_jiffies;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* filter the requested power state per nid */
|
/* filter the requested power state per nid */
|
||||||
unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid,
|
unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid,
|
||||||
|
@ -481,10 +477,8 @@ extern const struct dev_pm_ops hda_codec_driver_pm;
|
||||||
static inline
|
static inline
|
||||||
int hda_call_check_power_status(struct hda_codec *codec, hda_nid_t nid)
|
int hda_call_check_power_status(struct hda_codec *codec, hda_nid_t nid)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PM
|
|
||||||
if (codec->patch_ops.check_power_status)
|
if (codec->patch_ops.check_power_status)
|
||||||
return codec->patch_ops.check_power_status(codec, nid);
|
return codec->patch_ops.check_power_status(codec, nid);
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,14 +489,9 @@ int hda_call_check_power_status(struct hda_codec *codec, hda_nid_t nid)
|
||||||
#define snd_hda_power_up_pm(codec) snd_hdac_power_up_pm(&(codec)->core)
|
#define snd_hda_power_up_pm(codec) snd_hdac_power_up_pm(&(codec)->core)
|
||||||
#define snd_hda_power_down(codec) snd_hdac_power_down(&(codec)->core)
|
#define snd_hda_power_down(codec) snd_hdac_power_down(&(codec)->core)
|
||||||
#define snd_hda_power_down_pm(codec) snd_hdac_power_down_pm(&(codec)->core)
|
#define snd_hda_power_down_pm(codec) snd_hdac_power_down_pm(&(codec)->core)
|
||||||
#ifdef CONFIG_PM
|
|
||||||
void snd_hda_codec_set_power_save(struct hda_codec *codec, int delay);
|
void snd_hda_codec_set_power_save(struct hda_codec *codec, int delay);
|
||||||
void snd_hda_set_power_save(struct hda_bus *bus, int delay);
|
void snd_hda_set_power_save(struct hda_bus *bus, int delay);
|
||||||
void snd_hda_update_power_acct(struct hda_codec *codec);
|
void snd_hda_update_power_acct(struct hda_codec *codec);
|
||||||
#else
|
|
||||||
static inline void snd_hda_codec_set_power_save(struct hda_codec *codec, int delay) {}
|
|
||||||
static inline void snd_hda_set_power_save(struct hda_bus *bus, int delay) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline bool hda_codec_need_resume(struct hda_codec *codec)
|
static inline bool hda_codec_need_resume(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
|
|
|
@ -616,7 +616,6 @@ void snd_hda_shutup_pins(struct hda_codec *codec)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_hda_shutup_pins);
|
EXPORT_SYMBOL_GPL(snd_hda_shutup_pins);
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
|
/* Restore the pin controls cleared previously via snd_hda_shutup_pins() */
|
||||||
static void restore_shutup_pins(struct hda_codec *codec)
|
static void restore_shutup_pins(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
|
@ -634,7 +633,6 @@ static void restore_shutup_pins(struct hda_codec *codec)
|
||||||
}
|
}
|
||||||
codec->pins_shutup = 0;
|
codec->pins_shutup = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static void hda_jackpoll_work(struct work_struct *work)
|
static void hda_jackpoll_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
|
@ -1001,9 +999,7 @@ int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card,
|
||||||
codec->card = card;
|
codec->card = card;
|
||||||
codec->addr = codec_addr;
|
codec->addr = codec_addr;
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
codec->power_jiffies = jiffies;
|
codec->power_jiffies = jiffies;
|
||||||
#endif
|
|
||||||
|
|
||||||
snd_hda_sysfs_init(codec);
|
snd_hda_sysfs_init(codec);
|
||||||
|
|
||||||
|
@ -1238,7 +1234,6 @@ static void purify_inactive_streams(struct hda_codec *codec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/* clean up all streams; called from suspend */
|
/* clean up all streams; called from suspend */
|
||||||
static void hda_cleanup_all_streams(struct hda_codec *codec)
|
static void hda_cleanup_all_streams(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
|
@ -1250,7 +1245,6 @@ static void hda_cleanup_all_streams(struct hda_codec *codec)
|
||||||
really_cleanup_stream(codec, p);
|
really_cleanup_stream(codec, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* amp access functions
|
* amp access functions
|
||||||
|
@ -2858,7 +2852,6 @@ static void hda_exec_init_verbs(struct hda_codec *codec)
|
||||||
static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
|
static inline void hda_exec_init_verbs(struct hda_codec *codec) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/* update the power on/off account with the current jiffies */
|
/* update the power on/off account with the current jiffies */
|
||||||
static void update_power_acct(struct hda_codec *codec, bool on)
|
static void update_power_acct(struct hda_codec *codec, bool on)
|
||||||
{
|
{
|
||||||
|
@ -2966,9 +2959,6 @@ static int hda_codec_runtime_resume(struct device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_PM */
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
|
||||||
static int hda_codec_pm_prepare(struct device *dev)
|
static int hda_codec_pm_prepare(struct device *dev)
|
||||||
{
|
{
|
||||||
struct hda_codec *codec = dev_to_hda_codec(dev);
|
struct hda_codec *codec = dev_to_hda_codec(dev);
|
||||||
|
@ -3023,22 +3013,19 @@ static int hda_codec_pm_restore(struct device *dev)
|
||||||
dev->power.power_state = PMSG_RESTORE;
|
dev->power.power_state = PMSG_RESTORE;
|
||||||
return pm_runtime_force_resume(dev);
|
return pm_runtime_force_resume(dev);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
|
||||||
|
|
||||||
/* referred in hda_bind.c */
|
/* referred in hda_bind.c */
|
||||||
const struct dev_pm_ops hda_codec_driver_pm = {
|
const struct dev_pm_ops hda_codec_driver_pm = {
|
||||||
#ifdef CONFIG_PM_SLEEP
|
.prepare = pm_sleep_ptr(hda_codec_pm_prepare),
|
||||||
.prepare = hda_codec_pm_prepare,
|
.complete = pm_sleep_ptr(hda_codec_pm_complete),
|
||||||
.complete = hda_codec_pm_complete,
|
.suspend = pm_sleep_ptr(hda_codec_pm_suspend),
|
||||||
.suspend = hda_codec_pm_suspend,
|
.resume = pm_sleep_ptr(hda_codec_pm_resume),
|
||||||
.resume = hda_codec_pm_resume,
|
.freeze = pm_sleep_ptr(hda_codec_pm_freeze),
|
||||||
.freeze = hda_codec_pm_freeze,
|
.thaw = pm_sleep_ptr(hda_codec_pm_thaw),
|
||||||
.thaw = hda_codec_pm_thaw,
|
.poweroff = pm_sleep_ptr(hda_codec_pm_suspend),
|
||||||
.poweroff = hda_codec_pm_suspend,
|
.restore = pm_sleep_ptr(hda_codec_pm_restore),
|
||||||
.restore = hda_codec_pm_restore,
|
.runtime_suspend = pm_ptr(hda_codec_runtime_suspend),
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
.runtime_resume = pm_ptr(hda_codec_runtime_resume),
|
||||||
SET_RUNTIME_PM_OPS(hda_codec_runtime_suspend, hda_codec_runtime_resume,
|
|
||||||
NULL)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* suspend the codec at shutdown; called from driver's shutdown callback */
|
/* suspend the codec at shutdown; called from driver's shutdown callback */
|
||||||
|
@ -3425,7 +3412,6 @@ int snd_hda_add_new_ctls(struct hda_codec *codec,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_hda_add_new_ctls);
|
EXPORT_SYMBOL_GPL(snd_hda_add_new_ctls);
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/**
|
/**
|
||||||
* snd_hda_codec_set_power_save - Configure codec's runtime PM
|
* snd_hda_codec_set_power_save - Configure codec's runtime PM
|
||||||
* @codec: codec device to configure
|
* @codec: codec device to configure
|
||||||
|
@ -3516,7 +3502,6 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(snd_hda_check_amp_list_power);
|
EXPORT_SYMBOL_GPL(snd_hda_check_amp_list_power);
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* input MUX helper
|
* input MUX helper
|
||||||
|
@ -4060,12 +4045,10 @@ void snd_hda_bus_reset_codecs(struct hda_bus *bus)
|
||||||
/* FIXME: maybe a better way needed for forced reset */
|
/* FIXME: maybe a better way needed for forced reset */
|
||||||
if (current_work() != &codec->jackpoll_work.work)
|
if (current_work() != &codec->jackpoll_work.work)
|
||||||
cancel_delayed_work_sync(&codec->jackpoll_work);
|
cancel_delayed_work_sync(&codec->jackpoll_work);
|
||||||
#ifdef CONFIG_PM
|
|
||||||
if (hda_codec_is_power_on(codec)) {
|
if (hda_codec_is_power_on(codec)) {
|
||||||
hda_call_codec_suspend(codec);
|
hda_call_codec_suspend(codec);
|
||||||
hda_call_codec_resume(codec);
|
hda_call_codec_resume(codec);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1075,11 +1075,9 @@ irqreturn_t azx_interrupt(int irq, void *dev_id)
|
||||||
bool active, handled = false;
|
bool active, handled = false;
|
||||||
int repeat = 0; /* count for avoiding endless loop */
|
int repeat = 0; /* count for avoiding endless loop */
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
if (azx_has_pm_runtime(chip))
|
if (azx_has_pm_runtime(chip))
|
||||||
if (!pm_runtime_active(chip->card->dev))
|
if (!pm_runtime_active(chip->card->dev))
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
#endif
|
|
||||||
|
|
||||||
spin_lock(&bus->reg_lock);
|
spin_lock(&bus->reg_lock);
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@ struct hda_hint {
|
||||||
const char *val; /* contained in the same alloc as key */
|
const char *val; /* contained in the same alloc as key */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
static ssize_t power_on_acct_show(struct device *dev,
|
static ssize_t power_on_acct_show(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
|
@ -47,7 +46,6 @@ static ssize_t power_off_acct_show(struct device *dev,
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(power_on_acct);
|
static DEVICE_ATTR_RO(power_on_acct);
|
||||||
static DEVICE_ATTR_RO(power_off_acct);
|
static DEVICE_ATTR_RO(power_off_acct);
|
||||||
#endif /* CONFIG_PM */
|
|
||||||
|
|
||||||
#define CODEC_INFO_SHOW(type, field) \
|
#define CODEC_INFO_SHOW(type, field) \
|
||||||
static ssize_t type##_show(struct device *dev, \
|
static ssize_t type##_show(struct device *dev, \
|
||||||
|
@ -745,10 +743,8 @@ static struct attribute *hda_dev_attrs[] = {
|
||||||
&dev_attr_modelname.attr,
|
&dev_attr_modelname.attr,
|
||||||
&dev_attr_init_pin_configs.attr,
|
&dev_attr_init_pin_configs.attr,
|
||||||
&dev_attr_driver_pin_configs.attr,
|
&dev_attr_driver_pin_configs.attr,
|
||||||
#ifdef CONFIG_PM
|
|
||||||
&dev_attr_power_on_acct.attr,
|
&dev_attr_power_on_acct.attr,
|
||||||
&dev_attr_power_off_acct.attr,
|
&dev_attr_power_off_acct.attr,
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SND_HDA_RECONFIG
|
#ifdef CONFIG_SND_HDA_RECONFIG
|
||||||
&dev_attr_init_verbs.attr,
|
&dev_attr_init_verbs.attr,
|
||||||
&dev_attr_hints.attr,
|
&dev_attr_hints.attr,
|
||||||
|
|
Loading…
Reference in a new issue