From c3789cd49b43ec1c414ba1b0e9f48e8ccc19f8e1 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Thu, 3 Jun 2010 10:13:29 +0200 Subject: rework device parameters Change device parameters so that the memory management is in generic code. This also removes the need of storing statically initialized parameters as they are stored in a struct list_head for each device. Signed-off-by: Sascha Hauer --- drivers/nand/nand.c | 7 +++---- drivers/video/fb.c | 21 ++++++++++++--------- drivers/video/imx.c | 17 +++++++++-------- 3 files changed, 24 insertions(+), 21 deletions(-) (limited to 'drivers') diff --git a/drivers/nand/nand.c b/drivers/nand/nand.c index bcf52bd940..4927231c17 100644 --- a/drivers/nand/nand.c +++ b/drivers/nand/nand.c @@ -210,6 +210,7 @@ static struct file_operations nand_ops_oob = { int add_mtd_device(struct mtd_info *mtd) { struct nand_chip *chip = mtd->priv; + char str[16]; strcpy(mtd->class_dev.name, "nand"); register_device(&mtd->class_dev); @@ -220,10 +221,8 @@ int add_mtd_device(struct mtd_info *mtd) mtd->cdev.priv = mtd; mtd->cdev.dev = &mtd->class_dev; - mtd->param_size.flags = PARAM_FLAG_RO; - mtd->param_size.name = "size"; - mtd->param_size.value = asprintf("%u", mtd->size); - dev_add_param(&mtd->class_dev, &mtd->param_size); + sprintf(str, "%u", mtd->size); + dev_add_param_fixed(&mtd->class_dev, "size", str); devfs_create(&mtd->cdev); diff --git a/drivers/video/fb.c b/drivers/video/fb.c index 00a0f6a177..841c3afe9e 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -32,15 +32,22 @@ static int fb_enable_set(struct device_d *dev, struct param_d *param, { struct fb_info *info = dev->priv; int enable; + char *new; + + if (!val) + return dev_param_set_generic(dev, param, NULL); enable = simple_strtoul(val, NULL, 0); - if (enable) + if (enable) { info->fbops->fb_enable(info); - else + new = "1"; + } else { info->fbops->fb_disable(info); + new = "0"; + } - sprintf(info->enable_string, "%d", !!enable); + dev_param_set_generic(dev, param, new); return 0; } @@ -71,13 +78,9 @@ int register_framebuffer(struct fb_info *info) sprintf(dev->name, "fb"); - info->param_enable.set = fb_enable_set; - info->param_enable.name = "enable"; - sprintf(info->enable_string, "%d", 0); - info->param_enable.value = info->enable_string; - dev_add_param(dev, &info->param_enable); - register_device(&info->dev); + dev_add_param(dev, "enable", fb_enable_set, NULL, 0); + dev_set_param(dev, "enable", "0"); devfs_create(&info->cdev); diff --git a/drivers/video/imx.c b/drivers/video/imx.c index 67cae349e5..d9ba643acb 100644 --- a/drivers/video/imx.c +++ b/drivers/video/imx.c @@ -154,8 +154,6 @@ struct imxfb_info { struct fb_info overlay; - struct param_d param_alpha; - char alpha_string[4]; }; #define IMX_NAME "IMX" @@ -427,8 +425,12 @@ static int imxfb_alpha_set(struct device_d *dev, struct param_d *param, struct fb_info *overlay = dev->priv; struct imxfb_info *fbi = overlay->priv; int alpha; + char alphastr[16]; unsigned int tmp; + if (!val) + return dev_param_set_generic(dev, param, NULL); + alpha = simple_strtoul(val, NULL, 0); alpha &= 0xff; @@ -437,7 +439,9 @@ static int imxfb_alpha_set(struct device_d *dev, struct param_d *param, tmp |= LGWCR_GWAV(alpha); writel(tmp , fbi->regs + LCDC_LGWCR); - sprintf(fbi->alpha_string, "%d", alpha); + sprintf(alphastr, "%d", alpha); + + dev_param_set_generic(dev, param, alphastr); return 0; } @@ -502,11 +506,8 @@ static int imxfb_register_overlay(struct imxfb_info *fbi, void *fb) return ret; } - fbi->param_alpha.set = imxfb_alpha_set; - fbi->param_alpha.name = "alpha"; - sprintf(fbi->alpha_string, "%d", 0); - fbi->param_alpha.value = fbi->alpha_string; - dev_add_param(&overlay->dev, &fbi->param_alpha); + dev_add_param(&overlay->dev, "alpha", imxfb_alpha_set, NULL, 0); + dev_set_param(&overlay->dev, "alpha", "0"); return 0; } -- cgit v1.2.3