* [PATCH 13/13] OMAPDSS: DSI: disable DDR_CLK_ALWAYS_ON when entering ULPS
From: Tomi Valkeinen @ 2011-11-24 13:29 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: archit, Tomi Valkeinen
In-Reply-To: <1322141381-5395-1-git-send-email-tomi.valkeinen@ti.com>
ULPS cannot be entered if the DDR clk is enabled. Thus disable the DDR
clk before entering ULPS.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dsi.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index a01a011..9bcb5c2 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -3544,9 +3544,11 @@ static int dsi_enter_ulps(struct platform_device *dsidev)
if (dsi->ulps_enabled)
return 0;
+ /* DDR_CLK_ALWAYS_ON */
if (REG_GET(dsidev, DSI_CLK_CTRL, 13, 13)) {
- DSSERR("DDR_CLK_ALWAYS_ON enabled when entering ULPS\n");
- return -EIO;
+ dsi_if_enable(dsidev, 0);
+ REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 13, 13);
+ dsi_if_enable(dsidev, 1);
}
dsi_sync_vc(dsidev, 0);
--
1.7.4.1
^ permalink raw reply related
* Re: [RFC] Virtual CRTCs (proposal + experimental code)
From: Dave Airlie @ 2011-11-24 13:48 UTC (permalink / raw)
To: Alan Cox; +Cc: linux-fbdev, dri-devel
In-Reply-To: <20111124125853.6ddc1a56@lxorguk.ukuu.org.uk>
On Thu, Nov 24, 2011 at 12:58 PM, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
>> The thing is this is how optimus works, the nvidia gpus have an engine
>> that you can program to move data from the nvidia tiled VRAM format to
>
> This is even more of a special case than DisplayLink ;-)
>
>> Probably a good idea to do some more research on intel/nvidia GPUs.
>> With intel you can't read back from UMA since it'll be uncached memory
>> so unuseable, so you'll need to use the GPU to detile and move to some
>> sort of cached linear area you can readback from.
>
> It's main memory so there are various ways to read it or pull it into
> cached space.
We have no way to detile on the CPU for lots of intel corner cases, I don't hold
out for it being a proper solution, though in theory for hibernate its
a requirement to figure out.
But you can expose stuff via the GTT using fences to detile, but you
can't then get cached access to it.
So no really various ways, none of them useful or faster than getting
the GPU to blit somewhere linear
and flipping the dest mapping.
>
>> I merge this VCRTC stuff I give a lot of people an excuse for not
>> bothering to fix the harder problems that hotplug and dynamic GPUs put
>> in front of you.
>
> I think both cases are slightly missing the mark, both are specialist
> corner cases and once you add things like cameras to the mix that will
> become even more painfully obvious.
>
> The underlying need I think is a way to negotiate a shared buffer format
> or pipeline between two devices. You also need in some cases to think
> about shared fencing, and that is the bit that is really scary.
>
> Figuring out the transform from A to B ('lets both use this buffer
> format') or 'I can render then convert' is one thing. Dealing with two
> GPUs firing into the same buffer while scanning it out I just pray
> doesn't ever need shared fences.
But we have a project looking into all that, called dmabuf, we also
have the PRIME work which we hope to build on top of dmabuf.
The thing is there are lots of building blocks we need to put in
place, and we've mostly identified what they are, its just typing now.
Dave.
^ permalink raw reply
* [PATCH 09/11] video: Remove redundant spi driver bus initialization
From: Lars-Peter Clausen @ 2011-11-24 15:29 UTC (permalink / raw)
To: linux-kernel
Cc: Lars-Peter Clausen, Tomi Valkeinen, Florian Tobias Schandinat,
linux-fbdev, linux-omap
In-Reply-To: <1322148561-25138-1-git-send-email-lars@metafoo.de>
In ancient times it was necessary to manually initialize the bus field of an
spi_driver to spi_bus_type. These days this is done in spi_driver_register(),
so we can drop the manual assignment.
The patch was generated using the following coccinelle semantic patch:
// <smpl>
@@
identifier _driver;
@@
struct spi_driver _driver = {
.driver = {
- .bus = &spi_bus_type,
},
};
// </smpl>
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: linux-fbdev@vger.kernel.org
Cc: linux-omap@vger.kernel.org
---
drivers/video/omap/lcd_mipid.c | 1 -
drivers/video/omap2/displays/panel-acx565akm.c | 1 -
drivers/video/omap2/displays/panel-n8x0.c | 1 -
.../omap2/displays/panel-nec-nl8048hl11-01b.c | 1 -
.../video/omap2/displays/panel-tpo-td043mtea1.c | 1 -
5 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/drivers/video/omap/lcd_mipid.c b/drivers/video/omap/lcd_mipid.c
index eb381db..8d546dd 100644
--- a/drivers/video/omap/lcd_mipid.c
+++ b/drivers/video/omap/lcd_mipid.c
@@ -603,7 +603,6 @@ static int mipid_spi_remove(struct spi_device *spi)
static struct spi_driver mipid_spi_driver = {
.driver = {
.name = MIPID_MODULE_NAME,
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = mipid_spi_probe,
diff --git a/drivers/video/omap2/displays/panel-acx565akm.c b/drivers/video/omap2/displays/panel-acx565akm.c
index dbd59b8..51a87e1 100644
--- a/drivers/video/omap2/displays/panel-acx565akm.c
+++ b/drivers/video/omap2/displays/panel-acx565akm.c
@@ -803,7 +803,6 @@ static int acx565akm_spi_remove(struct spi_device *spi)
static struct spi_driver acx565akm_spi_driver = {
.driver = {
.name = "acx565akm",
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = acx565akm_spi_probe,
diff --git a/drivers/video/omap2/displays/panel-n8x0.c b/drivers/video/omap2/displays/panel-n8x0.c
index 150e8ba..dc9408d 100644
--- a/drivers/video/omap2/displays/panel-n8x0.c
+++ b/drivers/video/omap2/displays/panel-n8x0.c
@@ -708,7 +708,6 @@ static int mipid_spi_remove(struct spi_device *spi)
static struct spi_driver mipid_spi_driver = {
.driver = {
.name = "lcd_mipid",
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = mipid_spi_probe,
diff --git a/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c b/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
index 2ba9d0c..8365e77 100644
--- a/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
+++ b/drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
@@ -303,7 +303,6 @@ static struct spi_driver nec_8048_spi_driver = {
.resume = nec_8048_spi_resume,
.driver = {
.name = "nec_8048_spi",
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
};
diff --git a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c
index 2462b9e..e6649aa 100644
--- a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c
+++ b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c
@@ -512,7 +512,6 @@ static int __devexit tpo_td043_spi_remove(struct spi_device *spi)
static struct spi_driver tpo_td043_spi_driver = {
.driver = {
.name = "tpo_td043mtea1_panel_spi",
- .bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.probe = tpo_td043_spi_probe,
--
1.7.7.1
^ permalink raw reply related
* Re: [RFC] Virtual CRTCs (proposal + experimental code)
From: Ilija Hadzic @ 2011-11-25 4:08 UTC (permalink / raw)
To: Dave Airlie; +Cc: linux-fbdev, dri-devel
In-Reply-To: <CAPM=9tx3ue8+PQ6QBxL_0Do2kLB01Q0yN-FOZrJkY2RKiyNm4Q@mail.gmail.com>
On Thu, 24 Nov 2011, Dave Airlie wrote:
> Okay so thats pretty much how I expected it to work, I don't think
> Virtual makes sense for a displaylink attached device though,
> again if you were using a real driver you would just re-use whatever
> output type it uses, though I'm not sure how well that works,
That is the consequence of the fact that virtual CRTCs are created at
startup time when attached CTD is not known, while CTDs are attached at
runtime. So when I register the virtual CRTC and the associated connector
I have to use something for the connector type.
Admitting that my logic is biased by my design, to me "Virtual" connector
type is an indicative that from GPU's perspective it's a connector that
does not physically exist and is yet to be attached to some real display
device. At that point the properties of the attached display become known
to the system.
>
> Do you propogate full EDID information and all the modes or just the
> supported modes? we use this in userspace to put monitor names in
> GNOME display settings etc.
>
Right now we propagate the entire list of modes that the attached CTD
device has queried from the connected display (monitor). Propagating full
EDID is really easy to add. That's if the CTD is driver for some real
display. If CTD is just a "make-believe" display whose purpose is to be
the conduit to some other pixel-processing component (e.g. V4L2CTD), then
at some point in the chain we have to make up the set of modes that the
logical display accepts and in that case the EDID does not exist by
definition.
> what does xrandr output looks like for a radeon GPU with 4 vcrtcs? do
> you see 4 disconnected connectors? that again isn't a pretty user
> experience.
>
Yes it shows 4 disconnected monitors. To me that is a logical consequence
of the design in which virtual CRTCs and associated virtual connectors are
always there. By know, it's clear to me that you are not too thrilled
about it, but please allow me to turn the question back to you: in your
solution with udl-v2 driver and a dedicated DDX for it, can you do the big
desktop that spans across GPU's local and "foreign" displays and have
acceleration on both? If not, what would it take you to get there and how
complex the end result will be?
I'll get to Optimus/PRIME use case later, but if we for the moment focus
on the use case in which a dumb framebuffer device extens the number of
displays of a rendering-capable GPU, I think that VCRTCM offers quite a
complete and universal solution and it is completely transparent with
regard to the application, window manager, and display server.
Radeon + DisplayLink is the specific example. But in general it's Any GPU
+ Any fbdev. It's not just one use case, it's a whole class of use cases
that would follow the same principle and for then the VCRTC alone
suffices.
> My main problem with this is as I'll explain below it only covers some
> of the use cases, and I don't want a 50% solution at this point, by
> doing something like this you are making it harder to get proper
> support into something like wayland as they can ignore some of the
> problems, however since this doesn't solve all the other problems it
> means getting to a finished solution is actually less likely to
> happen.
>
I presume that by 50% solution you are referring to Optimus/PRIME use
case. That case actually consists of two related, but different problems.
First is "render on node X and display on node Y" and the second is
"dynamically and hitlessly switch rendering between node X and Y".
I have never claimed that VCRTCs solve the second problem (I could switch
by restarting Xorg, but I know that this is not the solution you are
looking for). I fully understand why you want both problems solved at the
same time. However, I don't understand why solving one first would inhibit
solving the other.
On the other hand, the Radeon + DisplayLink tandem use case (or in general
GPU + fbdev tandem) consists only of "render on X, display on Y" problem.
Here, you will probably say that there one can switch between hardware and
software rendering and that it also has both problems. That is true, but
unlike the Optimus/PRIME use case, using fbdev as a display extension to
GPU is still useful alone. My point is that there is a value in solving
first one problem and then follow with the other.
I think the crux of the problem is that you are not convinced that the
VCRTCM solution for problem #1 will make solving problem #2 easier and
maybe you are afraid that it will make it harder. If that's a fair
statement and if having me create an existence proof for problem #2 that
still uses VCRTCM will help bring our positions closer, I am perfectly
willing to do so .... I guess I've just signed up for some hacking ;-)
Note that for hitless GPU switching, I fully agree that support must be in
userspace (you have to swap out paths in Mesa and DDX before even getting
to kernel), but like I said, that is a separate problem from redirecting
the display to another node.
> r600 has 16 tiling
> modes (we might only see 2 of these on scanout)
But VCRTC emulates a CRTC, so the only ones relevant are those that we see
on the scnout. Do we really anticipate using all 16 for CRTC buffers ?
>
> The thing is this is how optimus works, the nvidia gpus have an engine
> that you can program to move data from the nvidia tiled VRAM format to
> the intel main memory tiled format, and make if efficent. radeon's
> also have some engines that AMD so far haven't told us about, but
> someone with no NDA with AMD could easily start REing that sort of
> thing.
>
If we could have every GPU efficiently push out pixels in some "common
denominator" format that would be ideal, but at this time, the reality is
far from it. Whether the obstacles are technical or legal, doesn't matter.
I fully understand your concern about the number of tiling/detiling
combinations getting out of control, but I am not sure that the problem is
as bad as you picture it if CRTC buffer uses only a subset of available
tiling modes.
>
> Switchable/Optimus mode has two modes of operation,
>
> a) nvidia GPU is rendering engine and the intel GPU is just used as a
> scanout buffer for the LVDS panel. This mode is used when an external
> digital display is plugged in, or in some plugged in configurations.
>
> b) intel GPU is primary rendering engine, and the nvidia gpu is used
> as an offload engine. This mode is used when on battery or power
> saving, with no external displays plugged in. You can completely turn
> on/off the nvidia GPU.
>
> Moving between a and b has to be completely dynamic, userspace apps
> need to deal with the whole world changing beneath them.
>
So case a) is "render on X display on Y" problem and case b) (when NVidia
is turned off, offload aside) is just a traditional rendering on one
(Intel) GPU. Real sticky point is dynamic switching and offload.
> There is also switchable graphics mode, where there is a MUX used to
> switch the outputs between the two GPUs.
>
One question for my education: I understand that MUX is essentially a
switch outside the two GPUs that selects whether the output takes NVidia's
"connector" or Intel's "connector", right ? When MUX is involved, then you
don't have "render on X display on Y" problem at all, but it's only the
"dynamic switching" problem. Is my understanding correct ?
There are also MUX-less laptops, where you only have case a)/b) that you
described above, right ?
> So the main problem with taking all this code on-board is it sort of
> solves (a), and (b) needs another bunch of work. Now I'd rather not
> solve 50% of the issue and have future userspace apps just think they
> can ignore the problem. As much as I dislike the whole dual-gpu setups
> the fact is they exist and we can't change that, so writing userspace
> to ignore the problem because its too hard isn't going to work. So if
> I merge this VCRTC stuff I give a lot of people an excuse for not
> bothering to fix the harder problems that hotplug and dynamic GPUs put
> in front of you.
>
Point taken. I still think that we are actually dealing with two separate
problems, but you have your reasons why you want them solved together.
I also have a few more use cases which are solved with VCRTCM only and
don't need dynamic switching, so these and also "3D Accel + DisplayLink"
one will suffer by having to wait for full solution that covers all use
cases, but that's your call and I don't question it.
I hope that you are not categorically dismissing an option that the
solution can be implemented on the top of VCRTCM and that if I come back
with some more code that shows that it addresses your concern that you
will be perceptive to another round of review. I do appreciate you taking
the time to look at this. I know that you are overbusy with day-to-day
patches and merging.
I understand that the burden of building an existence proof falls on me
and I am perfectly fine with that. BTW, If some poor soul reading this
buys into my arguments and wants to join me in some hacking, I'd
definitely welcome the collaboration ;-).
-- Ilija
^ permalink raw reply
* Re: [RFC] Virtual CRTCs (proposal + experimental code)
From: Ilija Hadzic @ 2011-11-25 5:11 UTC (permalink / raw)
To: Daniel Vetter; +Cc: linux-fbdev, dri-devel
In-Reply-To: <20111124105249.GA3867@phenom.ffwll.local>
>
> So I think we do have enough people interested in this and should be able
> to cobble together something that does The Right Thing.
>
We indeed have a non-trivial set of people interested in the same set of
problems and each of us has partial and maybe competing solution. I want
to make it clear that my, maybe disruptive and different from the
plan-of-record, proposal should not be viewed as destructive or
distracting. I am just offering to the community what I think is useful.
If this discussion sparks some joint effort that will bring us to the
solution that everyone is happy with, even if no line of my code is found
useful, I am perfectly fine with that (and I'll join the effort).
So at this point I think I should put out my back-of-the-napkin
desiderata. That will hopefully shed some light on where I am coming from
with VCRTCM proposal.
I want to be able to pull pixels out of the GPU and redirect them to an
arbitrary device that can do something useful with them. This should not
be limited to shooting photons into human eyeballs. I want to be able to
run my applications without having to run X. I'd like the solution to be
transparent to the application; that is, if I can write an application
that can render something to a full screen, I want to redirect that
"screen" to wherever I want without having to rewrite, recompile or relink
the application. Actually, I want to do that redirection at runtime. I'd
like to support all of the above in a way that it can also help solve more
imminent shotcomings of Linux graphics system (Optimus, DisplayLink, etc.
... cf. previous E-mails in this thread). I'd like it to work with
multiple render nodes on the same GPU (something like Dave's multiseat
work, in which both GPU and its display resources are virtual).
The logical consequence of this is that the render node and the display
node should at some point become logically separate (different driver
modules) even if they are physically on the same GPU. They are really two
different subsystems that just happen to reside on the same circuit
board, so it makes sense to separate them.
I don't think what I am saying is anything unique and what I said probably
overlaps in good part with what others also want from the graphics
subsystem. I can see the role of VCRTCM in all of the above, but I am
open-minded. If we end up with a solution that has nothing to do with
VCRTCM, I have no emotional ties with my code (and code of my colleagues
that worked with me so far).
-- Ilija
^ permalink raw reply
* RE: [PATCH] video:da8xx-fb: Add 24bpp LCD configuration support
From: Manjunathappa, Prakash @ 2011-11-25 7:45 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1321358479-20390-1-git-send-email-prakash.pm@ti.com>
Hi Florian Tobias Schandinat
On Sun, Nov 20, 2011 at 06:11:44, Florian Tobias Schandinat wrote:
> On 11/15/2011 12:01 PM, Manjunathappa, Prakash wrote:
> > LCD controller on am335x supports 24bpp raster configuration
> > in addition to ones on da850. LCDC also supports 24bpp in unpacked
> > format having ARGB:8888 32bpp format data in DDR, but it doesn't
> > interpret Alpha component of the data.
> >
> > Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
> > ---
> > drivers/video/da8xx-fb.c | 57 +++++++++++++++++++++++++++++++++++++++++++++-
> > 1 files changed, 56 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
> > index 55f91d9..e111971 100644
> > --- a/drivers/video/da8xx-fb.c
> > +++ b/drivers/video/da8xx-fb.c
> > @@ -82,6 +82,8 @@
> > #define LCD_V2_LIDD_CLK_EN BIT(1)
> > #define LCD_V2_CORE_CLK_EN BIT(0)
> > #define LCD_V2_LPP_B10 26
> > +#define LCD_V2_TFT_24BPP_MODE BIT(25)
> > +#define LCD_V2_TFT_24BPP_UNPACK BIT(26)
> >
> > /* LCD Raster Timing 2 Register */
> > #define LCD_AC_BIAS_TRANSITIONS_PER_INT(x) ((x) << 16)
> > @@ -151,7 +153,7 @@ struct da8xx_fb_par {
> > unsigned int dma_end;
> > struct clk *lcdc_clk;
> > int irq;
> > - unsigned short pseudo_palette[16];
> > + unsigned short pseudo_palette[32];
>
> This looks wrong, include/linux/fb.h says:
> "void *pseudo_palette; /* Fake palette of 16 colors */"
> This will probably also simplify the code below to write to the pseudo palette.
> But I think you have to increase the data type of the palette, maybe to u32?
>
>
Yes, I accept that data type has to be changed to u32. But how does it simplify updating of pseudo palette.
Thanks,
Prakash
> Best regards,
>
> Florian Tobias Schandinat
>
> > unsigned int palette_sz;
> > unsigned int pxl_clk;
> > int blank;
> > @@ -458,6 +460,9 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
> > {
> > u32 reg;
> >
> > + if ((bpp > 16) && (lcd_revision = LCD_VERSION_1))
> > + return -EINVAL;
> > +
> > /* Set the Panel Width */
> > /* Pixels per line = (PPL + 1)*16 */
> > if (lcd_revision = LCD_VERSION_1) {
> > @@ -501,6 +506,13 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
> > reg = lcdc_read(LCD_RASTER_CTRL_REG) & ~(1 << 8);
> > if (raster_order)
> > reg |= LCD_RASTER_ORDER;
> > +
> > + if (bpp = 24)
> > + reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE);
> > + else if (bpp = 32)
> > + reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE
> > + | LCD_V2_TFT_24BPP_UNPACK);
> > +
> > lcdc_write(reg, LCD_RASTER_CTRL_REG);
> >
> > switch (bpp) {
> > @@ -508,6 +520,8 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
> > case 2:
> > case 4:
> > case 16:
> > + case 24:
> > + case 32:
> > par->palette_sz = 16 * 2;
> > break;
> >
> > @@ -537,6 +551,9 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
> > if (info->fix.visual = FB_VISUAL_DIRECTCOLOR)
> > return 1;
> >
> > + if ((info->var.bits_per_pixel > 16) && (lcd_revision = LCD_VERSION_1))
> > + return 1;
> > +
> > if (info->var.bits_per_pixel = 8) {
> > red >>= 4;
> > green >>= 8;
> > @@ -566,6 +583,23 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
> > update_hw = 1;
> > palette[0] = 0x4000;
> > }
> > + } else if (((info->var.bits_per_pixel = 32) && regno < 32) ||
> > + ((info->var.bits_per_pixel = 24) && regno < 24)) {
> > + red >>= (24 - info->var.red.length);
> > + red <<= info->var.red.offset;
> > +
> > + green >>= (24 - info->var.green.length);
> > + green <<= info->var.green.offset;
> > +
> > + blue >>= (24 - info->var.blue.length);
> > + blue <<= info->var.blue.offset;
> > +
> > + par->pseudo_palette[regno] = red | green | blue;
> > +
> > + if (palette[0] != 0x4000) {
> > + update_hw = 1;
> > + palette[0] = 0x4000;
> > + }
> > }
> >
> > /* Update the palette in the h/w as needed. */
> > @@ -777,6 +811,9 @@ static int fb_check_var(struct fb_var_screeninfo *var,
> > {
> > int err = 0;
> >
> > + if ((var->bits_per_pixel > 16) && (lcd_revision = LCD_VERSION_1))
> > + return -EINVAL;
> > +
> > switch (var->bits_per_pixel) {
> > case 1:
> > case 8:
> > @@ -809,6 +846,24 @@ static int fb_check_var(struct fb_var_screeninfo *var,
> > var->transp.offset = 0;
> > var->transp.length = 0;
> > break;
> > + case 24:
> > + var->red.offset = 16;
> > + var->red.length = 8;
> > + var->green.offset = 8;
> > + var->green.length = 8;
> > + var->blue.offset = 0;
> > + var->blue.length = 8;
> > + break;
> > + case 32:
> > + var->transp.offset = 24;
> > + var->transp.length = 8;
> > + var->red.offset = 16;
> > + var->red.length = 8;
> > + var->green.offset = 8;
> > + var->green.length = 8;
> > + var->blue.offset = 0;
> > + var->blue.length = 8;
> > + break;
> > default:
> > err = -EINVAL;
> > }
>
>
^ permalink raw reply
* [PATCH] video: s3c-fb: Unify runtime and system PM functions
From: Mark Brown @ 2011-11-25 18:55 UTC (permalink / raw)
To: linux-fbdev
The s3c-fb driver has separate runtime and system PM functions but the
implementations are identical so far as I can tell so unify them for
simplicity.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
drivers/video/s3c-fb.c | 75 +-----------------------------------------------
1 files changed, 1 insertions(+), 74 deletions(-)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 12eaee0..0860590 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -1590,77 +1590,9 @@ static int s3c_fb_resume(struct device *dev)
return 0;
}
-
-static int s3c_fb_runtime_suspend(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct s3c_fb *sfb = platform_get_drvdata(pdev);
- struct s3c_fb_win *win;
- int win_no;
-
- for (win_no = S3C_FB_MAX_WIN - 1; win_no >= 0; win_no--) {
- win = sfb->windows[win_no];
- if (!win)
- continue;
-
- /* use the blank function to push into power-down */
- s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo);
- }
-
- if (!sfb->variant.has_clksel)
- clk_disable(sfb->lcd_clk);
-
- clk_disable(sfb->bus_clk);
- return 0;
-}
-
-static int s3c_fb_runtime_resume(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct s3c_fb *sfb = platform_get_drvdata(pdev);
- struct s3c_fb_platdata *pd = sfb->pdata;
- struct s3c_fb_win *win;
- int win_no;
-
- clk_enable(sfb->bus_clk);
-
- if (!sfb->variant.has_clksel)
- clk_enable(sfb->lcd_clk);
-
- /* setup gpio and output polarity controls */
- pd->setup_gpio();
- writel(pd->vidcon1, sfb->regs + VIDCON1);
-
- /* zero all windows before we do anything */
- for (win_no = 0; win_no < sfb->variant.nr_windows; win_no++)
- s3c_fb_clear_win(sfb, win_no);
-
- for (win_no = 0; win_no < sfb->variant.nr_windows - 1; win_no++) {
- void __iomem *regs = sfb->regs + sfb->variant.keycon;
-
- regs += (win_no * 8);
- writel(0xffffff, regs + WKEYCON0);
- writel(0xffffff, regs + WKEYCON1);
- }
-
- /* restore framebuffers */
- for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {
- win = sfb->windows[win_no];
- if (!win)
- continue;
-
- dev_dbg(&pdev->dev, "resuming window %d\n", win_no);
- s3c_fb_set_par(win->fbinfo);
- }
-
- return 0;
-}
-
#else
#define s3c_fb_suspend NULL
#define s3c_fb_resume NULL
-#define s3c_fb_runtime_suspend NULL
-#define s3c_fb_runtime_resume NULL
#endif
@@ -1985,12 +1917,7 @@ static struct platform_device_id s3c_fb_driver_ids[] = {
};
MODULE_DEVICE_TABLE(platform, s3c_fb_driver_ids);
-static const struct dev_pm_ops s3cfb_pm_ops = {
- .suspend = s3c_fb_suspend,
- .resume = s3c_fb_resume,
- .runtime_suspend = s3c_fb_runtime_suspend,
- .runtime_resume = s3c_fb_runtime_resume,
-};
+UNIVERSAL_DEV_PM_OPS(s3cfb_pm_ops, s3c_fb_suspend, s3c_fb_resume, NULL);
static struct platform_driver s3c_fb_driver = {
.probe = s3c_fb_probe,
--
1.7.7.3
^ permalink raw reply related
* Re: [PATCH] video:da8xx-fb: Add 24bpp LCD configuration support
From: Florian Tobias Schandinat @ 2011-11-25 21:28 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1321358479-20390-1-git-send-email-prakash.pm@ti.com>
On 11/25/2011 07:45 AM, Manjunathappa, Prakash wrote:
> Hi Florian Tobias Schandinat
>
> On Sun, Nov 20, 2011 at 06:11:44, Florian Tobias Schandinat wrote:
>> On 11/15/2011 12:01 PM, Manjunathappa, Prakash wrote:
>>> LCD controller on am335x supports 24bpp raster configuration
>>> in addition to ones on da850. LCDC also supports 24bpp in unpacked
>>> format having ARGB:8888 32bpp format data in DDR, but it doesn't
>>> interpret Alpha component of the data.
>>>
>>> Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
>>> ---
>>> drivers/video/da8xx-fb.c | 57 +++++++++++++++++++++++++++++++++++++++++++++-
>>> 1 files changed, 56 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
>>> index 55f91d9..e111971 100644
>>> --- a/drivers/video/da8xx-fb.c
>>> +++ b/drivers/video/da8xx-fb.c
>>> @@ -82,6 +82,8 @@
>>> #define LCD_V2_LIDD_CLK_EN BIT(1)
>>> #define LCD_V2_CORE_CLK_EN BIT(0)
>>> #define LCD_V2_LPP_B10 26
>>> +#define LCD_V2_TFT_24BPP_MODE BIT(25)
>>> +#define LCD_V2_TFT_24BPP_UNPACK BIT(26)
>>>
>>> /* LCD Raster Timing 2 Register */
>>> #define LCD_AC_BIAS_TRANSITIONS_PER_INT(x) ((x) << 16)
>>> @@ -151,7 +153,7 @@ struct da8xx_fb_par {
>>> unsigned int dma_end;
>>> struct clk *lcdc_clk;
>>> int irq;
>>> - unsigned short pseudo_palette[16];
>>> + unsigned short pseudo_palette[32];
>>
>> This looks wrong, include/linux/fb.h says:
>> "void *pseudo_palette; /* Fake palette of 16 colors */"
>> This will probably also simplify the code below to write to the pseudo palette.
>> But I think you have to increase the data type of the palette, maybe to u32?
>>
>>
>
> Yes, I accept that data type has to be changed to u32. But how does it simplify updating of pseudo palette.
Your code is even buggier than I saw. Where did you get the information how to
write fb_setcolreg?
First, as I wrote in my last mail, the pseudo_palette has always exactly 16
colors, regardless of the color depth.
Second, the existing code is some sort of wrong to check for bpp the only thing
that really matters is whether it is Truecolor or not, the code for handling the
Truecolor case will very likely be always the same regardless of the bpp, just
the values in {red,green,blue}{length,offset} differ.
Third your patch is wrong in using 24 in things like
red >>= (24 - info->var.red.length);
skeletonfb.c: "The values supplied have a 16 bit magnitude which needs to be
scaled in this function for the hardware."
So it has to be 16, always.
Just have a look at drivers/video/skeletonfb.c, it contains much useful information.
Best regards,
Florian Tobias Schandinat
>
> Thanks,
> Prakash
>
>> Best regards,
>>
>> Florian Tobias Schandinat
>>
>>> unsigned int palette_sz;
>>> unsigned int pxl_clk;
>>> int blank;
>>> @@ -458,6 +460,9 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
>>> {
>>> u32 reg;
>>>
>>> + if ((bpp > 16) && (lcd_revision = LCD_VERSION_1))
>>> + return -EINVAL;
>>> +
>>> /* Set the Panel Width */
>>> /* Pixels per line = (PPL + 1)*16 */
>>> if (lcd_revision = LCD_VERSION_1) {
>>> @@ -501,6 +506,13 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
>>> reg = lcdc_read(LCD_RASTER_CTRL_REG) & ~(1 << 8);
>>> if (raster_order)
>>> reg |= LCD_RASTER_ORDER;
>>> +
>>> + if (bpp = 24)
>>> + reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE);
>>> + else if (bpp = 32)
>>> + reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE
>>> + | LCD_V2_TFT_24BPP_UNPACK);
>>> +
>>> lcdc_write(reg, LCD_RASTER_CTRL_REG);
>>>
>>> switch (bpp) {
>>> @@ -508,6 +520,8 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,
>>> case 2:
>>> case 4:
>>> case 16:
>>> + case 24:
>>> + case 32:
>>> par->palette_sz = 16 * 2;
>>> break;
>>>
>>> @@ -537,6 +551,9 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
>>> if (info->fix.visual = FB_VISUAL_DIRECTCOLOR)
>>> return 1;
>>>
>>> + if ((info->var.bits_per_pixel > 16) && (lcd_revision = LCD_VERSION_1))
>>> + return 1;
>>> +
>>> if (info->var.bits_per_pixel = 8) {
>>> red >>= 4;
>>> green >>= 8;
>>> @@ -566,6 +583,23 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
>>> update_hw = 1;
>>> palette[0] = 0x4000;
>>> }
>>> + } else if (((info->var.bits_per_pixel = 32) && regno < 32) ||
>>> + ((info->var.bits_per_pixel = 24) && regno < 24)) {
>>> + red >>= (24 - info->var.red.length);
>>> + red <<= info->var.red.offset;
>>> +
>>> + green >>= (24 - info->var.green.length);
>>> + green <<= info->var.green.offset;
>>> +
>>> + blue >>= (24 - info->var.blue.length);
>>> + blue <<= info->var.blue.offset;
>>> +
>>> + par->pseudo_palette[regno] = red | green | blue;
>>> +
>>> + if (palette[0] != 0x4000) {
>>> + update_hw = 1;
>>> + palette[0] = 0x4000;
>>> + }
>>> }
>>>
>>> /* Update the palette in the h/w as needed. */
>>> @@ -777,6 +811,9 @@ static int fb_check_var(struct fb_var_screeninfo *var,
>>> {
>>> int err = 0;
>>>
>>> + if ((var->bits_per_pixel > 16) && (lcd_revision = LCD_VERSION_1))
>>> + return -EINVAL;
>>> +
>>> switch (var->bits_per_pixel) {
>>> case 1:
>>> case 8:
>>> @@ -809,6 +846,24 @@ static int fb_check_var(struct fb_var_screeninfo *var,
>>> var->transp.offset = 0;
>>> var->transp.length = 0;
>>> break;
>>> + case 24:
>>> + var->red.offset = 16;
>>> + var->red.length = 8;
>>> + var->green.offset = 8;
>>> + var->green.length = 8;
>>> + var->blue.offset = 0;
>>> + var->blue.length = 8;
>>> + break;
>>> + case 32:
>>> + var->transp.offset = 24;
>>> + var->transp.length = 8;
>>> + var->red.offset = 16;
>>> + var->red.length = 8;
>>> + var->green.offset = 8;
>>> + var->green.length = 8;
>>> + var->blue.offset = 0;
>>> + var->blue.length = 8;
>>> + break;
>>> default:
>>> err = -EINVAL;
>>> }
>>
>>
>
>
^ permalink raw reply
* Re: [PATCH v3 1/3] fbdev: Add FOURCC-based format configuration API
From: Florian Tobias Schandinat @ 2011-11-25 22:09 UTC (permalink / raw)
To: Laurent Pinchart; +Cc: linux-fbdev, linux-media, magnus.damm
In-Reply-To: <201111241150.38653.laurent.pinchart@ideasonboard.com>
Hi Laurent,
On 11/24/2011 10:50 AM, Laurent Pinchart wrote:
> Hi Florian,
>
> Gentle ping ?
Sorry, but I'm very busy at the moment and therefore time-consuming things, like
solving challenging problems, are delayed for some time.
>
> On Sunday 20 November 2011 11:55:22 Laurent Pinchart wrote:
>> On Sunday 20 November 2011 03:00:33 Florian Tobias Schandinat wrote:
>>> Hi Laurent,
>>>
>>> On 08/31/2011 11:18 AM, Laurent Pinchart wrote:
>>>> This API will be used to support YUV frame buffer formats in a standard
>>>> way.
>>>
>>> looks like the union is causing problems. With this patch applied I get
>>>
>>> errors like this:
>>> CC [M] drivers/auxdisplay/cfag12864bfb.o
>>>
>>> drivers/auxdisplay/cfag12864bfb.c:57: error: unknown field ‘red’
>>> specified in initializer
>>
>> *ouch*
>>
>> gcc < 4.6 chokes on anonymous unions initializers :-/
>>
>> [snip]
>>
>>>> @@ -246,12 +251,23 @@ struct fb_var_screeninfo {
>>>>
>>>> __u32 yoffset; /* resolution */
>>>>
>>>> __u32 bits_per_pixel; /* guess what */
>>>>
>>>> - __u32 grayscale; /* != 0 Graylevels instead of colors */
>>>>
>>>> - struct fb_bitfield red; /* bitfield in fb mem if true color, */
>>>> - struct fb_bitfield green; /* else only length is significant */
>>>> - struct fb_bitfield blue;
>>>> - struct fb_bitfield transp; /* transparency */
>>>> + union {
>>>> + struct { /* Legacy format API */
>>>> + __u32 grayscale; /* 0 = color, 1 = grayscale */
>>>> + /* bitfields in fb mem if true color, else only */
>>>> + /* length is significant */
>>>> + struct fb_bitfield red;
>>>> + struct fb_bitfield green;
>>>> + struct fb_bitfield blue;
>>>> + struct fb_bitfield transp; /* transparency */
>>>> + };
>>>> + struct { /* FOURCC-based format API */
>>>> + __u32 fourcc; /* FOURCC format */
>>>> + __u32 colorspace;
>>>> + __u32 reserved[11];
>>>> + } fourcc;
>>>> + };
>>
>> We can't name the union, otherwise this will change the userspace API.
>>
>> We could "fix" the problem on the kernel side with
>>
>> #ifdef __KERNEL__
>> } color;
>> #else
>> };
>> #endif
>
> (and the structure that contains the grayscale, red, green, blue and transp
> fields would need to be similarly named, the "rgb" name comes to mind)
Which, I guess, would require modifying all drivers?
I don't consider that a good idea. Maybe the simplest solution would be to drop
the union idea and just accept an utterly misleading name "grayscale" for
setting the FOURCC value. The colorspace could use one of the reserved fields at
the end or do you worry that we need to add a lot of other things?
Best regards,
Florian Tobias Schandinat
>
>> That's quite hackish though... What's your opinion ?
>>
>> It would also not handle userspace code that initializes an
>> fb_var_screeninfo structure with named initializers, but that shouldn't
>> happen, as application should read fb_var_screeninfo , modify it and write
>> it back.
>>
>>>> __u32 nonstd; /* != 0 Non standard pixel format */
>
^ permalink raw reply
* [PATCH] video: convert drivers/video/* to use
From: Axel Lin @ 2011-11-26 2:25 UTC (permalink / raw)
To: linux-kernel
Cc: Wan ZongShun, Sascha Hauer, Lennert Buytenhek, Ben Dooks,
Alexey Charkov, Damian Hobson-Garcia, Manuel Lauss,
Florian Tobias Schandinat, linux-fbdev
This patch converts the drivers in drivers/video/* to use the
module_platform_driver() macro which makes the code smaller and a bit
simpler.
Cc: Wan ZongShun <mcuos.com@gmail.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Lennert Buytenhek <buytenh@marvell.com>
Cc: Ben Dooks <ben@simtec.co.uk>
Cc: Alexey Charkov <alchark@gmail.com>
Cc: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Cc: Manuel Lauss <mano@roarinelk.homelinux.net>
Signed-off-by: Axel Lin <axel.lin@gmail.com>
---
drivers/video/mxsfb.c | 13 +------------
drivers/video/nuc900fb.c | 13 +------------
drivers/video/pxa168fb.c | 12 +-----------
drivers/video/pxa3xx-gcu.c | 15 +--------------
drivers/video/s3c-fb.c | 13 +------------
drivers/video/sh7760fb.c | 13 +------------
drivers/video/sh_mobile_lcdcfb.c | 13 +------------
drivers/video/sh_mobile_meram.c | 13 +------------
drivers/video/sm501fb.c | 13 +------------
drivers/video/vt8500lcdfb.c | 13 +------------
drivers/video/w100fb.c | 13 +------------
drivers/video/wm8505fb.c | 13 +------------
drivers/video/wmt_ge_rops.c | 13 +------------
drivers/video/xilinxfb.c | 20 +-------------------
14 files changed, 14 insertions(+), 176 deletions(-)
diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index d837d63..18742c2 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -902,18 +902,7 @@ static struct platform_driver mxsfb_driver = {
},
};
-static int __init mxsfb_init(void)
-{
- return platform_driver_register(&mxsfb_driver);
-}
-
-static void __exit mxsfb_exit(void)
-{
- platform_driver_unregister(&mxsfb_driver);
-}
-
-module_init(mxsfb_init);
-module_exit(mxsfb_exit);
+module_platform_driver(mxsfb_devtype);
MODULE_DESCRIPTION("Freescale mxs framebuffer driver");
MODULE_AUTHOR("Sascha Hauer, Pengutronix");
diff --git a/drivers/video/nuc900fb.c b/drivers/video/nuc900fb.c
index d1fbbd8..e10f551 100644
--- a/drivers/video/nuc900fb.c
+++ b/drivers/video/nuc900fb.c
@@ -762,18 +762,7 @@ static struct platform_driver nuc900fb_driver = {
},
};
-int __devinit nuc900fb_init(void)
-{
- return platform_driver_register(&nuc900fb_driver);
-}
-
-static void __exit nuc900fb_cleanup(void)
-{
- platform_driver_unregister(&nuc900fb_driver);
-}
-
-module_init(nuc900fb_init);
-module_exit(nuc900fb_cleanup);
+module_platform_driver(nuc900fb_driver);
MODULE_DESCRIPTION("Framebuffer driver for the NUC900");
MODULE_LICENSE("GPL");
diff --git a/drivers/video/pxa168fb.c b/drivers/video/pxa168fb.c
index 18ead6f..8384b94 100644
--- a/drivers/video/pxa168fb.c
+++ b/drivers/video/pxa168fb.c
@@ -832,17 +832,7 @@ static struct platform_driver pxa168fb_driver = {
.remove = __devexit_p(pxa168fb_remove),
};
-static int __init pxa168fb_init(void)
-{
- return platform_driver_register(&pxa168fb_driver);
-}
-module_init(pxa168fb_init);
-
-static void __exit pxa168fb_exit(void)
-{
- platform_driver_unregister(&pxa168fb_driver);
-}
-module_exit(pxa168fb_exit);
+module_platform_driver(pxa168fb_driver);
MODULE_AUTHOR("Lennert Buytenhek <buytenh@marvell.com> "
"Green Wan <gwan@marvell.com>");
diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/pxa3xx-gcu.c
index 1ed8b36..1d71c08 100644
--- a/drivers/video/pxa3xx-gcu.c
+++ b/drivers/video/pxa3xx-gcu.c
@@ -747,20 +747,7 @@ static struct platform_driver pxa3xx_gcu_driver = {
},
};
-static int __init
-pxa3xx_gcu_init(void)
-{
- return platform_driver_register(&pxa3xx_gcu_driver);
-}
-
-static void __exit
-pxa3xx_gcu_exit(void)
-{
- platform_driver_unregister(&pxa3xx_gcu_driver);
-}
-
-module_init(pxa3xx_gcu_init);
-module_exit(pxa3xx_gcu_exit);
+module_platform_driver(pxa3xx_gcu_driver);
MODULE_DESCRIPTION("PXA3xx graphics controller unit driver");
MODULE_LICENSE("GPL");
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 12eaee0..cf1d11f 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -2003,18 +2003,7 @@ static struct platform_driver s3c_fb_driver = {
},
};
-static int __init s3c_fb_init(void)
-{
- return platform_driver_register(&s3c_fb_driver);
-}
-
-static void __exit s3c_fb_cleanup(void)
-{
- platform_driver_unregister(&s3c_fb_driver);
-}
-
-module_init(s3c_fb_init);
-module_exit(s3c_fb_cleanup);
+module_platform_driver(s3c_fb_driver);
MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");
diff --git a/drivers/video/sh7760fb.c b/drivers/video/sh7760fb.c
index 45e47d8..83b16e2 100644
--- a/drivers/video/sh7760fb.c
+++ b/drivers/video/sh7760fb.c
@@ -585,18 +585,7 @@ static struct platform_driver sh7760_lcdc_driver = {
.remove = __devexit_p(sh7760fb_remove),
};
-static int __init sh7760fb_init(void)
-{
- return platform_driver_register(&sh7760_lcdc_driver);
-}
-
-static void __exit sh7760fb_exit(void)
-{
- platform_driver_unregister(&sh7760_lcdc_driver);
-}
-
-module_init(sh7760fb_init);
-module_exit(sh7760fb_exit);
+module_platform_driver(sh7760_lcdc_driver);
MODULE_AUTHOR("Nobuhiro Iwamatsu, Manuel Lauss");
MODULE_DESCRIPTION("FBdev for SH7760/63 integrated LCD Controller");
diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c
index 1f49ab4..a264ebf 100644
--- a/drivers/video/sh_mobile_lcdcfb.c
+++ b/drivers/video/sh_mobile_lcdcfb.c
@@ -1709,18 +1709,7 @@ static struct platform_driver sh_mobile_lcdc_driver = {
.remove = sh_mobile_lcdc_remove,
};
-static int __init sh_mobile_lcdc_init(void)
-{
- return platform_driver_register(&sh_mobile_lcdc_driver);
-}
-
-static void __exit sh_mobile_lcdc_exit(void)
-{
- platform_driver_unregister(&sh_mobile_lcdc_driver);
-}
-
-module_init(sh_mobile_lcdc_init);
-module_exit(sh_mobile_lcdc_exit);
+module_platform_driver(sh_mobile_lcdc_driver);
MODULE_DESCRIPTION("SuperH Mobile LCDC Framebuffer driver");
MODULE_AUTHOR("Magnus Damm <damm@opensource.se>");
diff --git a/drivers/video/sh_mobile_meram.c b/drivers/video/sh_mobile_meram.c
index 4d63490..f45d83e 100644
--- a/drivers/video/sh_mobile_meram.c
+++ b/drivers/video/sh_mobile_meram.c
@@ -679,18 +679,7 @@ static struct platform_driver sh_mobile_meram_driver = {
.remove = sh_mobile_meram_remove,
};
-static int __init sh_mobile_meram_init(void)
-{
- return platform_driver_register(&sh_mobile_meram_driver);
-}
-
-static void __exit sh_mobile_meram_exit(void)
-{
- platform_driver_unregister(&sh_mobile_meram_driver);
-}
-
-module_init(sh_mobile_meram_init);
-module_exit(sh_mobile_meram_exit);
+module_platform_driver(sh_mobile_meram_driver);
MODULE_DESCRIPTION("SuperH Mobile MERAM driver");
MODULE_AUTHOR("Damian Hobson-Garcia / Takanari Hayama");
diff --git a/drivers/video/sm501fb.c b/drivers/video/sm501fb.c
index a78254c..3690eff 100644
--- a/drivers/video/sm501fb.c
+++ b/drivers/video/sm501fb.c
@@ -2230,18 +2230,7 @@ static struct platform_driver sm501fb_driver = {
},
};
-static int __devinit sm501fb_init(void)
-{
- return platform_driver_register(&sm501fb_driver);
-}
-
-static void __exit sm501fb_cleanup(void)
-{
- platform_driver_unregister(&sm501fb_driver);
-}
-
-module_init(sm501fb_init);
-module_exit(sm501fb_cleanup);
+module_platform_driver(sm501fb_driver);
module_param_named(mode, fb_mode, charp, 0);
MODULE_PARM_DESC(mode,
diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
index 777c21d..2a5fe6e 100644
--- a/drivers/video/vt8500lcdfb.c
+++ b/drivers/video/vt8500lcdfb.c
@@ -457,18 +457,7 @@ static struct platform_driver vt8500lcd_driver = {
},
};
-static int __init vt8500lcd_init(void)
-{
- return platform_driver_register(&vt8500lcd_driver);
-}
-
-static void __exit vt8500lcd_exit(void)
-{
- platform_driver_unregister(&vt8500lcd_driver);
-}
-
-module_init(vt8500lcd_init);
-module_exit(vt8500lcd_exit);
+module_platform_driver(vt8500lcd_driver);
MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com>");
MODULE_DESCRIPTION("LCD controller driver for VIA VT8500");
diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
index 2375e5b..90a2e30 100644
--- a/drivers/video/w100fb.c
+++ b/drivers/video/w100fb.c
@@ -1620,18 +1620,7 @@ static struct platform_driver w100fb_driver = {
},
};
-int __init w100fb_init(void)
-{
- return platform_driver_register(&w100fb_driver);
-}
-
-void __exit w100fb_cleanup(void)
-{
- platform_driver_unregister(&w100fb_driver);
-}
-
-module_init(w100fb_init);
-module_exit(w100fb_cleanup);
+module_platform_driver(w100fb_driver);
MODULE_DESCRIPTION("ATI Imageon w100 framebuffer driver");
MODULE_LICENSE("GPL");
diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
index 96e34a5..c8703bd 100644
--- a/drivers/video/wm8505fb.c
+++ b/drivers/video/wm8505fb.c
@@ -404,18 +404,7 @@ static struct platform_driver wm8505fb_driver = {
},
};
-static int __init wm8505fb_init(void)
-{
- return platform_driver_register(&wm8505fb_driver);
-}
-
-static void __exit wm8505fb_exit(void)
-{
- platform_driver_unregister(&wm8505fb_driver);
-}
-
-module_init(wm8505fb_init);
-module_exit(wm8505fb_exit);
+module_platform_driver(wm8505fb_driver);
MODULE_AUTHOR("Ed Spiridonov <edo.rus@gmail.com>");
MODULE_DESCRIPTION("Framebuffer driver for WMT WM8505");
diff --git a/drivers/video/wmt_ge_rops.c b/drivers/video/wmt_ge_rops.c
index 45832b7..55be386 100644
--- a/drivers/video/wmt_ge_rops.c
+++ b/drivers/video/wmt_ge_rops.c
@@ -167,18 +167,7 @@ static struct platform_driver wmt_ge_rops_driver = {
},
};
-static int __init wmt_ge_rops_init(void)
-{
- return platform_driver_register(&wmt_ge_rops_driver);
-}
-
-static void __exit wmt_ge_rops_exit(void)
-{
- platform_driver_unregister(&wmt_ge_rops_driver);
-}
-
-module_init(wmt_ge_rops_init);
-module_exit(wmt_ge_rops_exit);
+module_platform_driver(wmt_ge_rops_driver);
MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com");
MODULE_DESCRIPTION("Accelerators for raster operations using "
diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index fcb6cd9..1808452 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -511,25 +511,7 @@ static struct platform_driver xilinxfb_of_driver = {
},
};
-
-/* ---------------------------------------------------------------------
- * Module setup and teardown
- */
-
-static int __init
-xilinxfb_init(void)
-{
- return platform_driver_register(&xilinxfb_of_driver);
-}
-
-static void __exit
-xilinxfb_cleanup(void)
-{
- platform_driver_unregister(&xilinxfb_of_driver);
-}
-
-module_init(xilinxfb_init);
-module_exit(xilinxfb_cleanup);
+module_platform_driver(xilinxfb_of_driver);
MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>");
MODULE_DESCRIPTION("Xilinx TFT frame buffer driver");
--
1.7.5.4
^ permalink raw reply related
* [GIT PULL] fbdev fixes for 3.2
From: Florian Tobias Schandinat @ 2011-11-26 19:14 UTC (permalink / raw)
To: Linus Torvalds; +Cc: LKML, linux-fbdev@vger.kernel.org
Hi Linus,
please pull the following changes to the fbdev subsystem.
Nothing exciting here, just one regression fix for viafb, 3 trivial patches for
OMAP and one patch to fix the reset sequence for da8xx-fb.
Thanks,
Florian Tobias Schandinat
The following changes since commit cfcfc9eca2bcbd26a8e206baeb005b055dbf8e37:
Linux 3.2-rc2 (2011-11-15 15:02:59 -0200)
are available in the git repository at:
git://github.com/schandinat/linux-2.6.git fbdev-for-linus
Daniel Drake (1):
viafb: correct sync polarity for OLPC DCON
Florian Tobias Schandinat (1):
Merge branch 'for-3.2-rc' of git://gitorious.org/linux-omap-dss2/linux
into fbdev-for-linus
Manjunathappa, Prakash (1):
video:da8xx-fb: Disable and reset sequence on version2 of LCDC
Tomi Valkeinen (3):
OMAPDSS: HDMI: fix returned HDMI pixel clock
OMAPFB: fix compilation warnings due to missing include
OMAPDSS: DISPC: skip scaling calculations when not scaling
drivers/video/da8xx-fb.c | 15 ++++++++++++++-
drivers/video/omap/dispc.c | 1 +
drivers/video/omap2/dss/dispc.c | 11 +++++------
drivers/video/omap2/dss/hdmi.c | 2 +-
drivers/video/via/share.h | 4 ++--
5 files changed, 23 insertions(+), 10 deletions(-)
^ permalink raw reply
* Problems with radeon driver under KDE-4.7.2
From: Hendrik Sattler @ 2011-11-27 14:15 UTC (permalink / raw)
To: linux-fbdev
Hi,
I just upgraded to KDE-4.7.2 and Linux-3.1 and mostly when using Firefox, I
get issues like a stall screen, then a short blank screen and then it works
some time until that happens again.
The kernel log then shows something like:
WARNING: at drivers/gpu/drm/radeon/radeon_fence.c:267
radeon_fence_wait+0x215/0x292()
Hardware name: TravelMate 6592
GPU lockup (waiting for 0x00158B0E last fence id 0x00158B0C)
Modules linked in: [...]
Pid: 12672, comm: Xorg Not tainted 3.1.0 #2
Call Trace:
[<ffffffff8105c51d>] warn_slowpath_common+0x7e/0x96
[<ffffffff8105c5c9>] warn_slowpath_fmt+0x41/0x43
[<ffffffff8128bdad>] radeon_fence_wait+0x215/0x292
[<ffffffff810730fc>] ? abort_exclusive_wait+0x89/0x89
[<ffffffff8128c30c>] radeon_sync_obj_wait+0xc/0xe
[<ffffffff8125f56e>] ttm_bo_wait+0xb8/0x174
[<ffffffff8125ffdb>] ? ttm_bo_list_ref_sub+0x24/0x26
[<ffffffff812a03c0>] radeon_gem_wait_idle_ioctl+0x7c/0xec
[<ffffffff8124d2dd>] drm_ioctl+0x290/0x368
[<ffffffff812a0344>] ? radeon_gem_busy_ioctl+0x112/0x112
[<ffffffff8106993e>] ? set_current_blocked+0x44/0x49
[<ffffffff81028fe8>] ? do_signal+0x554/0x62a
[<ffffffff810e7bf4>] do_vfs_ioctl+0x40d/0x44e
[<ffffffff810293a5>] ? sys_rt_sigreturn+0x1b4/0x1e3
[<ffffffff810e7c77>] sys_ioctl+0x42/0x67
[<ffffffff81513dbb>] system_call_fastpath+0x16/0x1b
---[ end trace ac77b0f03ca6a6bd ]---
radeon 0000:01:00.0: GPU softreset
radeon 0000:01:00.0: R_008010_GRBM_STATUS=0xA40034E0
radeon 0000:01:00.0: R_008014_GRBM_STATUS2=0x00010003
radeon 0000:01:00.0: R_000E50_SRBM_STATUS=0x200000C0
radeon 0000:01:00.0: R_008020_GRBM_SOFT_RESET=0x00007FEE
radeon 0000:01:00.0: R_008020_GRBM_SOFT_RESET=0x00000001
radeon 0000:01:00.0: R_008010_GRBM_STATUS=0xA0003030
radeon 0000:01:00.0: R_008014_GRBM_STATUS2=0x00000003
radeon 0000:01:00.0: R_000E50_SRBM_STATUS=0x200080C0
radeon 0000:01:00.0: GPU reset succeed
radeon 0000:01:00.0: WB enabled
[drm] ring test succeeded in 1 usecs
[drm] ib test succeeded in 2 usecs
radeon 0000:01:00.0: GPU lockup CP stall for more than 10000msec
So far, I think it's great that it can recover pretty fine most of the time
:-)
I now upgraded to Linux-3.1.3 and looked at the KDE setting about the possible
cause for this. New to me was the desktop effect setting about using
"OpenGL-2-Shader". I deactivated it and its stable so far. Is this a know
issue?
Note: I also have the some effects disabled that are very slow when scrolling
windows. My hardware: "ATI Mobility Radeon HD 2400 XT" (ChipID = 0x94c8)
One other question: I saw that vdpau seems to be supported:
[ 24.226] (II) RADEON(0): [DRI2] VDPAU driver: r600
What exactly is needed to use this? I tried "mplayer -vo vdpau" but that only
gives me:
Failed to open VDPAU backend libvdpau_r600.so: cannot open shared object file:
No such file or directory
[vdpau] Error when calling vdp_device_create_x11: 1
Error opening/initializing the selected video_out (-vo) device.
Where can I get this file. Latest Debian does not seem to have it...
Regards...
HS
^ permalink raw reply
* [PATCH 1/2] video: s3c-fb: Unify runtime and system PM functions
From: Mark Brown @ 2011-11-27 22:51 UTC (permalink / raw)
To: linux-fbdev
The s3c-fb driver has separate runtime and system PM functions but the
implementations are identical so far as I can tell so unify them for
simplicity.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
This is a slightly updated version of the patch, previously I forgot to
staticise the pm_ops.
drivers/video/s3c-fb.c | 75 +-----------------------------------------------
1 files changed, 1 insertions(+), 74 deletions(-)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 12eaee0..27971bc 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -1590,77 +1590,9 @@ static int s3c_fb_resume(struct device *dev)
return 0;
}
-
-static int s3c_fb_runtime_suspend(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct s3c_fb *sfb = platform_get_drvdata(pdev);
- struct s3c_fb_win *win;
- int win_no;
-
- for (win_no = S3C_FB_MAX_WIN - 1; win_no >= 0; win_no--) {
- win = sfb->windows[win_no];
- if (!win)
- continue;
-
- /* use the blank function to push into power-down */
- s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo);
- }
-
- if (!sfb->variant.has_clksel)
- clk_disable(sfb->lcd_clk);
-
- clk_disable(sfb->bus_clk);
- return 0;
-}
-
-static int s3c_fb_runtime_resume(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct s3c_fb *sfb = platform_get_drvdata(pdev);
- struct s3c_fb_platdata *pd = sfb->pdata;
- struct s3c_fb_win *win;
- int win_no;
-
- clk_enable(sfb->bus_clk);
-
- if (!sfb->variant.has_clksel)
- clk_enable(sfb->lcd_clk);
-
- /* setup gpio and output polarity controls */
- pd->setup_gpio();
- writel(pd->vidcon1, sfb->regs + VIDCON1);
-
- /* zero all windows before we do anything */
- for (win_no = 0; win_no < sfb->variant.nr_windows; win_no++)
- s3c_fb_clear_win(sfb, win_no);
-
- for (win_no = 0; win_no < sfb->variant.nr_windows - 1; win_no++) {
- void __iomem *regs = sfb->regs + sfb->variant.keycon;
-
- regs += (win_no * 8);
- writel(0xffffff, regs + WKEYCON0);
- writel(0xffffff, regs + WKEYCON1);
- }
-
- /* restore framebuffers */
- for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {
- win = sfb->windows[win_no];
- if (!win)
- continue;
-
- dev_dbg(&pdev->dev, "resuming window %d\n", win_no);
- s3c_fb_set_par(win->fbinfo);
- }
-
- return 0;
-}
-
#else
#define s3c_fb_suspend NULL
#define s3c_fb_resume NULL
-#define s3c_fb_runtime_suspend NULL
-#define s3c_fb_runtime_resume NULL
#endif
@@ -1985,12 +1917,7 @@ static struct platform_device_id s3c_fb_driver_ids[] = {
};
MODULE_DEVICE_TABLE(platform, s3c_fb_driver_ids);
-static const struct dev_pm_ops s3cfb_pm_ops = {
- .suspend = s3c_fb_suspend,
- .resume = s3c_fb_resume,
- .runtime_suspend = s3c_fb_runtime_suspend,
- .runtime_resume = s3c_fb_runtime_resume,
-};
+static UNIVERSAL_DEV_PM_OPS(s3cfb_pm_ops, s3c_fb_suspend, s3c_fb_resume, NULL);
static struct platform_driver s3c_fb_driver = {
.probe = s3c_fb_probe,
--
1.7.7.3
^ permalink raw reply related
* [PATCH 2/2] video: s3c-fb: Convert to devm style allocation
From: Mark Brown @ 2011-11-27 22:51 UTC (permalink / raw)
To: linux-fbdev
Saves some code, especially useful as the code saved is mostly in the
infrequently tested error paths.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
drivers/video/s3c-fb.c | 32 +++++---------------------------
1 files changed, 5 insertions(+), 27 deletions(-)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 27971bc..c8e822b 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -186,7 +186,6 @@ struct s3c_fb_vsync {
* struct s3c_fb - overall hardware state of the hardware
* @slock: The spinlock protection for this data sturcture.
* @dev: The device that we bound to, for printing, etc.
- * @regs_res: The resource we claimed for the IO registers.
* @bus_clk: The clk (hclk) feeding our interface and possibly pixclk.
* @lcd_clk: The clk (sclk) feeding pixclk.
* @regs: The mapped hardware registers.
@@ -201,7 +200,6 @@ struct s3c_fb_vsync {
struct s3c_fb {
spinlock_t slock;
struct device *dev;
- struct resource *regs_res;
struct clk *bus_clk;
struct clk *lcd_clk;
void __iomem *regs;
@@ -1341,7 +1339,7 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
return -EINVAL;
}
- sfb = kzalloc(sizeof(struct s3c_fb), GFP_KERNEL);
+ sfb = devm_kzalloc(dev, sizeof(struct s3c_fb), GFP_KERNEL);
if (!sfb) {
dev_err(dev, "no memory for framebuffers\n");
return -ENOMEM;
@@ -1384,33 +1382,25 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
goto err_lcd_clk;
}
- sfb->regs_res = request_mem_region(res->start, resource_size(res),
- dev_name(dev));
- if (!sfb->regs_res) {
- dev_err(dev, "failed to claim register region\n");
- ret = -ENOENT;
- goto err_lcd_clk;
- }
-
- sfb->regs = ioremap(res->start, resource_size(res));
+ sfb->regs = devm_request_and_ioremap(dev, res);
if (!sfb->regs) {
dev_err(dev, "failed to map registers\n");
ret = -ENXIO;
- goto err_req_region;
+ goto err_lcd_clk;
}
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) {
dev_err(dev, "failed to acquire irq resource\n");
ret = -ENOENT;
- goto err_ioremap;
+ goto err_lcd_clk;
}
sfb->irq_no = res->start;
ret = request_irq(sfb->irq_no, s3c_fb_irq,
0, "s3c_fb", sfb);
if (ret) {
dev_err(dev, "irq request failed\n");
- goto err_ioremap;
+ goto err_lcd_clk;
}
dev_dbg(dev, "got resources (regs %p), probing windows\n", sfb->regs);
@@ -1465,12 +1455,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
err_irq:
free_irq(sfb->irq_no, sfb);
-err_ioremap:
- iounmap(sfb->regs);
-
-err_req_region:
- release_mem_region(sfb->regs_res->start, resource_size(sfb->regs_res));
-
err_lcd_clk:
if (!sfb->variant.has_clksel) {
clk_disable(sfb->lcd_clk);
@@ -1482,7 +1466,6 @@ err_bus_clk:
clk_put(sfb->bus_clk);
err_sfb:
- kfree(sfb);
return ret;
}
@@ -1506,8 +1489,6 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
free_irq(sfb->irq_no, sfb);
- iounmap(sfb->regs);
-
if (!sfb->variant.has_clksel) {
clk_disable(sfb->lcd_clk);
clk_put(sfb->lcd_clk);
@@ -1516,12 +1497,9 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
clk_disable(sfb->bus_clk);
clk_put(sfb->bus_clk);
- release_mem_region(sfb->regs_res->start, resource_size(sfb->regs_res));
-
pm_runtime_put_sync(sfb->dev);
pm_runtime_disable(sfb->dev);
- kfree(sfb);
return 0;
}
--
1.7.7.3
^ permalink raw reply related
* Re: [PATCH] video: s3c-fb: Unify runtime and system PM functions
From: Jingoo Han @ 2011-11-28 1:49 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322247342-17309-1-git-send-email-broonie@opensource.wolfsonmicro.com>
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBTdWJqZWN0OiBbUEFUQ0hdIHZpZGVvOiBz
M2MtZmI6IFVuaWZ5IHJ1bnRpbWUgYW5kIHN5c3RlbSBQTSBmdW5jdGlvbnMNCj4gDQo+IFRoZSBz
M2MtZmIgZHJpdmVyIGhhcyBzZXBhcmF0ZSBydW50aW1lIGFuZCBzeXN0ZW0gUE0gZnVuY3Rpb25z
IGJ1dCB0aGUNCj4gaW1wbGVtZW50YXRpb25zIGFyZSBpZGVudGljYWwgc28gZmFyIGFzIEkgY2Fu
IHRlbGwgc28gdW5pZnkgdGhlbSBmb3INCj4gc2ltcGxpY2l0eS4NCj4gDQo+IFNpZ25lZC1vZmYt
Ynk6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPg0KQWNr
ZWQtYnk6IEppbmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5jb20+DQoNCkl0IGxvb2tzIGdvb2Qu
IA0KVGhhbmsgeW91Lg0KPiAtLS0NCj4gIGRyaXZlcnMvdmlkZW8vczNjLWZiLmMgfCAgIDc1ICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IC0tLS0NCj4gIDEg
ZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkNCj4gDQo+IGRp
ZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIu
Yw0KPiBpbmRleCAxMmVhZWUwLi4wODYwNTkwIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVv
L3MzYy1mYi5jDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMNCj4gQEAgLTE1OTAsNzcg
KzE1OTAsOSBAQCBzdGF0aWMgaW50IHMzY19mYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0K
PiANCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gLQ0KPiAtc3RhdGljIGludCBzM2NfZmJfcnVudGlt
ZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gLXsNCj4gLQlzdHJ1Y3QgcGxhdGZvcm1f
ZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7DQo+IC0Jc3RydWN0IHMzY19m
YiAqc2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+IC0Jc3RydWN0IHMzY19mYl93
aW4gKndpbjsNCj4gLQlpbnQgd2luX25vOw0KPiAtDQo+IC0JZm9yICh3aW5fbm8gPSBTM0NfRkJf
TUFYX1dJTiAtIDE7IHdpbl9ubyA+PSAwOyB3aW5fbm8tLSkgew0KPiAtCQl3aW4gPSBzZmItPndp
bmRvd3Nbd2luX25vXTsNCj4gLQkJaWYgKCF3aW4pDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAt
CQkvKiB1c2UgdGhlIGJsYW5rIGZ1bmN0aW9uIHRvIHB1c2ggaW50byBwb3dlci1kb3duICovDQo+
IC0JCXMzY19mYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIHdpbi0+ZmJpbmZvKTsNCj4gLQl9
DQo+IC0NCj4gLQlpZiAoIXNmYi0+dmFyaWFudC5oYXNfY2xrc2VsKQ0KPiAtCQljbGtfZGlzYWJs
ZShzZmItPmxjZF9jbGspOw0KPiAtDQo+IC0JY2xrX2Rpc2FibGUoc2ZiLT5idXNfY2xrKTsNCj4g
LQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBzM2NfZmJfcnVudGltZV9yZXN1
bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiAtew0KPiAtCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug
KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsNCj4gLQlzdHJ1Y3QgczNjX2ZiICpzZmIg
PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gLQlzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRh
ICpwZCA9IHNmYi0+cGRhdGE7DQo+IC0Jc3RydWN0IHMzY19mYl93aW4gKndpbjsNCj4gLQlpbnQg
d2luX25vOw0KPiAtDQo+IC0JY2xrX2VuYWJsZShzZmItPmJ1c19jbGspOw0KPiAtDQo+IC0JaWYg
KCFzZmItPnZhcmlhbnQuaGFzX2Nsa3NlbCkNCj4gLQkJY2xrX2VuYWJsZShzZmItPmxjZF9jbGsp
Ow0KPiAtDQo+IC0JLyogc2V0dXAgZ3BpbyBhbmQgb3V0cHV0IHBvbGFyaXR5IGNvbnRyb2xzICov
DQo+IC0JcGQtPnNldHVwX2dwaW8oKTsNCj4gLQl3cml0ZWwocGQtPnZpZGNvbjEsIHNmYi0+cmVn
cyArIFZJRENPTjEpOw0KPiAtDQo+IC0JLyogemVybyBhbGwgd2luZG93cyBiZWZvcmUgd2UgZG8g
YW55dGhpbmcgKi8NCj4gLQlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IHNmYi0+dmFyaWFudC5u
cl93aW5kb3dzOyB3aW5fbm8rKykNCj4gLQkJczNjX2ZiX2NsZWFyX3dpbihzZmIsIHdpbl9ubyk7
DQo+IC0NCj4gLQlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IHNmYi0+dmFyaWFudC5ucl93aW5k
b3dzIC0gMTsgd2luX25vKyspIHsNCj4gLQkJdm9pZCBfX2lvbWVtICpyZWdzID0gc2ZiLT5yZWdz
ICsgc2ZiLT52YXJpYW50LmtleWNvbjsNCj4gLQ0KPiAtCQlyZWdzICs9ICh3aW5fbm8gKiA4KTsN
Cj4gLQkJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV0tFWUNPTjApOw0KPiAtCQl3cml0ZWwoMHhm
ZmZmZmYsIHJlZ3MgKyBXS0VZQ09OMSk7DQo+IC0JfQ0KPiAtDQo+IC0JLyogcmVzdG9yZSBmcmFt
ZWJ1ZmZlcnMgKi8NCj4gLQlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IFMzQ19GQl9NQVhfV0lO
OyB3aW5fbm8rKykgew0KPiAtCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsNCj4gLQkJaWYg
KCF3aW4pDQo+IC0JCQljb250aW51ZTsNCj4gLQ0KPiAtCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJy
ZXN1bWluZyB3aW5kb3cgJWRcbiIsIHdpbl9ubyk7DQo+IC0JCXMzY19mYl9zZXRfcGFyKHdpbi0+
ZmJpbmZvKTsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAgI2Vsc2UN
Cj4gICNkZWZpbmUgczNjX2ZiX3N1c3BlbmQgTlVMTA0KPiAgI2RlZmluZSBzM2NfZmJfcmVzdW1l
ICBOVUxMDQo+IC0jZGVmaW5lIHMzY19mYl9ydW50aW1lX3N1c3BlbmQgTlVMTA0KPiAtI2RlZmlu
ZSBzM2NfZmJfcnVudGltZV9yZXN1bWUgTlVMTA0KPiAgI2VuZGlmDQo+IA0KPiANCj4gQEAgLTE5
ODUsMTIgKzE5MTcsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzM2NfZmJf
ZHJpdmVyX2lkc1tdDQo+ID0gew0KPiAgfTsNCj4gIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZv
cm0sIHMzY19mYl9kcml2ZXJfaWRzKTsNCj4gDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9w
bV9vcHMgczNjZmJfcG1fb3BzID0gew0KPiAtCS5zdXNwZW5kCT0gczNjX2ZiX3N1c3BlbmQsDQo+
IC0JLnJlc3VtZQkJPSBzM2NfZmJfcmVzdW1lLA0KPiAtCS5ydW50aW1lX3N1c3BlbmQJPSBzM2Nf
ZmJfcnVudGltZV9zdXNwZW5kLA0KPiAtCS5ydW50aW1lX3Jlc3VtZQkJPSBzM2NfZmJfcnVudGlt
ZV9yZXN1bWUsDQo+IC19Ow0KPiArVU5JVkVSU0FMX0RFVl9QTV9PUFMoczNjZmJfcG1fb3BzLCBz
M2NfZmJfc3VzcGVuZCwgczNjX2ZiX3Jlc3VtZSwgTlVMTCk7DQo+IA0KPiAgc3RhdGljIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgczNjX2ZiX2RyaXZlciA9IHsNCj4gIAkucHJvYmUJCT0gczNjX2Zi
X3Byb2JlLA0KPiAtLQ0KPiAxLjcuNy4zDQo+IA0KPiAtLQ0K
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use
From: Jingoo Han @ 2011-11-28 2:41 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBTdWJqZWN0OiBbUEFUQ0hdIHZpZGVvOiBj
b252ZXJ0IGRyaXZlcnMvdmlkZW8vKiB0byB1c2UNCj4gbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigp
DQo+IA0KPiBUaGlzIHBhdGNoIGNvbnZlcnRzIHRoZSBkcml2ZXJzIGluIGRyaXZlcnMvdmlkZW8v
KiB0byB1c2UgdGhlDQo+IG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoKSBtYWNybyB3aGljaCBtYWtl
cyB0aGUgY29kZSBzbWFsbGVyIGFuZCBhIGJpdA0KPiBzaW1wbGVyLg0KPiANCj4gQ2M6IFdhbiBa
b25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4NCj4gQ2M6IFNhc2NoYSBIYXVlciA8cy5oYXVl
ckBwZW5ndXRyb25peC5kZT4NCj4gQ2M6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRz
dG9mbHkub3JnPg0KPiBDYzogQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPg0KPiBDYzog
QWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPg0KPiBDYzogRGFtaWFuIEhvYnNvbi1H
YXJjaWEgPGRob2Jzb25nQGlnZWwuY28uanA+DQo+IENjOiBNYW51ZWwgTGF1c3MgPG1hbm9Acm9h
cmluZWxrLmhvbWVsaW51eC5uZXQ+DQo+IFNpZ25lZC1vZmYtYnk6IEF4ZWwgTGluIDxheGVsLmxp
bkBnbWFpbC5jb20+DQpBY2tlZC1ieTogSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4N
CkkgcmV2aWV3ZWQgYW5kIHRlc3RlZCBkcml2ZXJzL3ZpZGVvL3MzYy1mYi5jLg0KSXQgbG9va3Mg
Z29vZC4NClRoYW5rIHlvdS4NCj4gLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL214c2ZiLmMgICAgICAg
ICAgICB8ICAgMTMgKy0tLS0tLS0tLS0tLQ0KPiAgZHJpdmVycy92aWRlby9udWM5MDBmYi5jICAg
ICAgICAgfCAgIDEzICstLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYyAg
ICAgICAgIHwgICAxMiArLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5j
ICAgICAgIHwgICAxNSArLS0tLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8vczNjLWZiLmMg
ICAgICAgICAgIHwgICAxMyArLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3NoNzc2MGZi
LmMgICAgICAgICB8ICAgMTMgKy0tLS0tLS0tLS0tLQ0KPiAgZHJpdmVycy92aWRlby9zaF9tb2Jp
bGVfbGNkY2ZiLmMgfCAgIDEzICstLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8vc2hfbW9i
aWxlX21lcmFtLmMgIHwgICAxMyArLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3NtNTAx
ZmIuYyAgICAgICAgICB8ICAgMTMgKy0tLS0tLS0tLS0tLQ0KPiAgZHJpdmVycy92aWRlby92dDg1
MDBsY2RmYi5jICAgICAgfCAgIDEzICstLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8vdzEw
MGZiLmMgICAgICAgICAgIHwgICAxMyArLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3dt
ODUwNWZiLmMgICAgICAgICB8ICAgMTMgKy0tLS0tLS0tLS0tLQ0KPiAgZHJpdmVycy92aWRlby93
bXRfZ2Vfcm9wcy5jICAgICAgfCAgIDEzICstLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvdmlkZW8v
eGlsaW54ZmIuYyAgICAgICAgIHwgICAyMCArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgMTQgZmls
ZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTc2IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXhzZmIuYyBiL2RyaXZlcnMvdmlkZW8vbXhzZmIuYw0K
PiBpbmRleCBkODM3ZDYzLi4xODc0MmMyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL214
c2ZiLmMNCj4gKysrIGIvZHJpdmVycy92aWRlby9teHNmYi5jDQo+IEBAIC05MDIsMTggKzkwMiw3
IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14c2ZiX2RyaXZlciA9IHsNCj4gIAl9
LA0KPiAgfTsNCj4gDQo+IC1zdGF0aWMgaW50IF9faW5pdCBteHNmYl9pbml0KHZvaWQpDQo+IC17
DQo+IC0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhzZmJfZHJpdmVyKTsNCj4g
LX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgX19leGl0IG14c2ZiX2V4aXQodm9pZCkNCj4gLXsNCj4g
LQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhzZmJfZHJpdmVyKTsNCj4gLX0NCj4gLQ0K
PiAtbW9kdWxlX2luaXQobXhzZmJfaW5pdCk7DQo+IC1tb2R1bGVfZXhpdChteHNmYl9leGl0KTsN
Cj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXhzZmJfZGV2dHlwZSk7DQo+IA0KPiAgTU9EVUxF
X0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgbXhzIGZyYW1lYnVmZmVyIGRyaXZlciIpOw0KPiAgTU9E
VUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCIpOw0KPiBkaWZmIC0tZ2l0IGEv
ZHJpdmVycy92aWRlby9udWM5MDBmYi5jIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5jDQo+IGlu
ZGV4IGQxZmJiZDguLmUxMGY1NTEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vbnVjOTAw
ZmIuYw0KPiArKysgYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMNCj4gQEAgLTc2MiwxOCArNzYy
LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbnVjOTAwZmJfZHJpdmVyID0gew0K
PiAgCX0sDQo+ICB9Ow0KPiANCj4gLWludCBfX2RldmluaXQgbnVjOTAwZmJfaW5pdCh2b2lkKQ0K
PiAtew0KPiAtCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm51YzkwMGZiX2RyaXZl
cik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9fZXhpdCBudWM5MDBmYl9jbGVhbnVwKHZv
aWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm51YzkwMGZiX2RyaXZl
cik7DQo+IC19DQo+IC0NCj4gLW1vZHVsZV9pbml0KG51YzkwMGZiX2luaXQpOw0KPiAtbW9kdWxl
X2V4aXQobnVjOTAwZmJfY2xlYW51cCk7DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG51Yzkw
MGZiX2RyaXZlcik7DQo+IA0KPiAgTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmFtZWJ1ZmZlciBkcml2
ZXIgZm9yIHRoZSBOVUM5MDAiKTsNCj4gIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAt
LWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIu
Yw0KPiBpbmRleCAxOGVhZDZmLi44Mzg0Yjk0IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVv
L3B4YTE2OGZiLmMNCj4gKysrIGIvZHJpdmVycy92aWRlby9weGExNjhmYi5jDQo+IEBAIC04MzIs
MTcgKzgzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTE2OGZiX2RyaXZl
ciA9IHsNCj4gIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTE2OGZiX3JlbW92ZSksDQo+ICB9
Ow0KPiANCj4gLXN0YXRpYyBpbnQgX19pbml0IHB4YTE2OGZiX2luaXQodm9pZCkNCj4gLXsNCj4g
LQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGExNjhmYl9kcml2ZXIpOw0KPiAt
fQ0KPiAtbW9kdWxlX2luaXQocHhhMTY4ZmJfaW5pdCk7DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9f
ZXhpdCBweGExNjhmYl9leGl0KHZvaWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVn
aXN0ZXIoJnB4YTE2OGZiX2RyaXZlcik7DQo+IC19DQo+IC1tb2R1bGVfZXhpdChweGExNjhmYl9l
eGl0KTsNCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocHhhMTY4ZmJfZHJpdmVyKTsNCj4gDQo+
ICBNT0RVTEVfQVVUSE9SKCJMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4g
Ig0KPiAgCSAgICAgICJHcmVlbiBXYW4gPGd3YW5AbWFydmVsbC5jb20+Iik7DQo+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdj
dS5jDQo+IGluZGV4IDFlZDhiMzYuLjFkNzFjMDggMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlk
ZW8vcHhhM3h4LWdjdS5jDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jDQo+IEBA
IC03NDcsMjAgKzc0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTN4eF9n
Y3VfZHJpdmVyID0gew0KPiAgCX0sDQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBpbnQgX19pbml0DQo+
IC1weGEzeHhfZ2N1X2luaXQodm9pZCkNCj4gLXsNCj4gLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVy
X3JlZ2lzdGVyKCZweGEzeHhfZ2N1X2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lk
IF9fZXhpdA0KPiAtcHhhM3h4X2djdV9leGl0KHZvaWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJp
dmVyX3VucmVnaXN0ZXIoJnB4YTN4eF9nY3VfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtbW9kdWxl
X2luaXQocHhhM3h4X2djdV9pbml0KTsNCj4gLW1vZHVsZV9leGl0KHB4YTN4eF9nY3VfZXhpdCk7
DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHB4YTN4eF9nY3VfZHJpdmVyKTsNCj4gDQo+ICBN
T0RVTEVfREVTQ1JJUFRJT04oIlBYQTN4eCBncmFwaGljcyBjb250cm9sbGVyIHVuaXQgZHJpdmVy
Iik7DQo+ICBNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp
ZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYw0KPiBpbmRleCAwODYwNTkwLi5i
Y2FkMGVlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jDQo+ICsrKyBiL2Ry
aXZlcnMvdmlkZW8vczNjLWZiLmMNCj4gQEAgLTE5MzAsMTggKzE5MzAsNyBAQCBzdGF0aWMgc3Ry
dWN0IHBsYXRmb3JtX2RyaXZlciBzM2NfZmJfZHJpdmVyID0gew0KPiAgCX0sDQo+ICB9Ow0KPiAN
Cj4gLXN0YXRpYyBpbnQgX19pbml0IHMzY19mYl9pbml0KHZvaWQpDQo+IC17DQo+IC0JcmV0dXJu
IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjX2ZiX2RyaXZlcik7DQo+IC19DQo+IC0NCj4g
LXN0YXRpYyB2b2lkIF9fZXhpdCBzM2NfZmJfY2xlYW51cCh2b2lkKQ0KPiAtew0KPiAtCXBsYXRm
b3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NfZmJfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtbW9k
dWxlX2luaXQoczNjX2ZiX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQoczNjX2ZiX2NsZWFudXApOw0K
PiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzM2NfZmJfZHJpdmVyKTsNCj4gDQo+ICBNT0RVTEVf
QVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7DQo+ICBNT0RVTEVfREVTQ1JJ
UFRJT04oIlNhbXN1bmcgUzNDIFNvQyBGcmFtZWJ1ZmZlciBkcml2ZXIiKTsNCj4gZGlmZiAtLWdp
dCBhL2RyaXZlcnMvdmlkZW8vc2g3NzYwZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2g3NzYwZmIuYw0K
PiBpbmRleCA0NWU0N2Q4Li44M2IxNmUyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL3No
Nzc2MGZiLmMNCj4gKysrIGIvZHJpdmVycy92aWRlby9zaDc3NjBmYi5jDQo+IEBAIC01ODUsMTgg
KzU4NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoNzc2MF9sY2RjX2RyaXZl
ciA9IHsNCj4gIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2g3NzYwZmJfcmVtb3ZlKSwNCj4gIH07
DQo+IA0KPiAtc3RhdGljIGludCBfX2luaXQgc2g3NzYwZmJfaW5pdCh2b2lkKQ0KPiAtew0KPiAt
CXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoNzc2MF9sY2RjX2RyaXZlcik7DQo+
IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIF9fZXhpdCBzaDc3NjBmYl9leGl0KHZvaWQpDQo+IC17
DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoNzc2MF9sY2RjX2RyaXZlcik7DQo+
IC19DQo+IC0NCj4gLW1vZHVsZV9pbml0KHNoNzc2MGZiX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQo
c2g3NzYwZmJfZXhpdCk7DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNoNzc2MF9sY2RjX2Ry
aXZlcik7DQo+IA0KPiAgTU9EVUxFX0FVVEhPUigiTm9idWhpcm8gSXdhbWF0c3UsIE1hbnVlbCBM
YXVzcyIpOw0KPiAgTU9EVUxFX0RFU0NSSVBUSU9OKCJGQmRldiBmb3IgU0g3NzYwLzYzIGludGVn
cmF0ZWQgTENEIENvbnRyb2xsZXIiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hf
bW9iaWxlX2xjZGNmYi5jDQo+IGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMNCj4g
aW5kZXggMWY0OWFiNC4uYTI2NGViZiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy92aWRlby9zaF9t
b2JpbGVfbGNkY2ZiLmMNCj4gKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMN
Cj4gQEAgLTE3MDksMTggKzE3MDksNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBz
aF9tb2JpbGVfbGNkY19kcml2ZXINCj4gPSB7DQo+ICAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfbGNk
Y19yZW1vdmUsDQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBpbnQgX19pbml0IHNoX21vYmlsZV9sY2Rj
X2luaXQodm9pZCkNCj4gLXsNCj4gLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZz
aF9tb2JpbGVfbGNkY19kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBfX2V4aXQg
c2hfbW9iaWxlX2xjZGNfZXhpdCh2b2lkKQ0KPiAtew0KPiAtCXBsYXRmb3JtX2RyaXZlcl91bnJl
Z2lzdGVyKCZzaF9tb2JpbGVfbGNkY19kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1tb2R1bGVfaW5p
dChzaF9tb2JpbGVfbGNkY19pbml0KTsNCj4gLW1vZHVsZV9leGl0KHNoX21vYmlsZV9sY2RjX2V4
aXQpOw0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzaF9tb2JpbGVfbGNkY19kcml2ZXIpOw0K
PiANCj4gIE1PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIE1vYmlsZSBMQ0RDIEZyYW1lYnVmZmVy
IGRyaXZlciIpOw0KPiAgTU9EVUxFX0FVVEhPUigiTWFnbnVzIERhbW0gPGRhbW1Ab3BlbnNvdXJj
ZS5zZT4iKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX21lcmFtLmMN
Cj4gYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9tZXJhbS5jDQo+IGluZGV4IDRkNjM0OTAuLmY0
NWQ4M2UgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX21lcmFtLmMNCj4g
KysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbWVyYW0uYw0KPiBAQCAtNjc5LDE4ICs2Nzks
NyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9tb2JpbGVfbWVyYW1fZHJpdmVy
DQo+ID0gew0KPiAgCS5yZW1vdmUJCT0gc2hfbW9iaWxlX21lcmFtX3JlbW92ZSwNCj4gIH07DQo+
IA0KPiAtc3RhdGljIGludCBfX2luaXQgc2hfbW9iaWxlX21lcmFtX2luaXQodm9pZCkNCj4gLXsN
Cj4gLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaF9tb2JpbGVfbWVyYW1fZHJp
dmVyKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgX19leGl0IHNoX21vYmlsZV9tZXJhbV9l
eGl0KHZvaWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX21vYmls
ZV9tZXJhbV9kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1tb2R1bGVfaW5pdChzaF9tb2JpbGVfbWVy
YW1faW5pdCk7DQo+IC1tb2R1bGVfZXhpdChzaF9tb2JpbGVfbWVyYW1fZXhpdCk7DQo+ICttb2R1
bGVfcGxhdGZvcm1fZHJpdmVyKHNoX21vYmlsZV9tZXJhbV9kcml2ZXIpOw0KPiANCj4gIE1PRFVM
RV9ERVNDUklQVElPTigiU3VwZXJIIE1vYmlsZSBNRVJBTSBkcml2ZXIiKTsNCj4gIE1PRFVMRV9B
VVRIT1IoIkRhbWlhbiBIb2Jzb24tR2FyY2lhIC8gVGFrYW5hcmkgSGF5YW1hIik7DQo+IGRpZmYg
LS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5j
DQo+IGluZGV4IGE3ODI1NGMuLjM2OTBlZmYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlkZW8v
c201MDFmYi5jDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jDQo+IEBAIC0yMjMwLDE4
ICsyMjMwLDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc201MDFmYl9kcml2ZXIg
PSB7DQo+ICAJfSwNCj4gIH07DQo+IA0KPiAtc3RhdGljIGludCBfX2RldmluaXQgc201MDFmYl9p
bml0KHZvaWQpDQo+IC17DQo+IC0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc201
MDFmYl9kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBfX2V4aXQgc201MDFmYl9j
bGVhbnVwKHZvaWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtNTAx
ZmJfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtbW9kdWxlX2luaXQoc201MDFmYl9pbml0KTsNCj4g
LW1vZHVsZV9leGl0KHNtNTAxZmJfY2xlYW51cCk7DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVy
KHNtNTAxZmJfZHJpdmVyKTsNCj4gDQo+ICBtb2R1bGVfcGFyYW1fbmFtZWQobW9kZSwgZmJfbW9k
ZSwgY2hhcnAsIDApOw0KPiAgTU9EVUxFX1BBUk1fREVTQyhtb2RlLA0KPiBkaWZmIC0tZ2l0IGEv
ZHJpdmVycy92aWRlby92dDg1MDBsY2RmYi5jIGIvZHJpdmVycy92aWRlby92dDg1MDBsY2RmYi5j
DQo+IGluZGV4IDc3N2MyMWQuLjJhNWZlNmUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlkZW8v
dnQ4NTAwbGNkZmIuYw0KPiArKysgYi9kcml2ZXJzL3ZpZGVvL3Z0ODUwMGxjZGZiLmMNCj4gQEAg
LTQ1NywxOCArNDU3LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnQ4NTAwbGNk
X2RyaXZlciA9IHsNCj4gIAl9LA0KPiAgfTsNCj4gDQo+IC1zdGF0aWMgaW50IF9faW5pdCB2dDg1
MDBsY2RfaW5pdCh2b2lkKQ0KPiAtew0KPiAtCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0
ZXIoJnZ0ODUwMGxjZF9kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBfX2V4aXQg
dnQ4NTAwbGNkX2V4aXQodm9pZCkNCj4gLXsNCj4gLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rl
cigmdnQ4NTAwbGNkX2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLW1vZHVsZV9pbml0KHZ0ODUwMGxj
ZF9pbml0KTsNCj4gLW1vZHVsZV9leGl0KHZ0ODUwMGxjZF9leGl0KTsNCj4gK21vZHVsZV9wbGF0
Zm9ybV9kcml2ZXIodnQ4NTAwbGNkX2RyaXZlcik7DQo+IA0KPiAgTU9EVUxFX0FVVEhPUigiQWxl
eGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPiIpOw0KPiAgTU9EVUxFX0RFU0NSSVBUSU9O
KCJMQ0QgY29udHJvbGxlciBkcml2ZXIgZm9yIFZJQSBWVDg1MDAiKTsNCj4gZGlmZiAtLWdpdCBh
L2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jDQo+IGluZGV4
IDIzNzVlNWIuLjkwYTJlMzAgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMN
Cj4gKysrIGIvZHJpdmVycy92aWRlby93MTAwZmIuYw0KPiBAQCAtMTYyMCwxOCArMTYyMCw3IEBA
IHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHcxMDBmYl9kcml2ZXIgPSB7DQo+ICAJfSwN
Cj4gIH07DQo+IA0KPiAtaW50IF9faW5pdCB3MTAwZmJfaW5pdCh2b2lkKQ0KPiAtew0KPiAtCXJl
dHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOw0KPiAtfQ0KPiAt
DQo+IC12b2lkIF9fZXhpdCB3MTAwZmJfY2xlYW51cCh2b2lkKQ0KPiAtew0KPiAtCXBsYXRmb3Jt
X2RyaXZlcl91bnJlZ2lzdGVyKCZ3MTAwZmJfZHJpdmVyKTsNCj4gLX0NCj4gLQ0KPiAtbW9kdWxl
X2luaXQodzEwMGZiX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQodzEwMGZiX2NsZWFudXApOw0KPiAr
bW9kdWxlX3BsYXRmb3JtX2RyaXZlcih3MTAwZmJfZHJpdmVyKTsNCj4gDQo+ICBNT0RVTEVfREVT
Q1JJUFRJT04oIkFUSSBJbWFnZW9uIHcxMDAgZnJhbWVidWZmZXIgZHJpdmVyIik7DQo+ICBNT0RV
TEVfTElDRU5TRSgiR1BMIik7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3dtODUwNWZi
LmMgYi9kcml2ZXJzL3ZpZGVvL3dtODUwNWZiLmMNCj4gaW5kZXggOTZlMzRhNS4uYzg3MDNiZCAx
MDA2NDQNCj4gLS0tIGEvZHJpdmVycy92aWRlby93bTg1MDVmYi5jDQo+ICsrKyBiL2RyaXZlcnMv
dmlkZW8vd204NTA1ZmIuYw0KPiBAQCAtNDA0LDE4ICs0MDQsNyBAQCBzdGF0aWMgc3RydWN0IHBs
YXRmb3JtX2RyaXZlciB3bTg1MDVmYl9kcml2ZXIgPSB7DQo+ICAJfSwNCj4gIH07DQo+IA0KPiAt
c3RhdGljIGludCBfX2luaXQgd204NTA1ZmJfaW5pdCh2b2lkKQ0KPiAtew0KPiAtCXJldHVybiBw
bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODUwNWZiX2RyaXZlcik7DQo+IC19DQo+IC0NCj4g
LXN0YXRpYyB2b2lkIF9fZXhpdCB3bTg1MDVmYl9leGl0KHZvaWQpDQo+IC17DQo+IC0JcGxhdGZv
cm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODUwNWZiX2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLW1v
ZHVsZV9pbml0KHdtODUwNWZiX2luaXQpOw0KPiAtbW9kdWxlX2V4aXQod204NTA1ZmJfZXhpdCk7
DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHdtODUwNWZiX2RyaXZlcik7DQo+IA0KPiAgTU9E
VUxFX0FVVEhPUigiRWQgU3Bpcmlkb25vdiA8ZWRvLnJ1c0BnbWFpbC5jb20+Iik7DQo+ICBNT0RV
TEVfREVTQ1JJUFRJT04oIkZyYW1lYnVmZmVyIGRyaXZlciBmb3IgV01UIFdNODUwNSIpOw0KPiBk
aWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93bXRfZ2Vfcm9wcy5jIGIvZHJpdmVycy92aWRlby93
bXRfZ2Vfcm9wcy5jDQo+IGluZGV4IDQ1ODMyYjcuLjU1YmUzODYgMTAwNjQ0DQo+IC0tLSBhL2Ry
aXZlcnMvdmlkZW8vd210X2dlX3JvcHMuYw0KPiArKysgYi9kcml2ZXJzL3ZpZGVvL3dtdF9nZV9y
b3BzLmMNCj4gQEAgLTE2NywxOCArMTY3LDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2
ZXIgd210X2dlX3JvcHNfZHJpdmVyID0gew0KPiAgCX0sDQo+ICB9Ow0KPiANCj4gLXN0YXRpYyBp
bnQgX19pbml0IHdtdF9nZV9yb3BzX2luaXQodm9pZCkNCj4gLXsNCj4gLQlyZXR1cm4gcGxhdGZv
cm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bXRfZ2Vfcm9wc19kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+IC1z
dGF0aWMgdm9pZCBfX2V4aXQgd210X2dlX3JvcHNfZXhpdCh2b2lkKQ0KPiAtew0KPiAtCXBsYXRm
b3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bXRfZ2Vfcm9wc19kcml2ZXIpOw0KPiAtfQ0KPiAtDQo+
IC1tb2R1bGVfaW5pdCh3bXRfZ2Vfcm9wc19pbml0KTsNCj4gLW1vZHVsZV9leGl0KHdtdF9nZV9y
b3BzX2V4aXQpOw0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih3bXRfZ2Vfcm9wc19kcml2ZXIp
Ow0KPiANCj4gIE1PRFVMRV9BVVRIT1IoIkFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNv
bSIpOw0KPiAgTU9EVUxFX0RFU0NSSVBUSU9OKCJBY2NlbGVyYXRvcnMgZm9yIHJhc3RlciBvcGVy
YXRpb25zIHVzaW5nICINCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGlsaW54ZmIuYyBi
L2RyaXZlcnMvdmlkZW8veGlsaW54ZmIuYw0KPiBpbmRleCBmY2I2Y2Q5Li4xODA4NDUyIDEwMDY0
NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL3hpbGlueGZiLmMNCj4gKysrIGIvZHJpdmVycy92aWRl
by94aWxpbnhmYi5jDQo+IEBAIC01MTEsMjUgKzUxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIHhpbGlueGZiX29mX2RyaXZlciA9IHsNCj4gIAl9LA0KPiAgfTsNCj4gDQo+IC0N
Cj4gLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAtICogTW9kdWxlIHNldHVwIGFuZCB0ZWFyZG93bg0KPiAt
ICovDQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0DQo+IC14aWxpbnhmYl9pbml0KHZvaWQpDQo+
IC17DQo+IC0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlsaW54ZmJfb2ZfZHJp
dmVyKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgX19leGl0DQo+IC14aWxpbnhmYl9jbGVh
bnVwKHZvaWQpDQo+IC17DQo+IC0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhpbGlueGZi
X29mX2RyaXZlcik7DQo+IC19DQo+IC0NCj4gLW1vZHVsZV9pbml0KHhpbGlueGZiX2luaXQpOw0K
PiAtbW9kdWxlX2V4aXQoeGlsaW54ZmJfY2xlYW51cCk7DQo+ICttb2R1bGVfcGxhdGZvcm1fZHJp
dmVyKHhpbGlueGZiX29mX2RyaXZlcik7DQo+IA0KPiAgTU9EVUxFX0FVVEhPUigiTW9udGFWaXN0
YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Iik7DQo+ICBNT0RVTEVfREVTQ1JJ
UFRJT04oIlhpbGlueCBURlQgZnJhbWUgYnVmZmVyIGRyaXZlciIpOw0KPiAtLQ0KPiAxLjcuMQ0K
DQo
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use module_platform_driver()
From: Wan ZongShun @ 2011-11-28 2:46 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
2011/11/28 Jingoo Han <jg1.han@samsung.com>:
>> -----Original Message-----
>> Subject: [PATCH] video: convert drivers/video/* to use
>> module_platform_driver()
>>
>> This patch converts the drivers in drivers/video/* to use the
>> module_platform_driver() macro which makes the code smaller and a bit
>> simpler.
>>
>> Cc: Wan ZongShun <mcuos.com@gmail.com>
>> Cc: Sascha Hauer <s.hauer@pengutronix.de>
>> Cc: Lennert Buytenhek <buytenh@wantstofly.org>
>> Cc: Ben Dooks <ben-linux@fluff.org>
>> Cc: Alexey Charkov <alchark@gmail.com>
>> Cc: Damian Hobson-Garcia <dhobsong@igel.co.jp>
>> Cc: Manuel Lauss <mano@roarinelk.homelinux.net>
>> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> Acked-by: Jingoo Han <jg1.han@samsung.com>
> I reviewed and tested drivers/video/s3c-fb.c.
> It looks good.
> Thank you.
>> ---
>> drivers/video/mxsfb.c | 13 +------------
>> drivers/video/nuc900fb.c | 13 +------------
>> drivers/video/pxa168fb.c | 12 +-----------
>> drivers/video/pxa3xx-gcu.c | 15 +--------------
>> drivers/video/s3c-fb.c | 13 +------------
>> drivers/video/sh7760fb.c | 13 +------------
>> drivers/video/sh_mobile_lcdcfb.c | 13 +------------
>> drivers/video/sh_mobile_meram.c | 13 +------------
>> drivers/video/sm501fb.c | 13 +------------
>> drivers/video/vt8500lcdfb.c | 13 +------------
>> drivers/video/w100fb.c | 13 +------------
>> drivers/video/wm8505fb.c | 13 +------------
>> drivers/video/wmt_ge_rops.c | 13 +------------
>> drivers/video/xilinxfb.c | 20 +-------------------
>> 14 files changed, 14 insertions(+), 176 deletions(-)
>>
>> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
>> index d837d63..18742c2 100644
>> --- a/drivers/video/mxsfb.c
>> +++ b/drivers/video/mxsfb.c
>> @@ -902,18 +902,7 @@ static struct platform_driver mxsfb_driver = {
>> },
>> };
>>
>> -static int __init mxsfb_init(void)
>> -{
>> - return platform_driver_register(&mxsfb_driver);
>> -}
>> -
>> -static void __exit mxsfb_exit(void)
>> -{
>> - platform_driver_unregister(&mxsfb_driver);
>> -}
>> -
>> -module_init(mxsfb_init);
>> -module_exit(mxsfb_exit);
>> +module_platform_driver(mxsfb_devtype);
>>
>> MODULE_DESCRIPTION("Freescale mxs framebuffer driver");
>> MODULE_AUTHOR("Sascha Hauer, Pengutronix");
>> diff --git a/drivers/video/nuc900fb.c b/drivers/video/nuc900fb.c
>> index d1fbbd8..e10f551 100644
>> --- a/drivers/video/nuc900fb.c
>> +++ b/drivers/video/nuc900fb.c
>> @@ -762,18 +762,7 @@ static struct platform_driver nuc900fb_driver = {
>> },
>> };
>>
>> -int __devinit nuc900fb_init(void)
>> -{
>> - return platform_driver_register(&nuc900fb_driver);
>> -}
>> -
>> -static void __exit nuc900fb_cleanup(void)
>> -{
>> - platform_driver_unregister(&nuc900fb_driver);
>> -}
>> -
>> -module_init(nuc900fb_init);
>> -module_exit(nuc900fb_cleanup);
>> +module_platform_driver(nuc900fb_driver);
>>
>> MODULE_DESCRIPTION("Framebuffer driver for the NUC900");
>> MODULE_LICENSE("GPL");
>> diff --git a/drivers/video/pxa168fb.c b/drivers/video/pxa168fb.c
>> index 18ead6f..8384b94 100644
>> --- a/drivers/video/pxa168fb.c
>> +++ b/drivers/video/pxa168fb.c
>> @@ -832,17 +832,7 @@ static struct platform_driver pxa168fb_driver = {
>> .remove = __devexit_p(pxa168fb_remove),
>> };
>>
>> -static int __init pxa168fb_init(void)
>> -{
>> - return platform_driver_register(&pxa168fb_driver);
>> -}
>> -module_init(pxa168fb_init);
>> -
>> -static void __exit pxa168fb_exit(void)
>> -{
>> - platform_driver_unregister(&pxa168fb_driver);
>> -}
>> -module_exit(pxa168fb_exit);
>> +module_platform_driver(pxa168fb_driver);
>>
>> MODULE_AUTHOR("Lennert Buytenhek <buytenh@marvell.com> "
>> "Green Wan <gwan@marvell.com>");
>> diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/pxa3xx-gcu.c
>> index 1ed8b36..1d71c08 100644
>> --- a/drivers/video/pxa3xx-gcu.c
>> +++ b/drivers/video/pxa3xx-gcu.c
>> @@ -747,20 +747,7 @@ static struct platform_driver pxa3xx_gcu_driver = {
>> },
>> };
>>
>> -static int __init
>> -pxa3xx_gcu_init(void)
>> -{
>> - return platform_driver_register(&pxa3xx_gcu_driver);
>> -}
>> -
>> -static void __exit
>> -pxa3xx_gcu_exit(void)
>> -{
>> - platform_driver_unregister(&pxa3xx_gcu_driver);
>> -}
>> -
>> -module_init(pxa3xx_gcu_init);
>> -module_exit(pxa3xx_gcu_exit);
>> +module_platform_driver(pxa3xx_gcu_driver);
>>
>> MODULE_DESCRIPTION("PXA3xx graphics controller unit driver");
>> MODULE_LICENSE("GPL");
>> diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
>> index 0860590..bcad0ee 100644
>> --- a/drivers/video/s3c-fb.c
>> +++ b/drivers/video/s3c-fb.c
>> @@ -1930,18 +1930,7 @@ static struct platform_driver s3c_fb_driver = {
>> },
>> };
>>
>> -static int __init s3c_fb_init(void)
>> -{
>> - return platform_driver_register(&s3c_fb_driver);
>> -}
>> -
>> -static void __exit s3c_fb_cleanup(void)
>> -{
>> - platform_driver_unregister(&s3c_fb_driver);
>> -}
>> -
>> -module_init(s3c_fb_init);
>> -module_exit(s3c_fb_cleanup);
>> +module_platform_driver(s3c_fb_driver);
>>
>> MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
>> MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");
>> diff --git a/drivers/video/sh7760fb.c b/drivers/video/sh7760fb.c
>> index 45e47d8..83b16e2 100644
>> --- a/drivers/video/sh7760fb.c
>> +++ b/drivers/video/sh7760fb.c
>> @@ -585,18 +585,7 @@ static struct platform_driver sh7760_lcdc_driver = {
>> .remove = __devexit_p(sh7760fb_remove),
>> };
>>
>> -static int __init sh7760fb_init(void)
>> -{
>> - return platform_driver_register(&sh7760_lcdc_driver);
>> -}
>> -
>> -static void __exit sh7760fb_exit(void)
>> -{
>> - platform_driver_unregister(&sh7760_lcdc_driver);
>> -}
>> -
>> -module_init(sh7760fb_init);
>> -module_exit(sh7760fb_exit);
>> +module_platform_driver(sh7760_lcdc_driver);
>>
>> MODULE_AUTHOR("Nobuhiro Iwamatsu, Manuel Lauss");
>> MODULE_DESCRIPTION("FBdev for SH7760/63 integrated LCD Controller");
>> diff --git a/drivers/video/sh_mobile_lcdcfb.c
>> b/drivers/video/sh_mobile_lcdcfb.c
>> index 1f49ab4..a264ebf 100644
>> --- a/drivers/video/sh_mobile_lcdcfb.c
>> +++ b/drivers/video/sh_mobile_lcdcfb.c
>> @@ -1709,18 +1709,7 @@ static struct platform_driver sh_mobile_lcdc_driver
>> = {
>> .remove = sh_mobile_lcdc_remove,
>> };
>>
>> -static int __init sh_mobile_lcdc_init(void)
>> -{
>> - return platform_driver_register(&sh_mobile_lcdc_driver);
>> -}
>> -
>> -static void __exit sh_mobile_lcdc_exit(void)
>> -{
>> - platform_driver_unregister(&sh_mobile_lcdc_driver);
>> -}
>> -
>> -module_init(sh_mobile_lcdc_init);
>> -module_exit(sh_mobile_lcdc_exit);
>> +module_platform_driver(sh_mobile_lcdc_driver);
>>
>> MODULE_DESCRIPTION("SuperH Mobile LCDC Framebuffer driver");
>> MODULE_AUTHOR("Magnus Damm <damm@opensource.se>");
>> diff --git a/drivers/video/sh_mobile_meram.c
>> b/drivers/video/sh_mobile_meram.c
>> index 4d63490..f45d83e 100644
>> --- a/drivers/video/sh_mobile_meram.c
>> +++ b/drivers/video/sh_mobile_meram.c
>> @@ -679,18 +679,7 @@ static struct platform_driver sh_mobile_meram_driver
>> = {
>> .remove = sh_mobile_meram_remove,
>> };
>>
>> -static int __init sh_mobile_meram_init(void)
>> -{
>> - return platform_driver_register(&sh_mobile_meram_driver);
>> -}
>> -
>> -static void __exit sh_mobile_meram_exit(void)
>> -{
>> - platform_driver_unregister(&sh_mobile_meram_driver);
>> -}
>> -
>> -module_init(sh_mobile_meram_init);
>> -module_exit(sh_mobile_meram_exit);
>> +module_platform_driver(sh_mobile_meram_driver);
>>
>> MODULE_DESCRIPTION("SuperH Mobile MERAM driver");
>> MODULE_AUTHOR("Damian Hobson-Garcia / Takanari Hayama");
>> diff --git a/drivers/video/sm501fb.c b/drivers/video/sm501fb.c
>> index a78254c..3690eff 100644
>> --- a/drivers/video/sm501fb.c
>> +++ b/drivers/video/sm501fb.c
>> @@ -2230,18 +2230,7 @@ static struct platform_driver sm501fb_driver = {
>> },
>> };
>>
>> -static int __devinit sm501fb_init(void)
>> -{
>> - return platform_driver_register(&sm501fb_driver);
>> -}
>> -
>> -static void __exit sm501fb_cleanup(void)
>> -{
>> - platform_driver_unregister(&sm501fb_driver);
>> -}
>> -
>> -module_init(sm501fb_init);
>> -module_exit(sm501fb_cleanup);
>> +module_platform_driver(sm501fb_driver);
>>
>> module_param_named(mode, fb_mode, charp, 0);
>> MODULE_PARM_DESC(mode,
>> diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
>> index 777c21d..2a5fe6e 100644
>> --- a/drivers/video/vt8500lcdfb.c
>> +++ b/drivers/video/vt8500lcdfb.c
>> @@ -457,18 +457,7 @@ static struct platform_driver vt8500lcd_driver = {
>> },
>> };
>>
>> -static int __init vt8500lcd_init(void)
>> -{
>> - return platform_driver_register(&vt8500lcd_driver);
>> -}
>> -
>> -static void __exit vt8500lcd_exit(void)
>> -{
>> - platform_driver_unregister(&vt8500lcd_driver);
>> -}
>> -
>> -module_init(vt8500lcd_init);
>> -module_exit(vt8500lcd_exit);
>> +module_platform_driver(vt8500lcd_driver);
>>
>> MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com>");
>> MODULE_DESCRIPTION("LCD controller driver for VIA VT8500");
>> diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
>> index 2375e5b..90a2e30 100644
>> --- a/drivers/video/w100fb.c
>> +++ b/drivers/video/w100fb.c
>> @@ -1620,18 +1620,7 @@ static struct platform_driver w100fb_driver = {
>> },
>> };
>>
>> -int __init w100fb_init(void)
>> -{
>> - return platform_driver_register(&w100fb_driver);
>> -}
>> -
>> -void __exit w100fb_cleanup(void)
>> -{
>> - platform_driver_unregister(&w100fb_driver);
>> -}
>> -
>> -module_init(w100fb_init);
>> -module_exit(w100fb_cleanup);
>> +module_platform_driver(w100fb_driver);
>>
>> MODULE_DESCRIPTION("ATI Imageon w100 framebuffer driver");
>> MODULE_LICENSE("GPL");
>> diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
>> index 96e34a5..c8703bd 100644
>> --- a/drivers/video/wm8505fb.c
>> +++ b/drivers/video/wm8505fb.c
>> @@ -404,18 +404,7 @@ static struct platform_driver wm8505fb_driver = {
>> },
>> };
>>
>> -static int __init wm8505fb_init(void)
>> -{
>> - return platform_driver_register(&wm8505fb_driver);
>> -}
>> -
>> -static void __exit wm8505fb_exit(void)
>> -{
>> - platform_driver_unregister(&wm8505fb_driver);
>> -}
>> -
>> -module_init(wm8505fb_init);
>> -module_exit(wm8505fb_exit);
>> +module_platform_driver(wm8505fb_driver);
>>
>> MODULE_AUTHOR("Ed Spiridonov <edo.rus@gmail.com>");
>> MODULE_DESCRIPTION("Framebuffer driver for WMT WM8505");
>> diff --git a/drivers/video/wmt_ge_rops.c b/drivers/video/wmt_ge_rops.c
>> index 45832b7..55be386 100644
>> --- a/drivers/video/wmt_ge_rops.c
>> +++ b/drivers/video/wmt_ge_rops.c
>> @@ -167,18 +167,7 @@ static struct platform_driver wmt_ge_rops_driver = {
>> },
>> };
>>
>> -static int __init wmt_ge_rops_init(void)
>> -{
>> - return platform_driver_register(&wmt_ge_rops_driver);
>> -}
>> -
>> -static void __exit wmt_ge_rops_exit(void)
>> -{
>> - platform_driver_unregister(&wmt_ge_rops_driver);
>> -}
>> -
>> -module_init(wmt_ge_rops_init);
>> -module_exit(wmt_ge_rops_exit);
>> +module_platform_driver(wmt_ge_rops_driver);
>>
>> MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com");
>> MODULE_DESCRIPTION("Accelerators for raster operations using "
>> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
>> index fcb6cd9..1808452 100644
>> --- a/drivers/video/xilinxfb.c
>> +++ b/drivers/video/xilinxfb.c
>> @@ -511,25 +511,7 @@ static struct platform_driver xilinxfb_of_driver = {
>> },
>> };
>>
>> -
>> -/* ---------------------------------------------------------------------
>> - * Module setup and teardown
>> - */
>> -
>> -static int __init
>> -xilinxfb_init(void)
>> -{
>> - return platform_driver_register(&xilinxfb_of_driver);
>> -}
>> -
>> -static void __exit
>> -xilinxfb_cleanup(void)
>> -{
>> - platform_driver_unregister(&xilinxfb_of_driver);
>> -}
>> -
>> -module_init(xilinxfb_init);
>> -module_exit(xilinxfb_cleanup);
>> +module_platform_driver(xilinxfb_of_driver);
>>
>> MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>");
>> MODULE_DESCRIPTION("Xilinx TFT frame buffer driver");
for nuc900fb
Acked-by: Wan ZongShun <mcuos.com@gmail.com>
thanks!
>> --
>> 1.7.1
>
>
--
Wan ZongShun.
www.mcuos.com
^ permalink raw reply
* Re: [PATCH 1/2] video: s3c-fb: Unify runtime and system PM functions
From: Jingoo Han @ 2011-11-28 7:38 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322434268-25525-1-git-send-email-broonie@opensource.wolfsonmicro.com>
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXJrIEJyb3duIDxicm9vbmll
QG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4NCj4gU3ViamVjdDogW1BBVENIIDEvMl0gdmlk
ZW86IHMzYy1mYjogVW5pZnkgcnVudGltZSBhbmQgc3lzdGVtIFBNIGZ1bmN0aW9ucw0KPiANCj4g
VGhlIHMzYy1mYiBkcml2ZXIgaGFzIHNlcGFyYXRlIHJ1bnRpbWUgYW5kIHN5c3RlbSBQTSBmdW5j
dGlvbnMgYnV0IHRoZQ0KPiBpbXBsZW1lbnRhdGlvbnMgYXJlIGlkZW50aWNhbCBzbyBmYXIgYXMg
SSBjYW4gdGVsbCBzbyB1bmlmeSB0aGVtIGZvcg0KPiBzaW1wbGljaXR5Lg0KPiANCj4gU2lnbmVk
LW9mZi1ieTogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+
DQpBY2tlZC1ieTogSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4NClRoYW5rIHlvdS4N
Cj4gLS0tDQo+ICBkcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIHwgICA3NSArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAtLS0tDQo+ICAxIGZpbGVzIGNoYW5nZWQs
IDEgaW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJp
dmVycy92aWRlby9zM2MtZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMNCj4gaW5kZXggY2Yx
ZDExZi4uZTg0Njc3ZSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy92aWRlby9zM2MtZmIuYw0KPiAr
KysgYi9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jDQo+IEBAIC0xNTkwLDc3ICsxNTkwLDkgQEAgc3Rh
dGljIGludCBzM2NfZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gDQo+ICAJcmV0dXJu
IDA7DQo+ICB9DQo+IC0NCj4gLXN0YXRpYyBpbnQgczNjX2ZiX3J1bnRpbWVfc3VzcGVuZChzdHJ1
Y3QgZGV2aWNlICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9
IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOw0KPiAtCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHBsYXRm
b3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiAtCXN0cnVjdCBzM2NfZmJfd2luICp3aW47DQo+IC0J
aW50IHdpbl9ubzsNCj4gLQ0KPiAtCWZvciAod2luX25vID0gUzNDX0ZCX01BWF9XSU4gLSAxOyB3
aW5fbm8gPj0gMDsgd2luX25vLS0pIHsNCj4gLQkJd2luID0gc2ZiLT53aW5kb3dzW3dpbl9ub107
DQo+IC0JCWlmICghd2luKQ0KPiAtCQkJY29udGludWU7DQo+IC0NCj4gLQkJLyogdXNlIHRoZSBi
bGFuayBmdW5jdGlvbiB0byBwdXNoIGludG8gcG93ZXItZG93biAqLw0KPiAtCQlzM2NfZmJfYmxh
bmsoRkJfQkxBTktfUE9XRVJET1dOLCB3aW4tPmZiaW5mbyk7DQo+IC0JfQ0KPiAtDQo+IC0JaWYg
KCFzZmItPnZhcmlhbnQuaGFzX2Nsa3NlbCkNCj4gLQkJY2xrX2Rpc2FibGUoc2ZiLT5sY2RfY2xr
KTsNCj4gLQ0KPiAtCWNsa19kaXNhYmxlKHNmYi0+YnVzX2Nsayk7DQo+IC0JcmV0dXJuIDA7DQo+
IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgczNjX2ZiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZp
Y2UgKmRldikNCj4gLXsNCj4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxh
dGZvcm1fZGV2aWNlKGRldik7DQo+IC0Jc3RydWN0IHMzY19mYiAqc2ZiID0gcGxhdGZvcm1fZ2V0
X2RydmRhdGEocGRldik7DQo+IC0Jc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQgPSBzZmItPnBk
YXRhOw0KPiAtCXN0cnVjdCBzM2NfZmJfd2luICp3aW47DQo+IC0JaW50IHdpbl9ubzsNCj4gLQ0K
PiAtCWNsa19lbmFibGUoc2ZiLT5idXNfY2xrKTsNCj4gLQ0KPiAtCWlmICghc2ZiLT52YXJpYW50
Lmhhc19jbGtzZWwpDQo+IC0JCWNsa19lbmFibGUoc2ZiLT5sY2RfY2xrKTsNCj4gLQ0KPiAtCS8q
IHNldHVwIGdwaW8gYW5kIG91dHB1dCBwb2xhcml0eSBjb250cm9scyAqLw0KPiAtCXBkLT5zZXR1
cF9ncGlvKCk7DQo+IC0Jd3JpdGVsKHBkLT52aWRjb24xLCBzZmItPnJlZ3MgKyBWSURDT04xKTsN
Cj4gLQ0KPiAtCS8qIHplcm8gYWxsIHdpbmRvd3MgYmVmb3JlIHdlIGRvIGFueXRoaW5nICovDQo+
IC0JZm9yICh3aW5fbm8gPSAwOyB3aW5fbm8gPCBzZmItPnZhcmlhbnQubnJfd2luZG93czsgd2lu
X25vKyspDQo+IC0JCXMzY19mYl9jbGVhcl93aW4oc2ZiLCB3aW5fbm8pOw0KPiAtDQo+IC0JZm9y
ICh3aW5fbm8gPSAwOyB3aW5fbm8gPCBzZmItPnZhcmlhbnQubnJfd2luZG93cyAtIDE7IHdpbl9u
bysrKSB7DQo+IC0JCXZvaWQgX19pb21lbSAqcmVncyA9IHNmYi0+cmVncyArIHNmYi0+dmFyaWFu
dC5rZXljb247DQo+IC0NCj4gLQkJcmVncyArPSAod2luX25vICogOCk7DQo+IC0JCXdyaXRlbCgw
eGZmZmZmZiwgcmVncyArIFdLRVlDT04wKTsNCj4gLQkJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsg
V0tFWUNPTjEpOw0KPiAtCX0NCj4gLQ0KPiAtCS8qIHJlc3RvcmUgZnJhbWVidWZmZXJzICovDQo+
IC0JZm9yICh3aW5fbm8gPSAwOyB3aW5fbm8gPCBTM0NfRkJfTUFYX1dJTjsgd2luX25vKyspIHsN
Cj4gLQkJd2luID0gc2ZiLT53aW5kb3dzW3dpbl9ub107DQo+IC0JCWlmICghd2luKQ0KPiAtCQkJ
Y29udGludWU7DQo+IC0NCj4gLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVzdW1pbmcgd2luZG93
ICVkXG4iLCB3aW5fbm8pOw0KPiAtCQlzM2NfZmJfc2V0X3Bhcih3aW4tPmZiaW5mbyk7DQo+IC0J
fQ0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gICNlbHNlDQo+ICAjZGVmaW5lIHMz
Y19mYl9zdXNwZW5kIE5VTEwNCj4gICNkZWZpbmUgczNjX2ZiX3Jlc3VtZSAgTlVMTA0KPiAtI2Rl
ZmluZSBzM2NfZmJfcnVudGltZV9zdXNwZW5kIE5VTEwNCj4gLSNkZWZpbmUgczNjX2ZiX3J1bnRp
bWVfcmVzdW1lIE5VTEwNCj4gICNlbmRpZg0KPiANCj4gDQo+IEBAIC0xOTg1LDEyICsxOTE3LDcg
QEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjX2ZiX2RyaXZlcl9pZHNbXQ0K
PiA9IHsNCj4gIH07DQo+ICBNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzM2NfZmJfZHJp
dmVyX2lkcyk7DQo+IA0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHMzY2ZiX3Bt
X29wcyA9IHsNCj4gLQkuc3VzcGVuZAk9IHMzY19mYl9zdXNwZW5kLA0KPiAtCS5yZXN1bWUJCT0g
czNjX2ZiX3Jlc3VtZSwNCj4gLQkucnVudGltZV9zdXNwZW5kCT0gczNjX2ZiX3J1bnRpbWVfc3Vz
cGVuZCwNCj4gLQkucnVudGltZV9yZXN1bWUJCT0gczNjX2ZiX3J1bnRpbWVfcmVzdW1lLA0KPiAt
fTsNCj4gK3N0YXRpYyBVTklWRVJTQUxfREVWX1BNX09QUyhzM2NmYl9wbV9vcHMsIHMzY19mYl9z
dXNwZW5kLCBzM2NfZmJfcmVzdW1lLA0KPiBOVUxMKTsNCj4gDQo+ICBzdGF0aWMgc3RydWN0IHBs
YXRmb3JtX2RyaXZlciBzM2NfZmJfZHJpdmVyID0gew0KPiAgCS5wcm9iZQkJPSBzM2NfZmJfcHJv
YmUsDQo+IC0tDQo+IDEuNy4xDQoNCg0KDQo
^ permalink raw reply
* Re: [PATCH 2/2] video: s3c-fb: Convert to devm style allocation
From: Jingoo Han @ 2011-11-28 7:59 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322434268-25525-2-git-send-email-broonie@opensource.wolfsonmicro.com>
SGksIE1hcmsgQnJvd24uDQoNCllvdXIgcGF0Y2ggbWFrZXMgYnVpbGQgZXJyb3IgYXMgZm9sbG93
czoNCmRyaXZlcnMvdmlkZW8vczNjLWZiLmM6IEluIGZ1bmN0aW9uICdzM2NfZmJfcHJvYmUnOg0K
ZHJpdmVycy92aWRlby9zM2MtZmIuYzoxMzg1OiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24g
b2YgZnVuY3Rpb24gJ2Rldm1fcmVxdWVzdF9hbmRfaW9yZW1hcCcNCmRyaXZlcnMvdmlkZW8vczNj
LWZiLmM6MTM4NTogd2FybmluZzogYXNzaWdubWVudCBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdl
ciB3aXRob3V0IGEgY2FzdA0KbWFrZVsyXTogKioqIFtkcml2ZXJzL3ZpZGVvL3MzYy1mYi5vXSBF
cnJvciAxDQptYWtlWzFdOiAqKiogW2RyaXZlcnMvdmlkZW9dIEVycm9yIDINCg0KPiAtLS0tLU9y
aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3Vy
Y2Uud29sZnNvbm1pY3JvLmNvbT4NCj4gU3ViamVjdDogW1BBVENIIDIvMl0gdmlkZW86IHMzYy1m
YjogQ29udmVydCB0byBkZXZtIHN0eWxlIGFsbG9jYXRpb24NCj4gDQo+IFNhdmVzIHNvbWUgY29k
ZSwgZXNwZWNpYWxseSB1c2VmdWwgYXMgdGhlIGNvZGUgc2F2ZWQgaXMgbW9zdGx5IGluIHRoZQ0K
PiBpbmZyZXF1ZW50bHkgdGVzdGVkIGVycm9yIHBhdGhzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTog
TWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+DQo+IC0tLQ0K
PiAgZHJpdmVycy92aWRlby9zM2MtZmIuYyB8ICAgMzIgKysrKystLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCj4gIDEgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlv
bnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVy
cy92aWRlby9zM2MtZmIuYw0KPiBpbmRleCBlODQ2NzdlLi4xMDhiNDY5IDEwMDY0NA0KPiAtLS0g
YS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMN
Cj4gQEAgLTE4Niw3ICsxODYsNiBAQCBzdHJ1Y3QgczNjX2ZiX3ZzeW5jIHsNCj4gICAqIHN0cnVj
dCBzM2NfZmIgLSBvdmVyYWxsIGhhcmR3YXJlIHN0YXRlIG9mIHRoZSBoYXJkd2FyZQ0KPiAgICog
QHNsb2NrOiBUaGUgc3BpbmxvY2sgcHJvdGVjdGlvbiBmb3IgdGhpcyBkYXRhIHN0dXJjdHVyZS4N
Cj4gICAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB3ZSBib3VuZCB0bywgZm9yIHByaW50aW5nLCBl
dGMuDQo+IC0gKiBAcmVnc19yZXM6IFRoZSByZXNvdXJjZSB3ZSBjbGFpbWVkIGZvciB0aGUgSU8g
cmVnaXN0ZXJzLg0KPiAgICogQGJ1c19jbGs6IFRoZSBjbGsgKGhjbGspIGZlZWRpbmcgb3VyIGlu
dGVyZmFjZSBhbmQgcG9zc2libHkgcGl4Y2xrLg0KPiAgICogQGxjZF9jbGs6IFRoZSBjbGsgKHNj
bGspIGZlZWRpbmcgcGl4Y2xrLg0KPiAgICogQHJlZ3M6IFRoZSBtYXBwZWQgaGFyZHdhcmUgcmVn
aXN0ZXJzLg0KPiBAQCAtMjAxLDcgKzIwMCw2IEBAIHN0cnVjdCBzM2NfZmJfdnN5bmMgew0KPiAg
c3RydWN0IHMzY19mYiB7DQo+ICAJc3BpbmxvY2tfdAkJc2xvY2s7DQo+ICAJc3RydWN0IGRldmlj
ZQkJKmRldjsNCj4gLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyZWdzX3JlczsNCj4gIAlzdHJ1Y3QgY2xr
CQkqYnVzX2NsazsNCj4gIAlzdHJ1Y3QgY2xrCQkqbGNkX2NsazsNCj4gIAl2b2lkIF9faW9tZW0J
CSpyZWdzOw0KPiBAQCAtMTM0MSw3ICsxMzM5LDcgQEAgc3RhdGljIGludCBfX2RldmluaXQgczNj
X2ZiX3Byb2JlKHN0cnVjdA0KPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICAJCXJldHVybiAt
RUlOVkFMOw0KPiAgCX0NCj4gDQo+IC0Jc2ZiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzY19m
YiksIEdGUF9LRVJORUwpOw0KPiArCXNmYiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1
Y3QgczNjX2ZiKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKCFzZmIpIHsNCj4gIAkJZGV2X2Vycihk
ZXYsICJubyBtZW1vcnkgZm9yIGZyYW1lYnVmZmVyc1xuIik7DQo+ICAJCXJldHVybiAtRU5PTUVN
Ow0KPiBAQCAtMTM4NCwzMyArMTM4MiwyNSBAQCBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfZmJf
cHJvYmUoc3RydWN0DQo+IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gIAkJZ290byBlcnJfbGNk
X2NsazsNCj4gIAl9DQo+IA0KPiAtCXNmYi0+cmVnc19yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24o
cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLA0KPiAtCQkJCQkgICBkZXZfbmFtZShkZXYp
KTsNCj4gLQlpZiAoIXNmYi0+cmVnc19yZXMpIHsNCj4gLQkJZGV2X2VycihkZXYsICJmYWlsZWQg
dG8gY2xhaW0gcmVnaXN0ZXIgcmVnaW9uXG4iKTsNCj4gLQkJcmV0ID0gLUVOT0VOVDsNCj4gLQkJ
Z290byBlcnJfbGNkX2NsazsNCj4gLQl9DQo+IC0NCj4gLQlzZmItPnJlZ3MgPSBpb3JlbWFwKHJl
cy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7DQo+ICsJc2ZiLT5yZWdzID0gZGV2bV9yZXF1
ZXN0X2FuZF9pb3JlbWFwKGRldiwgcmVzKTsNCj4gIAlpZiAoIXNmYi0+cmVncykgew0KPiAgCQlk
ZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsNCj4gIAkJcmV0ID0gLUVO
WElPOw0KPiAtCQlnb3RvIGVycl9yZXFfcmVnaW9uOw0KPiArCQlnb3RvIGVycl9sY2RfY2xrOw0K
PiAgCX0NCj4gDQo+ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS
Q0VfSVJRLCAwKTsNCj4gIAlpZiAoIXJlcykgew0KPiAgCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0
byBhY3F1aXJlIGlycSByZXNvdXJjZVxuIik7DQo+ICAJCXJldCA9IC1FTk9FTlQ7DQo+IC0JCWdv
dG8gZXJyX2lvcmVtYXA7DQo+ICsJCWdvdG8gZXJyX2xjZF9jbGs7DQo+ICAJfQ0KPiAgCXNmYi0+
aXJxX25vID0gcmVzLT5zdGFydDsNCj4gIAlyZXQgPSByZXF1ZXN0X2lycShzZmItPmlycV9ubywg
czNjX2ZiX2lycSwNCj4gIAkJCSAgMCwgInMzY19mYiIsIHNmYik7DQo+ICAJaWYgKHJldCkgew0K
PiAgCQlkZXZfZXJyKGRldiwgImlycSByZXF1ZXN0IGZhaWxlZFxuIik7DQo+IC0JCWdvdG8gZXJy
X2lvcmVtYXA7DQo+ICsJCWdvdG8gZXJyX2xjZF9jbGs7DQo+ICAJfQ0KPiANCj4gIAlkZXZfZGJn
KGRldiwgImdvdCByZXNvdXJjZXMgKHJlZ3MgJXApLCBwcm9iaW5nIHdpbmRvd3NcbiIsIHNmYi0N
Cj4gPnJlZ3MpOw0KPiBAQCAtMTQ2NSwxMiArMTQ1NSw2IEBAIHN0YXRpYyBpbnQgX19kZXZpbml0
IHMzY19mYl9wcm9iZShzdHJ1Y3QNCj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAgZXJyX2ly
cToNCj4gIAlmcmVlX2lycShzZmItPmlycV9ubywgc2ZiKTsNCj4gDQo+IC1lcnJfaW9yZW1hcDoN
Cj4gLQlpb3VubWFwKHNmYi0+cmVncyk7DQo+IC0NCj4gLWVycl9yZXFfcmVnaW9uOg0KPiAtCXJl
bGVhc2VfbWVtX3JlZ2lvbihzZmItPnJlZ3NfcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZmIt
DQo+ID5yZWdzX3JlcykpOw0KPiAtDQo+ICBlcnJfbGNkX2NsazoNCj4gIAlpZiAoIXNmYi0+dmFy
aWFudC5oYXNfY2xrc2VsKSB7DQo+ICAJCWNsa19kaXNhYmxlKHNmYi0+bGNkX2Nsayk7DQo+IEBA
IC0xNDgyLDcgKzE0NjYsNiBAQCBlcnJfYnVzX2NsazoNCj4gIAljbGtfcHV0KHNmYi0+YnVzX2Ns
ayk7DQo+IA0KPiAgZXJyX3NmYjoNCj4gLQlrZnJlZShzZmIpOw0KPiAgCXJldHVybiByZXQ7DQo+
ICB9DQo+IA0KPiBAQCAtMTUwNiw4ICsxNDg5LDYgQEAgc3RhdGljIGludCBfX2RldmV4aXQgczNj
X2ZiX3JlbW92ZShzdHJ1Y3QNCj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiANCj4gIAlmcmVl
X2lycShzZmItPmlycV9ubywgc2ZiKTsNCj4gDQo+IC0JaW91bm1hcChzZmItPnJlZ3MpOw0KPiAt
DQo+ICAJaWYgKCFzZmItPnZhcmlhbnQuaGFzX2Nsa3NlbCkgew0KPiAgCQljbGtfZGlzYWJsZShz
ZmItPmxjZF9jbGspOw0KPiAgCQljbGtfcHV0KHNmYi0+bGNkX2Nsayk7DQo+IEBAIC0xNTE2LDEy
ICsxNDk3LDkgQEAgc3RhdGljIGludCBfX2RldmV4aXQgczNjX2ZiX3JlbW92ZShzdHJ1Y3QNCj4g
cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAgCWNsa19kaXNhYmxlKHNmYi0+YnVzX2Nsayk7DQo+
ICAJY2xrX3B1dChzZmItPmJ1c19jbGspOw0KPiANCj4gLQlyZWxlYXNlX21lbV9yZWdpb24oc2Zi
LT5yZWdzX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoc2ZiLQ0KPiA+cmVnc19yZXMpKTsNCj4g
LQ0KPiAgCXBtX3J1bnRpbWVfcHV0X3N5bmMoc2ZiLT5kZXYpOw0KPiAgCXBtX3J1bnRpbWVfZGlz
YWJsZShzZmItPmRldik7DQo+IA0KPiAtCWtmcmVlKHNmYik7DQo+ICAJcmV0dXJuIDA7DQo+ICB9
DQo+IA0KPiAtLQ0KPiAxLjcuMQ0KPiANCj4gDQoNCg=
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use
From: Sascha Hauer @ 2011-11-28 8:43 UTC (permalink / raw)
To: Axel Lin
Cc: linux-kernel, Wan ZongShun, Lennert Buytenhek, Ben Dooks,
Alexey Charkov, Damian Hobson-Garcia, Manuel Lauss,
Florian Tobias Schandinat, linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
On Sat, Nov 26, 2011 at 10:25:54AM +0800, Axel Lin wrote:
> This patch converts the drivers in drivers/video/* to use the
> module_platform_driver() macro which makes the code smaller and a bit
> simpler.
>
> Cc: Wan ZongShun <mcuos.com@gmail.com>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Lennert Buytenhek <buytenh@marvell.com>
> Cc: Ben Dooks <ben@simtec.co.uk>
> Cc: Alexey Charkov <alchark@gmail.com>
> Cc: Damian Hobson-Garcia <dhobsong@igel.co.jp>
> Cc: Manuel Lauss <mano@roarinelk.homelinux.net>
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> ---
> drivers/video/mxsfb.c | 13 +------------
For the mxsfb driver:
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply
* Re: [PATCH 06/13] OMAPDSS: DSI: Use new lane config in
From: Carlos Chinea @ 2011-11-28 9:08 UTC (permalink / raw)
To: ext Tomi Valkeinen; +Cc: linux-fbdev, linux-omap, archit
In-Reply-To: <1322141381-5395-7-git-send-email-tomi.valkeinen@ti.com>
Hi Tomi,
Just a question/suggestion, bellow:
On Thu, 2011-11-24 at 15:29 +0200, ext Tomi Valkeinen wrote:
> Use the new lane config in dsi_set_lane_config().
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
> drivers/video/omap2/dss/dsi.c | 84 +++++++++++++++++++---------------------
> 1 files changed, 40 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
> index aea110c..ba8d6b3 100644
> --- a/drivers/video/omap2/dss/dsi.c
> +++ b/drivers/video/omap2/dss/dsi.c
> @@ -2154,59 +2154,53 @@ static int dsi_parse_lane_config(struct omap_dss_device *dssdev)
> return 0;
> }
>
> -static void dsi_set_lane_config(struct omap_dss_device *dssdev)
> +static int dsi_set_lane_config(struct omap_dss_device *dssdev)
> {
> struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
> + struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
> + static const u8 offsets[] = { 0, 4, 8, 12, 16 };
> + static const enum dsi_lane_function functions[] = {
> + DSI_LANE_CLK,
> + DSI_LANE_DATA1,
> + DSI_LANE_DATA2,
> + DSI_LANE_DATA3,
> + DSI_LANE_DATA4,
> + };
Patch 05 of the series has a function (dsi_parse_lane_config) with
exactly the same static local declaration. Wouldn't be better to have an
static global declaration instead to save some space ? or are the values
from those functions going to differ in the near future ?
Br,
Carlos
> u32 r;
> - int num_lanes_used = dsi_get_num_lanes_used(dssdev);
> -
> - int clk_lane = dssdev->phy.dsi.clk_lane;
> - int data1_lane = dssdev->phy.dsi.data1_lane;
> - int data2_lane = dssdev->phy.dsi.data2_lane;
> - int clk_pol = dssdev->phy.dsi.clk_pol;
> - int data1_pol = dssdev->phy.dsi.data1_pol;
> - int data2_pol = dssdev->phy.dsi.data2_pol;
> + int i;
>
> r = dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG1);
> - r = FLD_MOD(r, clk_lane, 2, 0);
> - r = FLD_MOD(r, clk_pol, 3, 3);
> - r = FLD_MOD(r, data1_lane, 6, 4);
> - r = FLD_MOD(r, data1_pol, 7, 7);
> - r = FLD_MOD(r, data2_lane, 10, 8);
> - r = FLD_MOD(r, data2_pol, 11, 11);
> - if (num_lanes_used > 3) {
> - int data3_lane = dssdev->phy.dsi.data3_lane;
> - int data3_pol = dssdev->phy.dsi.data3_pol;
> -
> - r = FLD_MOD(r, data3_lane, 14, 12);
> - r = FLD_MOD(r, data3_pol, 15, 15);
> +
> + for (i = 0; i < dsi->num_lanes_used; ++i) {
> + unsigned offset = offsets[i];
> + unsigned polarity, lane_number;
> + unsigned t;
> +
> + for (t = 0; t < dsi->num_lanes_supported; ++t)
> + if (dsi->lanes[t].function = functions[i])
> + break;
> +
> + if (t = dsi->num_lanes_supported)
> + return -EINVAL;
> +
> + lane_number = t;
> + polarity = dsi->lanes[t].polarity;
> +
> + r = FLD_MOD(r, lane_number + 1, offset + 2, offset);
> + r = FLD_MOD(r, polarity, offset + 3, offset + 3);
> }
> - if (num_lanes_used > 4) {
> - int data4_lane = dssdev->phy.dsi.data4_lane;
> - int data4_pol = dssdev->phy.dsi.data4_pol;
>
> - r = FLD_MOD(r, data4_lane, 18, 16);
> - r = FLD_MOD(r, data4_pol, 19, 19);
> + /* clear the unused lanes */
> + for (; i < dsi->num_lanes_supported; ++i) {
> + unsigned offset = offsets[i];
> +
> + r = FLD_MOD(r, 0, offset + 2, offset);
> + r = FLD_MOD(r, 0, offset + 3, offset + 3);
> }
> - dsi_write_reg(dsidev, DSI_COMPLEXIO_CFG1, r);
>
> - /* The configuration of the DSI complex I/O (number of data lanes,
> - position, differential order) should not be changed while
> - DSS.DSI_CLK_CRTRL[20] LP_CLK_ENABLE bit is set to 1. In order for
> - the hardware to take into account a new configuration of the complex
> - I/O (done in DSS.DSI_COMPLEXIO_CFG1 register), it is recommended to
> - follow this sequence: First set the DSS.DSI_CTRL[0] IF_EN bit to 1,
> - then reset the DSS.DSI_CTRL[0] IF_EN to 0, then set
> - DSS.DSI_CLK_CTRL[20] LP_CLK_ENABLE to 1 and finally set again the
> - DSS.DSI_CTRL[0] IF_EN bit to 1. If the sequence is not followed, the
> - DSI complex I/O configuration is unknown. */
> + dsi_write_reg(dsidev, DSI_COMPLEXIO_CFG1, r);
>
> - /*
> - REG_FLD_MOD(dsidev, DSI_CTRL, 1, 0, 0);
> - REG_FLD_MOD(dsidev, DSI_CTRL, 0, 0, 0);
> - REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 1, 20, 20);
> - REG_FLD_MOD(dsidev, DSI_CTRL, 1, 0, 0);
> - */
> + return 0;
> }
>
> static inline unsigned ns2ddr(struct platform_device *dsidev, unsigned ns)
> @@ -2473,7 +2467,9 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
> goto err_scp_clk_dom;
> }
>
> - dsi_set_lane_config(dssdev);
> + r = dsi_set_lane_config(dssdev);
> + if (r)
> + goto err_scp_clk_dom;
>
> /* set TX STOP MODE timer to maximum for this operation */
> l = dsi_read_reg(dsidev, DSI_TIMING1);
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use module_platform_driver()
From: Damian Hobson-Garcia @ 2011-11-28 9:09 UTC (permalink / raw)
To: Axel Lin
Cc: linux-kernel, Wan ZongShun, Sascha Hauer, Lennert Buytenhek,
Ben Dooks, Alexey Charkov, Manuel Lauss,
Florian Tobias Schandinat, linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
On 2011/11/26 11:25, Axel Lin wrote:
> This patch converts the drivers in drivers/video/* to use the
> module_platform_driver() macro which makes the code smaller and a bit
> simpler.
>
> Cc: Wan ZongShun <mcuos.com@gmail.com>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Lennert Buytenhek <buytenh@marvell.com>
> Cc: Ben Dooks <ben@simtec.co.uk>
> Cc: Alexey Charkov <alchark@gmail.com>
> Cc: Damian Hobson-Garcia <dhobsong@igel.co.jp>
> Cc: Manuel Lauss <mano@roarinelk.homelinux.net>
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> ---
> drivers/video/mxsfb.c | 13 +------------
> drivers/video/nuc900fb.c | 13 +------------
> drivers/video/pxa168fb.c | 12 +-----------
> drivers/video/pxa3xx-gcu.c | 15 +--------------
> drivers/video/s3c-fb.c | 13 +------------
> drivers/video/sh7760fb.c | 13 +------------
> drivers/video/sh_mobile_lcdcfb.c | 13 +------------
> drivers/video/sh_mobile_meram.c | 13 +------------
> drivers/video/sm501fb.c | 13 +------------
> drivers/video/vt8500lcdfb.c | 13 +------------
> drivers/video/w100fb.c | 13 +------------
> drivers/video/wm8505fb.c | 13 +------------
> drivers/video/wmt_ge_rops.c | 13 +------------
> drivers/video/xilinxfb.c | 20 +-------------------
> 14 files changed, 14 insertions(+), 176 deletions(-)
for sh_mobile_meram.c
Acked-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Thanks very much,
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use module_platform_driver()
From: Alexey Charkov @ 2011-11-28 9:54 UTC (permalink / raw)
To: Axel Lin
Cc: linux-kernel, Wan ZongShun, Sascha Hauer, Lennert Buytenhek,
Ben Dooks, Damian Hobson-Garcia, Manuel Lauss,
Florian Tobias Schandinat, linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
2011/11/26 Axel Lin <axel.lin@gmail.com>:
> This patch converts the drivers in drivers/video/* to use the
> module_platform_driver() macro which makes the code smaller and a bit
> simpler.
>
> Cc: Wan ZongShun <mcuos.com@gmail.com>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Lennert Buytenhek <buytenh@marvell.com>
> Cc: Ben Dooks <ben@simtec.co.uk>
> Cc: Alexey Charkov <alchark@gmail.com>
> Cc: Damian Hobson-Garcia <dhobsong@igel.co.jp>
> Cc: Manuel Lauss <mano@roarinelk.homelinux.net>
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> ---
> drivers/video/mxsfb.c | 13 +------------
> drivers/video/nuc900fb.c | 13 +------------
> drivers/video/pxa168fb.c | 12 +-----------
> drivers/video/pxa3xx-gcu.c | 15 +--------------
> drivers/video/s3c-fb.c | 13 +------------
> drivers/video/sh7760fb.c | 13 +------------
> drivers/video/sh_mobile_lcdcfb.c | 13 +------------
> drivers/video/sh_mobile_meram.c | 13 +------------
> drivers/video/sm501fb.c | 13 +------------
> drivers/video/vt8500lcdfb.c | 13 +------------
> drivers/video/w100fb.c | 13 +------------
> drivers/video/wm8505fb.c | 13 +------------
> drivers/video/wmt_ge_rops.c | 13 +------------
> drivers/video/xilinxfb.c | 20 +-------------------
> 14 files changed, 14 insertions(+), 176 deletions(-)
>
> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> index d837d63..18742c2 100644
> --- a/drivers/video/mxsfb.c
> +++ b/drivers/video/mxsfb.c
> @@ -902,18 +902,7 @@ static struct platform_driver mxsfb_driver = {
> },
> };
>
> -static int __init mxsfb_init(void)
> -{
> - return platform_driver_register(&mxsfb_driver);
> -}
> -
> -static void __exit mxsfb_exit(void)
> -{
> - platform_driver_unregister(&mxsfb_driver);
> -}
> -
> -module_init(mxsfb_init);
> -module_exit(mxsfb_exit);
> +module_platform_driver(mxsfb_devtype);
Shouldn't this one have 'mxsfb_driver' as the argument instead?
>
> MODULE_DESCRIPTION("Freescale mxs framebuffer driver");
> MODULE_AUTHOR("Sascha Hauer, Pengutronix");
> diff --git a/drivers/video/nuc900fb.c b/drivers/video/nuc900fb.c
> index d1fbbd8..e10f551 100644
> --- a/drivers/video/nuc900fb.c
> +++ b/drivers/video/nuc900fb.c
> @@ -762,18 +762,7 @@ static struct platform_driver nuc900fb_driver = {
> },
> };
>
> -int __devinit nuc900fb_init(void)
> -{
> - return platform_driver_register(&nuc900fb_driver);
> -}
> -
> -static void __exit nuc900fb_cleanup(void)
> -{
> - platform_driver_unregister(&nuc900fb_driver);
> -}
> -
> -module_init(nuc900fb_init);
> -module_exit(nuc900fb_cleanup);
> +module_platform_driver(nuc900fb_driver);
>
> MODULE_DESCRIPTION("Framebuffer driver for the NUC900");
> MODULE_LICENSE("GPL");
> diff --git a/drivers/video/pxa168fb.c b/drivers/video/pxa168fb.c
> index 18ead6f..8384b94 100644
> --- a/drivers/video/pxa168fb.c
> +++ b/drivers/video/pxa168fb.c
> @@ -832,17 +832,7 @@ static struct platform_driver pxa168fb_driver = {
> .remove = __devexit_p(pxa168fb_remove),
> };
>
> -static int __init pxa168fb_init(void)
> -{
> - return platform_driver_register(&pxa168fb_driver);
> -}
> -module_init(pxa168fb_init);
> -
> -static void __exit pxa168fb_exit(void)
> -{
> - platform_driver_unregister(&pxa168fb_driver);
> -}
> -module_exit(pxa168fb_exit);
> +module_platform_driver(pxa168fb_driver);
>
> MODULE_AUTHOR("Lennert Buytenhek <buytenh@marvell.com> "
> "Green Wan <gwan@marvell.com>");
> diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/pxa3xx-gcu.c
> index 1ed8b36..1d71c08 100644
> --- a/drivers/video/pxa3xx-gcu.c
> +++ b/drivers/video/pxa3xx-gcu.c
> @@ -747,20 +747,7 @@ static struct platform_driver pxa3xx_gcu_driver = {
> },
> };
>
> -static int __init
> -pxa3xx_gcu_init(void)
> -{
> - return platform_driver_register(&pxa3xx_gcu_driver);
> -}
> -
> -static void __exit
> -pxa3xx_gcu_exit(void)
> -{
> - platform_driver_unregister(&pxa3xx_gcu_driver);
> -}
> -
> -module_init(pxa3xx_gcu_init);
> -module_exit(pxa3xx_gcu_exit);
> +module_platform_driver(pxa3xx_gcu_driver);
>
> MODULE_DESCRIPTION("PXA3xx graphics controller unit driver");
> MODULE_LICENSE("GPL");
> diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
> index 12eaee0..cf1d11f 100644
> --- a/drivers/video/s3c-fb.c
> +++ b/drivers/video/s3c-fb.c
> @@ -2003,18 +2003,7 @@ static struct platform_driver s3c_fb_driver = {
> },
> };
>
> -static int __init s3c_fb_init(void)
> -{
> - return platform_driver_register(&s3c_fb_driver);
> -}
> -
> -static void __exit s3c_fb_cleanup(void)
> -{
> - platform_driver_unregister(&s3c_fb_driver);
> -}
> -
> -module_init(s3c_fb_init);
> -module_exit(s3c_fb_cleanup);
> +module_platform_driver(s3c_fb_driver);
>
> MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
> MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");
> diff --git a/drivers/video/sh7760fb.c b/drivers/video/sh7760fb.c
> index 45e47d8..83b16e2 100644
> --- a/drivers/video/sh7760fb.c
> +++ b/drivers/video/sh7760fb.c
> @@ -585,18 +585,7 @@ static struct platform_driver sh7760_lcdc_driver = {
> .remove = __devexit_p(sh7760fb_remove),
> };
>
> -static int __init sh7760fb_init(void)
> -{
> - return platform_driver_register(&sh7760_lcdc_driver);
> -}
> -
> -static void __exit sh7760fb_exit(void)
> -{
> - platform_driver_unregister(&sh7760_lcdc_driver);
> -}
> -
> -module_init(sh7760fb_init);
> -module_exit(sh7760fb_exit);
> +module_platform_driver(sh7760_lcdc_driver);
>
> MODULE_AUTHOR("Nobuhiro Iwamatsu, Manuel Lauss");
> MODULE_DESCRIPTION("FBdev for SH7760/63 integrated LCD Controller");
> diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c
> index 1f49ab4..a264ebf 100644
> --- a/drivers/video/sh_mobile_lcdcfb.c
> +++ b/drivers/video/sh_mobile_lcdcfb.c
> @@ -1709,18 +1709,7 @@ static struct platform_driver sh_mobile_lcdc_driver = {
> .remove = sh_mobile_lcdc_remove,
> };
>
> -static int __init sh_mobile_lcdc_init(void)
> -{
> - return platform_driver_register(&sh_mobile_lcdc_driver);
> -}
> -
> -static void __exit sh_mobile_lcdc_exit(void)
> -{
> - platform_driver_unregister(&sh_mobile_lcdc_driver);
> -}
> -
> -module_init(sh_mobile_lcdc_init);
> -module_exit(sh_mobile_lcdc_exit);
> +module_platform_driver(sh_mobile_lcdc_driver);
>
> MODULE_DESCRIPTION("SuperH Mobile LCDC Framebuffer driver");
> MODULE_AUTHOR("Magnus Damm <damm@opensource.se>");
> diff --git a/drivers/video/sh_mobile_meram.c b/drivers/video/sh_mobile_meram.c
> index 4d63490..f45d83e 100644
> --- a/drivers/video/sh_mobile_meram.c
> +++ b/drivers/video/sh_mobile_meram.c
> @@ -679,18 +679,7 @@ static struct platform_driver sh_mobile_meram_driver = {
> .remove = sh_mobile_meram_remove,
> };
>
> -static int __init sh_mobile_meram_init(void)
> -{
> - return platform_driver_register(&sh_mobile_meram_driver);
> -}
> -
> -static void __exit sh_mobile_meram_exit(void)
> -{
> - platform_driver_unregister(&sh_mobile_meram_driver);
> -}
> -
> -module_init(sh_mobile_meram_init);
> -module_exit(sh_mobile_meram_exit);
> +module_platform_driver(sh_mobile_meram_driver);
>
> MODULE_DESCRIPTION("SuperH Mobile MERAM driver");
> MODULE_AUTHOR("Damian Hobson-Garcia / Takanari Hayama");
> diff --git a/drivers/video/sm501fb.c b/drivers/video/sm501fb.c
> index a78254c..3690eff 100644
> --- a/drivers/video/sm501fb.c
> +++ b/drivers/video/sm501fb.c
> @@ -2230,18 +2230,7 @@ static struct platform_driver sm501fb_driver = {
> },
> };
>
> -static int __devinit sm501fb_init(void)
> -{
> - return platform_driver_register(&sm501fb_driver);
> -}
> -
> -static void __exit sm501fb_cleanup(void)
> -{
> - platform_driver_unregister(&sm501fb_driver);
> -}
> -
> -module_init(sm501fb_init);
> -module_exit(sm501fb_cleanup);
> +module_platform_driver(sm501fb_driver);
>
> module_param_named(mode, fb_mode, charp, 0);
> MODULE_PARM_DESC(mode,
> diff --git a/drivers/video/vt8500lcdfb.c b/drivers/video/vt8500lcdfb.c
> index 777c21d..2a5fe6e 100644
> --- a/drivers/video/vt8500lcdfb.c
> +++ b/drivers/video/vt8500lcdfb.c
> @@ -457,18 +457,7 @@ static struct platform_driver vt8500lcd_driver = {
> },
> };
>
> -static int __init vt8500lcd_init(void)
> -{
> - return platform_driver_register(&vt8500lcd_driver);
> -}
> -
> -static void __exit vt8500lcd_exit(void)
> -{
> - platform_driver_unregister(&vt8500lcd_driver);
> -}
> -
> -module_init(vt8500lcd_init);
> -module_exit(vt8500lcd_exit);
> +module_platform_driver(vt8500lcd_driver);
>
> MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com>");
> MODULE_DESCRIPTION("LCD controller driver for VIA VT8500");
> diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
> index 2375e5b..90a2e30 100644
> --- a/drivers/video/w100fb.c
> +++ b/drivers/video/w100fb.c
> @@ -1620,18 +1620,7 @@ static struct platform_driver w100fb_driver = {
> },
> };
>
> -int __init w100fb_init(void)
> -{
> - return platform_driver_register(&w100fb_driver);
> -}
> -
> -void __exit w100fb_cleanup(void)
> -{
> - platform_driver_unregister(&w100fb_driver);
> -}
> -
> -module_init(w100fb_init);
> -module_exit(w100fb_cleanup);
> +module_platform_driver(w100fb_driver);
>
> MODULE_DESCRIPTION("ATI Imageon w100 framebuffer driver");
> MODULE_LICENSE("GPL");
> diff --git a/drivers/video/wm8505fb.c b/drivers/video/wm8505fb.c
> index 96e34a5..c8703bd 100644
> --- a/drivers/video/wm8505fb.c
> +++ b/drivers/video/wm8505fb.c
> @@ -404,18 +404,7 @@ static struct platform_driver wm8505fb_driver = {
> },
> };
>
> -static int __init wm8505fb_init(void)
> -{
> - return platform_driver_register(&wm8505fb_driver);
> -}
> -
> -static void __exit wm8505fb_exit(void)
> -{
> - platform_driver_unregister(&wm8505fb_driver);
> -}
> -
> -module_init(wm8505fb_init);
> -module_exit(wm8505fb_exit);
> +module_platform_driver(wm8505fb_driver);
>
> MODULE_AUTHOR("Ed Spiridonov <edo.rus@gmail.com>");
> MODULE_DESCRIPTION("Framebuffer driver for WMT WM8505");
> diff --git a/drivers/video/wmt_ge_rops.c b/drivers/video/wmt_ge_rops.c
> index 45832b7..55be386 100644
> --- a/drivers/video/wmt_ge_rops.c
> +++ b/drivers/video/wmt_ge_rops.c
> @@ -167,18 +167,7 @@ static struct platform_driver wmt_ge_rops_driver = {
> },
> };
>
> -static int __init wmt_ge_rops_init(void)
> -{
> - return platform_driver_register(&wmt_ge_rops_driver);
> -}
> -
> -static void __exit wmt_ge_rops_exit(void)
> -{
> - platform_driver_unregister(&wmt_ge_rops_driver);
> -}
> -
> -module_init(wmt_ge_rops_init);
> -module_exit(wmt_ge_rops_exit);
> +module_platform_driver(wmt_ge_rops_driver);
>
> MODULE_AUTHOR("Alexey Charkov <alchark@gmail.com");
> MODULE_DESCRIPTION("Accelerators for raster operations using "
For vt8500lcdfb, wm8505fb and wmt_ge_rops:
Acked-by: Alexey Charkov <alchark@gmail.com>
Thanks,
Alexey
> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
> index fcb6cd9..1808452 100644
> --- a/drivers/video/xilinxfb.c
> +++ b/drivers/video/xilinxfb.c
> @@ -511,25 +511,7 @@ static struct platform_driver xilinxfb_of_driver = {
> },
> };
>
> -
> -/* ---------------------------------------------------------------------
> - * Module setup and teardown
> - */
> -
> -static int __init
> -xilinxfb_init(void)
> -{
> - return platform_driver_register(&xilinxfb_of_driver);
> -}
> -
> -static void __exit
> -xilinxfb_cleanup(void)
> -{
> - platform_driver_unregister(&xilinxfb_of_driver);
> -}
> -
> -module_init(xilinxfb_init);
> -module_exit(xilinxfb_cleanup);
> +module_platform_driver(xilinxfb_of_driver);
>
> MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>");
> MODULE_DESCRIPTION("Xilinx TFT frame buffer driver");
> --
> 1.7.5.4
>
>
>
>
^ permalink raw reply
* Re: [PATCH] video: convert drivers/video/* to use
From: Lennert Buytenhek @ 2011-11-28 10:01 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1322274354.10633.3.camel@phoenix>
On Mon, Nov 28, 2011 at 02:41:14AM +0000, Jingoo Han wrote:
> > -----Original Message-----
> > Subject: [PATCH] video: convert drivers/video/* to use
> > module_platform_driver()
> >
> > This patch converts the drivers in drivers/video/* to use the
> > module_platform_driver() macro which makes the code smaller and a bit
> > simpler.
> >
> > Cc: Wan ZongShun <mcuos.com@gmail.com>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Lennert Buytenhek <buytenh@wantstofly.org>
For pxa168fb:
Acked-by: Lennert Buytenhek <buytenh@wantstofly.org>
^ permalink raw reply
* Re: [PATCH v3 1/3] fbdev: Add FOURCC-based format configuration API
From: Laurent Pinchart @ 2011-11-28 11:12 UTC (permalink / raw)
To: Florian Tobias Schandinat; +Cc: linux-fbdev, linux-media, magnus.damm
In-Reply-To: <4ED01224.9020703@gmx.de>
Hi Florian,
On Friday 25 November 2011 23:09:40 Florian Tobias Schandinat wrote:
> On 11/24/2011 10:50 AM, Laurent Pinchart wrote:
> > Hi Florian,
> >
> > Gentle ping ?
>
> Sorry, but I'm very busy at the moment and therefore time-consuming things,
> like solving challenging problems, are delayed for some time.
No worries.
> > On Sunday 20 November 2011 11:55:22 Laurent Pinchart wrote:
> >> On Sunday 20 November 2011 03:00:33 Florian Tobias Schandinat wrote:
> >>> Hi Laurent,
> >>>
> >>> On 08/31/2011 11:18 AM, Laurent Pinchart wrote:
> >>>> This API will be used to support YUV frame buffer formats in a
> >>>> standard way.
> >>>
> >>> looks like the union is causing problems. With this patch applied I get
> >>>
> >>> errors like this:
> >>> CC [M] drivers/auxdisplay/cfag12864bfb.o
> >>>
> >>> drivers/auxdisplay/cfag12864bfb.c:57: error: unknown field ‘red’
> >>> specified in initializer
> >>
> >> *ouch*
> >>
> >> gcc < 4.6 chokes on anonymous unions initializers :-/
> >>
> >> [snip]
> >>
> >>>> @@ -246,12 +251,23 @@ struct fb_var_screeninfo {
> >>>>
> >>>> __u32 yoffset; /* resolution */
> >>>>
> >>>> __u32 bits_per_pixel; /* guess what */
> >>>>
> >>>> - __u32 grayscale; /* != 0 Graylevels instead of colors */
> >>>>
> >>>> - struct fb_bitfield red; /* bitfield in fb mem if true color, */
> >>>> - struct fb_bitfield green; /* else only length is significant */
> >>>> - struct fb_bitfield blue;
> >>>> - struct fb_bitfield transp; /* transparency */
> >>>> + union {
> >>>> + struct { /* Legacy format API */
> >>>> + __u32 grayscale; /* 0 = color, 1 = grayscale */
> >>>> + /* bitfields in fb mem if true color, else only */
> >>>> + /* length is significant */
> >>>> + struct fb_bitfield red;
> >>>> + struct fb_bitfield green;
> >>>> + struct fb_bitfield blue;
> >>>> + struct fb_bitfield transp; /* transparency */
> >>>> + };
> >>>> + struct { /* FOURCC-based format API */
> >>>> + __u32 fourcc; /* FOURCC format */
> >>>> + __u32 colorspace;
> >>>> + __u32 reserved[11];
> >>>> + } fourcc;
> >>>> + };
> >>
> >> We can't name the union, otherwise this will change the userspace API.
> >>
> >> We could "fix" the problem on the kernel side with
> >>
> >> #ifdef __KERNEL__
> >>
> >> } color;
> >>
> >> #else
> >>
> >> };
> >>
> >> #endif
> >
> > (and the structure that contains the grayscale, red, green, blue and
> > transp fields would need to be similarly named, the "rgb" name comes to
> > mind)
>
> Which, I guess, would require modifying all drivers?
Unfortunately. That can be automated using coccinelle (I wrote a semantic
patch for that), but it will still be around 10k lines of diff.
> I don't consider that a good idea. Maybe the simplest solution would be to
> drop the union idea and just accept an utterly misleading name "grayscale"
> for setting the FOURCC value.
I'll see if we can add an accessor macro to make it more explicit.
> The colorspace could use one of the reserved fields at the end or do you
> worry that we need to add a lot of other things?
For FOURCC-based format configuration I don't think we will need much more. If
we do need lots of additional fields in the future we might have to consider
an fbdev2 API ;-)
I'll resubmit patches based on this.
--
Regards,
Laurent Pinchart
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox