From: Xiaoguang Chen <chenxg.marvell@gmail.com>
To: myungjoo.ham@samsung.com
Cc: 박경민 <kyungmin.park@samsung.com>,
"Xiaoguang Chen" <chenxg@marvell.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
linux-pm@lists.linux-foundation.org
Subject: Re: [PATCH 1/2] PM: devfreq: add freq table and available_freqs
Date: Thu, 14 Jun 2012 09:50:25 +0800 [thread overview]
Message-ID: <CAFgnuDc7BSVzCyc7XO9xssyX-5Tc3ss1t6hc0bTDbYx80vmMMQ@mail.gmail.com> (raw)
In-Reply-To: <CAFgnuDfMVfimmYTQdB-vxCJPdB_x_nbwmd-2su45en4SpJeiow@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 5480 bytes --]
Hi, Myungjoo
what's your opinion?
Thanks
Xiaoguang
2012/6/13 Xiaoguang Chen <chenxg.marvell@gmail.com>
> I think Devfreq should not be combined with OPP,
> OPP framework does contain one frequency table, but the frequency is
> combined with voltage. some platforms may don't want to use this but
> handling voltage seperately in their clock driver.
>
> and some platforms don't use OPP, and they want a frequency list.
> then this is necessary. also devfreq should contain a frequency list even
> without any other frameworks, don't you think so ?
>
> Thanks
> Xiaoguang
>
>
> 2012/6/13 MyungJoo Ham <myungjoo.ham@samsung.com>
>
>> > Devfreq framework don't have a frequency table, add it
>> > for easy use.
>> >
>> > Signed-off-by: Xiaoguang Chen <chenxg@marvell.com>
>>
>> If you need a predefined data structure to support frequency table,
>> you can simply use OPP, which has helper functions implemented in
>> devfreq subsystem. Is there any reason not to use OPP and to implement
>> another data structure to store a frequency table attached to a device?
>>
>>
>> Cheers!
>> MyungJoo.
>>
>> > ---
>> > drivers/devfreq/devfreq.c | 26 ++++++++++++++++++++++++++
>> > include/linux/devfreq.h | 12 ++++++++++++
>> > 2 files changed, 38 insertions(+), 0 deletions(-)
>> >
>> > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
>> > index 70c31d4..2144200 100644
>> > --- a/drivers/devfreq/devfreq.c
>> > +++ b/drivers/devfreq/devfreq.c
>> > @@ -460,6 +460,17 @@ int devfreq_remove_device(struct devfreq *devfreq)
>> > return 0;
>> > }
>> >
>> > +/*
>> > + * devfreq_set_freq_table()- Set frequency table for devfreq
>> > + * @devfreq The devfreq instance
>> > + * @table The frequency table that device supports
>> > + */
>> > +void devfreq_set_freq_table(struct devfreq *devfreq,
>> > + struct devfreq_frequency_table *table)
>> > +{
>> > + devfreq->freq_table = table;
>> > +}
>> > +
>> > static ssize_t show_governor(struct device *dev,
>> > struct device_attribute *attr, char *buf)
>> > {
>> > @@ -472,6 +483,20 @@ static ssize_t show_freq(struct device *dev,
>> > return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq);
>> > }
>> >
>> > +static ssize_t show_avail_freq(struct device *dev,
>> > + struct device_attribute *attr, char *buf)
>> > +{
>> > + int len = 0, i;
>> > + struct devfreq *devfreq = to_devfreq(dev);
>> > + if (devfreq->freq_table)
>> > + for (i = 0; devfreq->freq_table[i].frequency !=
>> DEVFREQ_TABLE_END; i++)
>> > + len += sprintf(buf + len, "%lu\n",
>> > + devfreq->freq_table[i].frequency);
>> > + if (len == 0)
>> > + len += sprintf(buf + len, "No frequency table is
>> provided\n");
>> > + return len;
>> > +}
>> > +
>> > static ssize_t show_polling_interval(struct device *dev,
>> > struct device_attribute *attr, char
>> *buf)
>> > {
>> > @@ -595,6 +620,7 @@ static struct device_attribute devfreq_attrs[] = {
>> > store_polling_interval),
>> > __ATTR(min_freq, S_IRUGO | S_IWUSR, show_min_freq,
>> store_min_freq),
>> > __ATTR(max_freq, S_IRUGO | S_IWUSR, show_max_freq,
>> store_max_freq),
>> > + __ATTR(available_freqs, S_IRUGO, show_avail_freq, NULL),
>> > { },
>> > };
>> >
>> > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
>> > index 281c72a..e5e4036 100644
>> > --- a/include/linux/devfreq.h
>> > +++ b/include/linux/devfreq.h
>> > @@ -52,6 +52,14 @@ struct devfreq_dev_status {
>> > */
>> > #define DEVFREQ_FLAG_LEAST_UPPER_BOUND 0x1
>> >
>> > +#define DEVFREQ_ENTRY_INVALID (~0)
>> > +#define DEVFREQ_TABLE_END (~1)
>> > +
>> > +struct devfreq_frequency_table {
>> > + unsigned int index;
>> > + unsigned long frequency;
>> > +};
>> > +
>> > /**
>> > * struct devfreq_dev_profile - Devfreq's user device profile
>> > * @initial_freq The operating frequency when devfreq_add_device()
>> is
>> > @@ -130,6 +138,7 @@ struct devfreq_governor {
>> > * "devfreq_monitor" executions to reevaluate
>> > * frequency/voltage of the device. Set by
>> > * profile's polling_ms interval.
>> > + * @freq_table The frequency table that device supports
>> > * @data Private data of the governor. The devfreq framework does
>> not
>> > * touch this.
>> > * @being_removed a flag to mark that this object is being removed
>> in
>> > @@ -157,6 +166,7 @@ struct devfreq {
>> > unsigned long polling_jiffies;
>> > unsigned long previous_freq;
>> > unsigned int next_polling;
>> > + struct devfreq_frequency_table *freq_table;
>> >
>> > void *data; /* private data for governors */
>> >
>> > @@ -180,6 +190,8 @@ extern int devfreq_register_opp_notifier(struct
>> device *dev,
>> > struct devfreq *devfreq);
>> > extern int devfreq_unregister_opp_notifier(struct device *dev,
>> > struct devfreq *devfreq);
>> > +extern void devfreq_set_freq_table(struct devfreq *devfreq,
>> > + struct devfreq_frequency_table *table);
>> >
>> > #ifdef CONFIG_DEVFREQ_GOV_POWERSAVE
>> > extern const struct devfreq_governor devfreq_powersave;
>> > --
>> > 1.7.0.4
>> >
>>
>
>
[-- Attachment #2: Type: text/html, Size: 6946 bytes --]
next prev parent reply other threads:[~2012-06-14 1:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-13 4:53 [PATCH 1/2] PM: devfreq: add freq table and available_freqs MyungJoo Ham
2012-06-13 5:28 ` Xiaoguang Chen
2012-06-14 1:50 ` Xiaoguang Chen [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-06-19 5:04 함명주
2012-06-19 5:49 함명주
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAFgnuDc7BSVzCyc7XO9xssyX-5Tc3ss1t6hc0bTDbYx80vmMMQ@mail.gmail.com \
--to=chenxg.marvell@gmail.com \
--cc=chenxg@marvell.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=myungjoo.ham@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).