summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2010-06-03 10:13:29 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2010-06-17 08:28:25 +0200
commitc3789cd49b43ec1c414ba1b0e9f48e8ccc19f8e1 (patch)
tree8df082be53b5f2538956daf5e3c0295eff58de23 /drivers
parent57e1fc33bda4f4f215bdaa7ebb2a79cc5aac3799 (diff)
downloadbarebox-c3789cd49b43ec1c414ba1b0e9f48e8ccc19f8e1.tar.gz
barebox-c3789cd49b43ec1c414ba1b0e9f48e8ccc19f8e1.tar.xz
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 <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/nand/nand.c7
-rw-r--r--drivers/video/fb.c21
-rw-r--r--drivers/video/imx.c17
3 files changed, 24 insertions, 21 deletions
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;
}