Hi Andy, On Wed, Oct 13, 2010 at 11:22:22AM +0300, Andy Shevchenko wrote: > For debugging power managment features there is quite convenient to have a > possibility to change MMC host controller clock at run time. This patch adds > 'clock' file under MMC host root of debugfs. > > Usage as follows: > > # cat /sys/kernel/debug/mmc0/clock > 52000000 > > # echo "1000000000" > /sys/kernel/debug/mmc0/clock > # cat /sys/kernel/debug/mmc0/clock > 52000000 > > # echo "48000000" > /sys/kernel/debug/mmc0/clock > # cat /sys/kernel/debug/mmc0/clock > 48000000 > > The second piece of example shows limits which are applied accordingly to used > host driver. > > Signed-off-by: Andy Shevchenko <ext-andriy.shevchenko@xxxxxxxxx> > --- > drivers/mmc/core/debugfs.c | 35 +++++++++++++++++++++++++++++++++-- > 1 files changed, 33 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c > index 96d10f4..9b6ec07 100644 > --- a/drivers/mmc/core/debugfs.c > +++ b/drivers/mmc/core/debugfs.c > @@ -133,6 +133,33 @@ static const struct file_operations mmc_ios_fops = { > .release = single_release, > }; > > +static int mmc_clock_opt_get(void *data, u64 *val) > +{ > + struct mmc_host *host = data; > + > + *val = host->ios.clock; > + > + return 0; > +} > + > +static int mmc_clock_opt_set(void *data, u64 val) > +{ > + struct mmc_host *host = data; > + > + /* We need this check due to input value is u64 */ > + if (val > host->f_max) > + return -EINVAL; > + > + mmc_claim_host(host); > + mmc_set_clock(host, (unsigned int) val); > + mmc_release_host(host); > + > + return 0; > +} > + > +DEFINE_SIMPLE_ATTRIBUTE(mmc_clock_fops, mmc_clock_opt_get, mmc_clock_opt_set, > + "%llu\n"); > + > void mmc_add_host_debugfs(struct mmc_host *host) > { > struct dentry *root; > @@ -149,11 +176,15 @@ void mmc_add_host_debugfs(struct mmc_host *host) > host->debugfs_root = root; > > if (!debugfs_create_file("ios", S_IRUSR, root, host, &mmc_ios_fops)) > - goto err_ios; > + goto err_node; > + > + if (!debugfs_create_file("clock", S_IRUSR | S_IWUSR, root, host, > + &mmc_clock_fops)) > + goto err_node; > > return; > > -err_ios: > +err_node: > debugfs_remove_recursive(root); > host->debugfs_root = NULL; > err_root: > -- Thanks, looks good -- applied to mmc-next with minor changelog edits. -- Chris Ball <cjb@xxxxxxxxxx> <http://printf.net/> One Laptop Per Child -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html