1
0
Fork 0

skeletonfb: various corrections

This is mainly correction of types, typos and missing characters in the
skeletonfb.c file found while trying to prepare a new fb driver.

[adaplas]
Additions on power management and fixes as per akpm

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Antonino Daplas <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
hifive-unleashed-5.1
Krzysztof Helt 2007-05-08 00:38:25 -07:00 committed by Linus Torvalds
parent e296927bcc
commit 36cc535b85
1 changed files with 142 additions and 53 deletions

View File

@ -51,6 +51,7 @@
#include <linux/delay.h>
#include <linux/fb.h>
#include <linux/init.h>
#include <linux/pci.h>
/*
* This is just simple sample code.
@ -59,6 +60,11 @@
* Even less warranty that it actually works :-)
*/
/*
* Driver data
*/
static char *mode_option __devinitdata;
/*
* If your driver supports multiple boards, you should make the
* below data types arrays, or allocate them dynamically (using kmalloc()).
@ -278,7 +284,7 @@ static int xxxfb_set_par(struct fb_info *info)
*/
static int xxxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
unsigned blue, unsigned transp,
const struct fb_info *info)
struct fb_info *info)
{
if (regno >= 256) /* no. of hw registers */
return -EINVAL;
@ -416,7 +422,7 @@ static int xxxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
* Returns negative errno on error, or zero on success.
*/
static int xxxfb_pan_display(struct fb_var_screeninfo *var,
const struct fb_info *info)
struct fb_info *info)
{
/*
* If your hardware does not support panning, _do_ _not_ implement this
@ -454,7 +460,7 @@ static int xxxfb_pan_display(struct fb_var_screeninfo *var,
* Return !0 for any modes that are unimplemented.
*
*/
static int xxxfb_blank(int blank_mode, const struct fb_info *info)
static int xxxfb_blank(int blank_mode, struct fb_info *info)
{
/* ... */
return 0;
@ -483,7 +489,7 @@ static int xxxfb_blank(int blank_mode, const struct fb_info *info)
* depending on the rastering operation with the value of color which
* is in the current color depth format.
*/
void xxfb_fillrect(struct fb_info *p, const struct fb_fillrect *region)
void xxxfb_fillrect(struct fb_info *p, const struct fb_fillrect *region)
{
/* Meaning of struct fb_fillrect
*
@ -647,21 +653,50 @@ void xxxfb_poll(struct fb_info *info, poll_table *wait)
* If the driver has implemented its own hardware-based drawing function,
* implementing this function is highly recommended.
*/
void xxxfb_sync(struct fb_info *info)
int xxxfb_sync(struct fb_info *info)
{
return 0;
}
/*
* Frame buffer operations
*/
static struct fb_ops xxxfb_ops = {
.owner = THIS_MODULE,
.fb_open = xxxfb_open,
.fb_read = xxxfb_read,
.fb_write = xxxfb_write,
.fb_release = xxxfb_release,
.fb_check_var = xxxfb_check_var,
.fb_set_par = xxxfb_set_par,
.fb_setcolreg = xxxfb_setcolreg,
.fb_blank = xxxfb_blank,
.fb_pan_display = xxxfb_pan_display,
.fb_fillrect = xxxfb_fillrect, /* Needed !!! */
.fb_copyarea = xxxfb_copyarea, /* Needed !!! */
.fb_imageblit = xxxfb_imageblit, /* Needed !!! */
.fb_cursor = xxxfb_cursor, /* Optional !!! */
.fb_rotate = xxxfb_rotate,
.fb_poll = xxxfb_poll,
.fb_sync = xxxfb_sync,
.fb_ioctl = xxxfb_ioctl,
.fb_mmap = xxxfb_mmap,
};
/* ------------------------------------------------------------------------- */
/*
* Initialization
*/
/* static int __init xxfb_probe (struct device *device) -- for platform devs */
static int __init xxxfb_probe(struct pci_dev *dev,
static int __devinit xxxfb_probe(struct pci_dev *dev,
const_struct pci_device_id *ent)
{
struct fb_info *info;
struct xxx_par *par;
struct device = &dev->dev; /* for pci drivers */
struct device* device = &dev->dev; /* for pci drivers */
int cmap_len, retval;
/*
@ -760,7 +795,7 @@ static int __init xxxfb_probe(struct pci_dev *dev,
*
* NOTE: This field is currently unused.
*/
info->pixmap.scan_align = 32
info->pixmap.scan_align = 32;
/***************************** End optional stage ***************************/
/*
@ -770,13 +805,13 @@ static int __init xxxfb_probe(struct pci_dev *dev,
if (!mode_option)
mode_option = "640x480@60";
retval = fb_find_mode(info->var, info, mode_option, NULL, 0, NULL, 8);
retval = fb_find_mode(&info->var, info, mode_option, NULL, 0, NULL, 8);
if (!retval || retval == 4)
return -EINVAL;
/* This has to been done !!! */
fb_alloc_cmap(info->cmap, cmap_len, 0);
fb_alloc_cmap(&info->cmap, cmap_len, 0);
/*
* The following is done in the case of having hardware with a static
@ -811,15 +846,15 @@ static int __init xxxfb_probe(struct pci_dev *dev,
/*
* Cleanup
*/
/* static void __exit xxxfb_remove(struct device *device) */
static void __exit xxxfb_remove(struct pci_dev *dev)
/* static void __devexit xxxfb_remove(struct device *device) */
static void __devexit xxxfb_remove(struct pci_dev *dev)
{
struct fb_info *info = pci_get_drv_data(dev);
/* or dev_get_drv_data(device); */
struct fb_info *info = pci_get_drvdata(dev);
/* or dev_get_drvdata(device); */
if (info) {
unregister_framebuffer(info);
fb_dealloc_cmap(&info.cmap);
fb_dealloc_cmap(&info->cmap);
/* ... */
framebuffer_release(info);
}
@ -827,18 +862,61 @@ static void __exit xxxfb_remove(struct pci_dev *dev)
return 0;
}
#if CONFIG_PCI
#ifdef CONFIG_PCI
#ifdef CONFIG_PM
/**
* xxxfb_suspend - Optional but recommended function. Suspend the device.
* @dev: PCI device
* @msg: the suspend event code.
*
* See Documentation/power/devices.txt for more information
*/
static int xxxfb_suspend(struct pci_dev *dev, pm_message_t msg)
{
struct fb_info *info = pci_get_drvdata(dev);
struct xxxfb_par *par = info->par;
/* suspend here */
return 0;
}
/**
* xxxfb_resume - Optional but recommended function. Resume the device.
* @dev: PCI device
*
* See Documentation/power/devices.txt for more information
*/
static int xxxfb_resume(struct pci_dev *dev)
{
struct fb_info *info = pci_get_drvdata(dev);
struct xxxfb_par *par = info->par;
/* resume here */
return 0;
}
#else
#define xxxfb_suspend NULL
#define xxxfb_resume NULL
#endif /* CONFIG_PM */
static struct pci_device_id xxxfb_id_table[] = {
{ PCI_VENDOR_ID_XXX, PCI_DEVICE_ID_XXX,
PCI_ANY_ID, PCI_ANY_ID, PCI_BASE_CLASS_DISPLAY << 16,
ADDR, 0 },
{ 0, }
};
/* For PCI drivers */
static struct pci_driver xxxfb_driver = {
.name = "xxxfb",
.id_table = xxxfb_devices,
.id_table = xxxfb_id_table,
.probe = xxxfb_probe,
.remove = __devexit_p(xxxfb_remove),
.suspend = xxxfb_suspend, /* optional */
.resume = xxxfb_resume, /* optional */
.suspend = xxxfb_suspend, /* optional but recommended */
.resume = xxxfb_resume, /* optional but recommended */
};
static int __init xxxfb_init(void)
int __init xxxfb_init(void)
{
/*
* For kernel boot options (in 'video=xxxfb:<options>' format)
@ -858,16 +936,53 @@ static void __exit xxxfb_exit(void)
{
pci_unregister_driver(&xxxfb_driver);
}
#else
#else /* non PCI, platform drivers */
#include <linux/platform_device.h>
/* for platform devices */
#ifdef CONFIG_PM
/**
* xxxfb_suspend - Optional but recommended function. Suspend the device.
* @dev: platform device
* @msg: the suspend event code.
*
* See Documentation/power/devices.txt for more information
*/
static int xxxfb_suspend(struct platform_device *dev, pm_message_t msg)
{
struct fb_info *info = platform_get_drvdata(dev);
struct xxxfb_par *par = info->par;
/* suspend here */
return 0;
}
/**
* xxxfb_resume - Optional but recommended function. Resume the device.
* @dev: PCI device
*
* See Documentation/power/devices.txt for more information
*/
static int xxxfb_suspend(struct platform_dev *dev)
{
struct fb_info *info = platform_get_drvdata(dev);
struct xxxfb_par *par = info->par;
/* resume here */
return 0;
}
#else
#define xxxfb_suspend NULL
#define xxxfb_resume NULL
#endif /* CONFIG_PM */
static struct device_driver xxxfb_driver = {
.name = "xxxfb",
.bus = &platform_bus_type,
.probe = xxxfb_probe,
.remove = xxxfb_remove,
.suspend = xxxfb_suspend, /* optional */
.resume = xxxfb_resume, /* optional */
.suspend = xxxfb_suspend, /* optional but recommended */
.resume = xxxfb_resume, /* optional but recommended */
};
static struct platform_device xxxfb_device = {
@ -903,8 +1018,9 @@ static void __exit xxxfb_exit(void)
platform_device_unregister(&xxxfb_device);
driver_unregister(&xxxfb_driver);
}
#endif
#endif /* CONFIG_PCI */
#ifdef MODULE
/*
* Setup
*/
@ -917,34 +1033,7 @@ int __init xxxfb_setup(char *options)
{
/* Parse user speficied options (`video=xxxfb:') */
}
/* ------------------------------------------------------------------------- */
/*
* Frame buffer operations
*/
static struct fb_ops xxxfb_ops = {
.owner = THIS_MODULE,
.fb_open = xxxfb_open,
.fb_read = xxxfb_read,
.fb_write = xxxfb_write,
.fb_release = xxxfb_release,
.fb_check_var = xxxfb_check_var,
.fb_set_par = xxxfb_set_par,
.fb_setcolreg = xxxfb_setcolreg,
.fb_blank = xxxfb_blank,
.fb_pan_display = xxxfb_pan_display,
.fb_fillrect = xxxfb_fillrect, /* Needed !!! */
.fb_copyarea = xxxfb_copyarea, /* Needed !!! */
.fb_imageblit = xxxfb_imageblit, /* Needed !!! */
.fb_cursor = xxxfb_cursor, /* Optional !!! */
.fb_rotate = xxxfb_rotate,
.fb_poll = xxxfb_poll,
.fb_sync = xxxfb_sync,
.fb_ioctl = xxxfb_ioctl,
.fb_mmap = xxxfb_mmap,
};
#endif /* MODULE *?
/* ------------------------------------------------------------------------- */
@ -954,6 +1043,6 @@ static struct fb_ops xxxfb_ops = {
*/
module_init(xxxfb_init);
module_exit(xxxfb_cleanup);
module_exit(xxxfb_remove);
MODULE_LICENSE("GPL");