* [PATCH 2/4] staging: sm750fb: remove pragma optimize
From: Sudip Mukherjee @ 2015-03-08 12:43 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425817886-14387-1-git-send-email-sudipm.mukherjee@gmail.com>
remove use of #pragma optimize which will usually be ignored by the
compiler.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm750fb/ddk750_swi2c.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/staging/sm750fb/ddk750_swi2c.c b/drivers/staging/sm750fb/ddk750_swi2c.c
index b53407b..cae6b9b 100644
--- a/drivers/staging/sm750fb/ddk750_swi2c.c
+++ b/drivers/staging/sm750fb/ddk750_swi2c.c
@@ -217,8 +217,6 @@ static unsigned char swI2CReadSDA(void)
return 0;
}
-#pragma optimize( "", off )
-
/*
* This function sends ACK signal
*/
@@ -356,7 +354,6 @@ unsigned char swI2CReadByte(unsigned char ack)
return data;
}
-#pragma optimize( "", on )
/*
* This function initializes GPIO port for SW I2C communication.
--
1.8.1.2
^ permalink raw reply related
* [PATCH 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Sudip Mukherjee @ 2015-03-08 12:43 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425817886-14387-1-git-send-email-sudipm.mukherjee@gmail.com>
check if it is already defined before defining SM750LE_REVISION_ID
again and at the same time mention correct data type.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm750fb/ddk750_chip.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
index 1c78875..e7d27e8 100644
--- a/drivers/staging/sm750fb/ddk750_chip.h
+++ b/drivers/staging/sm750fb/ddk750_chip.h
@@ -1,7 +1,9 @@
#ifndef DDK750_CHIP_H__
#define DDK750_CHIP_H__
#define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
-#define SM750LE_REVISION_ID (char)0xfe
+#ifndef SM750LE_REVISION_ID
+#define SM750LE_REVISION_ID ((unsigned char)0xfe)
+#endif
/* This is all the chips recognized by this library */
typedef enum _logical_chip_type_t
--
1.8.1.2
^ permalink raw reply related
* [PATCH 4/4] staging: sm750fb: fix undeclared function
From: Sudip Mukherjee @ 2015-03-08 12:43 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425817886-14387-1-git-send-email-sudipm.mukherjee@gmail.com>
kbuild test robot reported that for microblaze-allyesconfig
chan_to_field() and lynxfb_ops_set_par() were not defined. These two
functions were defined under CONFIG_PM, so for any archtecture if
CONFIG_PM is not defined we will have this error.
while moving the lynxfb_suspend() function some very obvious
checkpatch errors were taken care of.
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm750fb/sm750.c | 109 +++++++++++++++++++---------------------
1 file changed, 52 insertions(+), 57 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 753869e..8a78ea5 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -303,62 +303,6 @@ static int lynxfb_ops_pan_display(struct fb_var_screeninfo *var,
return ret;
}
-
-
-
-#ifdef CONFIG_PM
-static int lynxfb_suspend(struct pci_dev * pdev,pm_message_t mesg)
-{
- struct fb_info * info;
- struct lynx_share * share;
- int ret;
-
-
- if(mesg.event = pdev->dev.power.power_state.event)
- return 0;
-
- ret = 0;
- share = pci_get_drvdata(pdev);
- switch (mesg.event) {
- case PM_EVENT_FREEZE:
- case PM_EVENT_PRETHAW:
- pdev->dev.power.power_state = mesg;
- return 0;
- }
-
- console_lock();
- if (mesg.event & PM_EVENT_SLEEP) {
- info = share->fbinfo[0];
- if(info)
- fb_set_suspend(info, 1);/* 1 means do suspend*/
-
- info = share->fbinfo[1];
- if(info)
- fb_set_suspend(info, 1);/* 1 means do suspend*/
-
- ret = pci_save_state(pdev);
- if(ret){
- pr_err("error:%d occured in pci_save_state\n",ret);
- return ret;
- }
-
- /* set chip to sleep mode */
- if(share->suspend)
- (*share->suspend)(share);
-
- pci_disable_device(pdev);
- ret = pci_set_power_state(pdev,pci_choose_state(pdev,mesg));
- if(ret){
- pr_err("error:%d occured in pci_set_power_state\n",ret);
- return ret;
- }
- }
-
- pdev->dev.power.power_state = mesg;
- console_unlock();
- return ret;
-}
-
static int lynxfb_ops_set_par(struct fb_info * info)
{
struct lynxfb_par * par;
@@ -369,7 +313,6 @@ static int lynxfb_ops_set_par(struct fb_info * info)
struct fb_fix_screeninfo * fix;
int ret;
unsigned int line_length;
-
if(!info)
return -EINVAL;
@@ -441,6 +384,7 @@ static int lynxfb_ops_set_par(struct fb_info * info)
ret = output->proc_setMode(output,var,fix);
return ret;
}
+
static inline unsigned int chan_to_field(unsigned int chan,struct fb_bitfield * bf)
{
chan &= 0xffff;
@@ -448,6 +392,57 @@ static inline unsigned int chan_to_field(unsigned int chan,struct fb_bitfield *
return chan << bf->offset;
}
+#ifdef CONFIG_PM
+static int lynxfb_suspend(struct pci_dev *pdev, pm_message_t mesg)
+{
+ struct fb_info *info;
+ struct lynx_share *share;
+ int ret;
+
+ if (mesg.event = pdev->dev.power.power_state.event)
+ return 0;
+
+ ret = 0;
+ share = pci_get_drvdata(pdev);
+ switch (mesg.event) {
+ case PM_EVENT_FREEZE:
+ case PM_EVENT_PRETHAW:
+ pdev->dev.power.power_state = mesg;
+ return 0;
+ }
+
+ console_lock();
+ if (mesg.event & PM_EVENT_SLEEP) {
+ info = share->fbinfo[0];
+ if (info)
+ fb_set_suspend(info, 1);/* 1 means do suspend*/
+
+ info = share->fbinfo[1];
+ if (info)
+ fb_set_suspend(info, 1);/* 1 means do suspend*/
+
+ ret = pci_save_state(pdev);
+ if (ret) {
+ pr_err("error:%d occurred in pci_save_state\n", ret);
+ return ret;
+ }
+
+ /* set chip to sleep mode */
+ if (share->suspend)
+ (*share->suspend)(share);
+
+ pci_disable_device(pdev);
+ ret = pci_set_power_state(pdev, pci_choose_state(pdev, mesg));
+ if (ret) {
+ pr_err("error:%d occurred in pci_set_power_state\n", ret);
+ return ret;
+ }
+ }
+
+ pdev->dev.power.power_state = mesg;
+ console_unlock();
+ return ret;
+}
static int lynxfb_resume(struct pci_dev* pdev)
{
--
1.8.1.2
^ permalink raw reply related
* Re: [PATCH 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Giedrius Statkevičius @ 2015-03-08 12:59 UTC (permalink / raw)
To: Sudip Mukherjee, Greg Kroah-Hartman; +Cc: devel, linux-fbdev, linux-kernel
In-Reply-To: <1425817886-14387-3-git-send-email-sudipm.mukherjee@gmail.com>
On 2015.03.08 14:31, Sudip Mukherjee wrote:
> check if it is already defined before defining SM750LE_REVISION_ID
> again and at the same time mention correct data type.
>
> Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
> ---
> drivers/staging/sm750fb/ddk750_chip.h | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
> index 1c78875..e7d27e8 100644
> --- a/drivers/staging/sm750fb/ddk750_chip.h
> +++ b/drivers/staging/sm750fb/ddk750_chip.h
> @@ -1,7 +1,9 @@
> #ifndef DDK750_CHIP_H__
> #define DDK750_CHIP_H__
> #define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
> -#define SM750LE_REVISION_ID (char)0xfe
> +#ifndef SM750LE_REVISION_ID
> +#define SM750LE_REVISION_ID ((unsigned char)0xfe)
> +#endif
Do you need these parantheses? Also, you can now then fix up this line
too to avoid a redundant cast in the same patch:
sm750_hw.c: if(share->revid = (unsigned char)SM750LE_REVISION_ID){
--
Thanks,
Giedrius
^ permalink raw reply
* Re: [PATCH 1/4] staging: sm750fb: wrong type for print
From: Sudip Mukherjee @ 2015-03-08 12:59 UTC (permalink / raw)
To: Giedrius Statkevičius
Cc: Greg Kroah-Hartman, devel, linux-fbdev, linux-kernel
In-Reply-To: <54FC4323.3010909@gmail.com>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="windows-1254", Size: 1554 bytes --]
On Sun, Mar 08, 2015 at 02:40:03PM +0200, Giedrius Statkevičius wrote:
> On 2015.03.08 14:31, Sudip Mukherjee wrote:
> > mention correct format specifier while printing
> > index 711676c..2ab7b74 100644
> > --- a/drivers/staging/sm750fb/sm750.h
> > +++ b/drivers/staging/sm750fb/sm750.h
> > @@ -59,10 +59,10 @@ struct lynx_share{
> > }mtrr;
> > #endif
> > /* all smi graphic adaptor got below attributes */
> > - resource_size_t vidmem_start;
> > - resource_size_t vidreg_start;
> > - resource_size_t vidmem_size;
> > - resource_size_t vidreg_size;
> > + unsigned long vidmem_start;
> > + unsigned long vidreg_start;
> > + unsigned long vidmem_size;
> > + unsigned long vidreg_size;
>
> Have you checked other places where these are used? resource_size_t can
> be either u64 or u32 depending on if CONFIG_PHYS_ADDR_T_64BIT is
> #defined. Are you sure you aren't losing information when results of
> functions are being assigned to this? Maybe there should be a function
> similar to printk that changes between %u and %llu depending on whether
> that is defined?
oops .. no .. :(
i checked in other framebuffer drivers and saw they are mostly unsigned long.
I will check further on this.
Greg: can you please drop this patch (1/4) from your queue and not apply this to your tree.
I will send it as a v2.
regards
sudip
>
> --
> Thanks,
> Giedrius
--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 4/4] staging: sm750fb: fix undeclared function
From: Giedrius Statkevičius @ 2015-03-08 13:02 UTC (permalink / raw)
To: Sudip Mukherjee, Greg Kroah-Hartman; +Cc: devel, linux-fbdev, linux-kernel
In-Reply-To: <1425817886-14387-4-git-send-email-sudipm.mukherjee@gmail.com>
On 2015.03.08 14:31, Sudip Mukherjee wrote:
> kbuild test robot reported that for microblaze-allyesconfig
> chan_to_field() and lynxfb_ops_set_par() were not defined. These two
> functions were defined under CONFIG_PM, so for any archtecture if
> CONFIG_PM is not defined we will have this error.
> while moving the lynxfb_suspend() function some very obvious
> checkpatch errors were taken care of.
Such as? If you do you could also fix up the poor things with that
function too such as the comment style here (no space between ; and the
comment):
> + if (info)
> + fb_set_suspend(info, 1);/* 1 means do suspend*/
> +
or here (extra unneeded spaces):
> +
> + /* set chip to sleep mode */
> + if (share->suspend)
> + (*share->suspend)(share);
--
Thanks,
Giedrius
^ permalink raw reply
* Re: [PATCH 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Sudip Mukherjee @ 2015-03-08 17:43 UTC (permalink / raw)
To: Giedrius Statkevičius
Cc: Greg Kroah-Hartman, devel, linux-fbdev, linux-kernel
In-Reply-To: <54FC4797.6040704@gmail.com>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="windows-1254", Size: 874 bytes --]
On Sun, Mar 08, 2015 at 02:59:03PM +0200, Giedrius Statkevičius wrote:
> On 2015.03.08 14:31, Sudip Mukherjee wrote:
> > -#define SM750LE_REVISION_ID (char)0xfe
> > +#ifndef SM750LE_REVISION_ID
> > +#define SM750LE_REVISION_ID ((unsigned char)0xfe)
> > +#endif
>
> Do you need these parantheses? Also, you can now then fix up this line
> too to avoid a redundant cast in the same patch:
> sm750_hw.c: if(share->revid = (unsigned char)SM750LE_REVISION_ID){
good idea, thanks.
that extra parentheses is for checkpatch warning of complex macro value.
i will better send a v2 of the whole series after checking that resource_size_t.
regards
sudip
>
>
> --
> Thanks,
> Giedrius
--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH 1/3] staging: sm7xxfb: use module init and exit
From: Sudip Mukherjee @ 2015-03-08 17:52 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
use module_init() and module_exit() instead of module_pci_driver
and at the same time make way for use of kernel boot parameters.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm7xxfb/sm7xxfb.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
index ebd9536..17b3917 100644
--- a/drivers/staging/sm7xxfb/sm7xxfb.c
+++ b/drivers/staging/sm7xxfb/sm7xxfb.c
@@ -113,6 +113,8 @@ static struct vesa_mode vesa_mode_table[] = {
static struct screen_info smtc_scr_info;
+static char *mode_option;
+
/* process command line options, get vga parameter */
static int __init sm7xx_vga_setup(char *options)
{
@@ -1017,7 +1019,29 @@ static struct pci_driver smtcfb_driver = {
.driver.pm = SM7XX_PM_OPS,
};
-module_pci_driver(smtcfb_driver);
+static int __init sm712fb_init(void)
+{
+#ifndef MODULE
+ char *option = NULL;
+
+ if (fb_get_options("sm712fb", &option))
+ return -ENODEV;
+ if (option && *option)
+ mode_option = option;
+#endif
+ sm7xx_vga_setup(mode_option);
+
+ return pci_register_driver(&smtcfb_driver);
+}
+
+module_init(sm712fb_init);
+
+static void __exit sm712fb_exit(void)
+{
+ pci_unregister_driver(&smtcfb_driver);
+}
+
+module_exit(sm712fb_exit);
MODULE_AUTHOR("Siliconmotion ");
MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
--
1.9.1
^ permalink raw reply related
* [PATCH 2/3] staging: sm7xxfb: remove unneeded __setup
From: Sudip Mukherjee @ 2015-03-08 17:52 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425836411-15481-1-git-send-email-sudipm.mukherjee@gmail.com>
as we start to use kernel boot parameters and fb_get_options()
we donot need to use __setup() any more.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm7xxfb/sm7xxfb.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
index 17b3917..e93563f 100644
--- a/drivers/staging/sm7xxfb/sm7xxfb.c
+++ b/drivers/staging/sm7xxfb/sm7xxfb.c
@@ -141,7 +141,6 @@ static int __init sm7xx_vga_setup(char *options)
return -1;
}
-__setup("vga=", sm7xx_vga_setup);
static void sm712_setpalette(int regno, unsigned red, unsigned green,
unsigned blue, struct fb_info *info)
--
1.9.1
^ permalink raw reply related
* [PATCH 3/3] staging: sm7xxfb: change return of sm7xx_vga_setup
From: Sudip Mukherjee @ 2015-03-08 17:52 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425836411-15481-1-git-send-email-sudipm.mukherjee@gmail.com>
change return type of sm7xx_vga_setup() to void as we are not using
the return type anywhere. if this function fails we fall back to the
default configuration.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
drivers/staging/sm7xxfb/sm7xxfb.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/sm7xxfb/sm7xxfb.c b/drivers/staging/sm7xxfb/sm7xxfb.c
index e93563f..abdb021 100644
--- a/drivers/staging/sm7xxfb/sm7xxfb.c
+++ b/drivers/staging/sm7xxfb/sm7xxfb.c
@@ -116,12 +116,12 @@ static struct screen_info smtc_scr_info;
static char *mode_option;
/* process command line options, get vga parameter */
-static int __init sm7xx_vga_setup(char *options)
+static void __init sm7xx_vga_setup(char *options)
{
int i;
if (!options || !*options)
- return -EINVAL;
+ return;
smtc_scr_info.lfb_width = 0;
smtc_scr_info.lfb_height = 0;
@@ -135,11 +135,9 @@ static int __init sm7xx_vga_setup(char *options)
smtc_scr_info.lfb_height vesa_mode_table[i].lfb_height;
smtc_scr_info.lfb_depth = vesa_mode_table[i].lfb_depth;
- return 0;
+ return;
}
}
-
- return -1;
}
static void sm712_setpalette(int regno, unsigned red, unsigned green,
--
1.9.1
^ permalink raw reply related
* Re: [PATCH v2 1/4] staging: sm750fb: wrong type for print
From: Lad, Prabhakar @ 2015-03-09 7:42 UTC (permalink / raw)
To: Sudip Mukherjee
Cc: Tomi Valkeinen, Greg Kroah-Hartman, LFBDEV, OSUOSL Drivers, LKML
In-Reply-To: <1425886506-8643-1-git-send-email-sudipm.mukherjee@gmail.com>
On Mon, Mar 9, 2015 at 7:35 AM, Sudip Mukherjee
<sudipm.mukherjee@gmail.com> wrote:
> mention correct format specifier while printing.
> fixes all the build warnings about incorrect argument type while
> printing.
>
> Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
> ---
>
> V2: Giedrius commented resource_size_t can be either u64 or u32
> depending on if CONFIG_PHYS_ADDR_T_64BIT. based on his comments i
> should have kept the datatype as resource_size_t and used %pa as the
> format specifier. But since this is a framebuffer device and it
> should follow what the framebuffer layer is suggesting in
> struct fb_fix_screeninfo at smem_start and mmio_start.
> adding Tomi for his comments.
>
> this patch will give checkpatch warnings about use of printk.
> this patch was mainly to fix the build warnings. printk will be
> converted to pr_* and dev_* in a later patch.
>
> drivers/staging/sm750fb/sm750.c | 24 ++++++++++++------------
> drivers/staging/sm750fb/sm750.h | 8 ++++----
> drivers/staging/sm750fb/sm750_hw.c | 4 ++--
> 3 files changed, 18 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
> index 520c69e..753869e 100644
> --- a/drivers/staging/sm750fb/sm750.c
> +++ b/drivers/staging/sm750fb/sm750.c
> @@ -530,20 +530,20 @@ static int lynxfb_ops_mmap(struct fb_info * info, struct vm_area_struct * vma)
> if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
> return -EINVAL;
> off = vma->vm_pgoff << PAGE_SHIFT;
> - printk("lynxfb mmap pgoff: %x\n", vma->vm_pgoff);
> - printk("lynxfb mmap off 1: %x\n", off);
> + printk("lynxfb mmap pgoff: %lx\n", vma->vm_pgoff);
> + printk("lynxfb mmap off 1: %lx\n", off);
>
wouldn't it makes sense to change printk to some pr_*() ?
Cheers,
--Prabhakar Lad
^ permalink raw reply
* [PATCH v2 1/4] staging: sm750fb: wrong type for print
From: Sudip Mukherjee @ 2015-03-09 7:47 UTC (permalink / raw)
To: Tomi Valkeinen, Greg Kroah-Hartman
Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <CA+V-a8s65fCvd2cA6w2EwaJfaLgPqQ=Hme+m9_wv+y3Y=GxPiQ@mail.gmail.com>
mention correct format specifier while printing.
fixes all the build warnings about incorrect argument type while
printing.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
V2: Giedrius commented resource_size_t can be either u64 or u32
depending on if CONFIG_PHYS_ADDR_T_64BIT. based on his comments i
should have kept the datatype as resource_size_t and used %pa as the
format specifier. But since this is a framebuffer device and it
should follow what the framebuffer layer is suggesting in
struct fb_fix_screeninfo at smem_start and mmio_start.
adding Tomi for his comments.
this patch will give checkpatch warnings about use of printk.
this patch was mainly to fix the build warnings. printk will be
converted to pr_* and dev_* in a later patch.
drivers/staging/sm750fb/sm750.c | 24 ++++++++++++------------
drivers/staging/sm750fb/sm750.h | 8 ++++----
drivers/staging/sm750fb/sm750_hw.c | 4 ++--
3 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 520c69e..753869e 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -530,20 +530,20 @@ static int lynxfb_ops_mmap(struct fb_info * info, struct vm_area_struct * vma)
if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
return -EINVAL;
off = vma->vm_pgoff << PAGE_SHIFT;
- printk("lynxfb mmap pgoff: %x\n", vma->vm_pgoff);
- printk("lynxfb mmap off 1: %x\n", off);
+ printk("lynxfb mmap pgoff: %lx\n", vma->vm_pgoff);
+ printk("lynxfb mmap off 1: %lx\n", off);
/* frame buffer memory */
start = info->fix.smem_start;
len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len);
- printk("lynxfb mmap start 1: %x\n", start);
+ printk("lynxfb mmap start 1: %lx\n", start);
printk("lynxfb mmap len 1: %x\n", len);
if (off >= len) {
/* memory mapped io */
off -= len;
- printk("lynxfb mmap off 2: %x\n", off);
+ printk("lynxfb mmap off 2: %lx\n", off);
if (info->var.accel_flags) {
printk("lynxfb mmap accel flags true");
return -EINVAL;
@@ -551,28 +551,28 @@ static int lynxfb_ops_mmap(struct fb_info * info, struct vm_area_struct * vma)
start = info->fix.mmio_start;
len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.mmio_len);
- printk("lynxfb mmap start 2: %x\n", start);
+ printk("lynxfb mmap start 2: %lx\n", start);
printk("lynxfb mmap len 2: %x\n", len);
}
start &= PAGE_MASK;
- printk("lynxfb mmap start 3: %x\n", start);
- printk("lynxfb mmap vm start: %x\n", vma->vm_start);
- printk("lynxfb mmap vm end: %x\n", vma->vm_end);
+ printk("lynxfb mmap start 3: %lx\n", start);
+ printk("lynxfb mmap vm start: %lx\n", vma->vm_start);
+ printk("lynxfb mmap vm end: %lx\n", vma->vm_end);
printk("lynxfb mmap len: %x\n", len);
- printk("lynxfb mmap off: %x\n", off);
+ printk("lynxfb mmap off: %lx\n", off);
if ((vma->vm_end - vma->vm_start + off) > len)
{
return -EINVAL;
}
off += start;
- printk("lynxfb mmap off 3: %x\n", off);
+ printk("lynxfb mmap off 3: %lx\n", off);
vma->vm_pgoff = off >> PAGE_SHIFT;
/* This is an IO map - tell maydump to skip this VMA */
vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
fb_pgprotect(file, vma, off);
- printk("lynxfb mmap off 4: %x\n", off);
- printk("lynxfb mmap pgprot: %x\n", vma->vm_page_prot);
+ printk("lynxfb mmap off 4: %lx\n", off);
+ printk("lynxfb mmap pgprot: %lx\n", (unsigned long) pgprot_val(vma->vm_page_prot));
if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
vma->vm_end - vma->vm_start, vma->vm_page_prot))
return -EAGAIN;
diff --git a/drivers/staging/sm750fb/sm750.h b/drivers/staging/sm750fb/sm750.h
index 711676c..d39968c 100644
--- a/drivers/staging/sm750fb/sm750.h
+++ b/drivers/staging/sm750fb/sm750.h
@@ -59,10 +59,10 @@ struct lynx_share{
}mtrr;
#endif
/* all smi graphic adaptor got below attributes */
- resource_size_t vidmem_start;
- resource_size_t vidreg_start;
- resource_size_t vidmem_size;
- resource_size_t vidreg_size;
+ unsigned long vidmem_start;
+ unsigned long vidreg_start;
+ __u32 vidmem_size;
+ __u32 vidreg_size;
volatile unsigned char __iomem * pvReg;
unsigned char __iomem * pvMem;
/* locks*/
diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/sm750_hw.c
index cd971bd..ec2d499 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -36,7 +36,7 @@ int hw_sm750_map(struct lynx_share* share,struct pci_dev* pdev)
share->vidreg_start = pci_resource_start(pdev,1);
share->vidreg_size = MB(2);
- pr_info("mmio phyAddr = %x\n",share->vidreg_start);
+ pr_info("mmio phyAddr = %lx\n", share->vidreg_start);
/* reserve the vidreg space of smi adaptor
* if you do this, u need to add release region code
@@ -73,7 +73,7 @@ int hw_sm750_map(struct lynx_share* share,struct pci_dev* pdev)
* @hw_sm750_getVMSize function can be safe.
* */
share->vidmem_size = hw_sm750_getVMSize(share);
- pr_info("video memory phyAddr = %x, size = %d bytes\n",
+ pr_info("video memory phyAddr = %lx, size = %u bytes\n",
share->vidmem_start,share->vidmem_size);
/* reserve the vidmem space of smi adaptor */
--
1.8.1.2
^ permalink raw reply related
* [PATCH v2 2/4] staging: sm750fb: remove pragma optimize
From: Sudip Mukherjee @ 2015-03-09 7:47 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425886506-8643-1-git-send-email-sudipm.mukherjee@gmail.com>
remove use of #pragma optimize which will usually be ignored by the
compiler.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
v2: same as v1
drivers/staging/sm750fb/ddk750_swi2c.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/staging/sm750fb/ddk750_swi2c.c b/drivers/staging/sm750fb/ddk750_swi2c.c
index b53407b..cae6b9b 100644
--- a/drivers/staging/sm750fb/ddk750_swi2c.c
+++ b/drivers/staging/sm750fb/ddk750_swi2c.c
@@ -217,8 +217,6 @@ static unsigned char swI2CReadSDA(void)
return 0;
}
-#pragma optimize( "", off )
-
/*
* This function sends ACK signal
*/
@@ -356,7 +354,6 @@ unsigned char swI2CReadByte(unsigned char ack)
return data;
}
-#pragma optimize( "", on )
/*
* This function initializes GPIO port for SW I2C communication.
--
1.8.1.2
^ permalink raw reply related
* [PATCH v2 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Sudip Mukherjee @ 2015-03-09 7:47 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425886506-8643-1-git-send-email-sudipm.mukherjee@gmail.com>
check if it is already defined before defining SM750LE_REVISION_ID
again and at the same time mention correct data type.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
v2: removed the redundant cast in sm750_hw.c
drivers/staging/sm750fb/ddk750_chip.h | 4 +++-
drivers/staging/sm750fb/sm750_hw.c | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
index 1c78875..d761b72 100644
--- a/drivers/staging/sm750fb/ddk750_chip.h
+++ b/drivers/staging/sm750fb/ddk750_chip.h
@@ -1,7 +1,9 @@
#ifndef DDK750_CHIP_H__
#define DDK750_CHIP_H__
#define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
-#define SM750LE_REVISION_ID (char)0xfe
+#ifndef SM750LE_REVISION_ID
+#define SM750LE_REVISION_ID ((unsigned char)0xfe)
+#endif
/* This is all the chips recognized by this library */
typedef enum _logical_chip_type_t
diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/sm750_hw.c
index ec2d499..a2b7fe2 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -277,7 +277,7 @@ int hw_sm750_crtc_checkMode(struct lynxfb_crtc* crtc,struct fb_var_screeninfo* v
case 16:
break;
case 32:
- if(share->revid = (unsigned char)SM750LE_REVISION_ID){
+ if (share->revid = SM750LE_REVISION_ID) {
pr_debug("750le do not support 32bpp\n");
return -EINVAL;
}
--
1.8.1.2
^ permalink raw reply related
* [PATCH v2 4/4] staging: sm750fb: fix undeclared function
From: Sudip Mukherjee @ 2015-03-09 7:47 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sudip Mukherjee, linux-fbdev, devel, linux-kernel
In-Reply-To: <1425886506-8643-1-git-send-email-sudipm.mukherjee@gmail.com>
kbuild test robot reported that for microblaze-allyesconfig
chan_to_field() and lynxfb_ops_set_par() were not defined. These two
functions were defined under CONFIG_PM, so for any archtecture if
CONFIG_PM is not defined we will have this error.
while moving the lynxfb_suspend() function some very obvious
checkpatch errors, like space after comma, space after if, space
before opening brace, were taken care of.
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
v2: some extra spaces in the comments were removed.
drivers/staging/sm750fb/sm750.c | 110 +++++++++++++++++++---------------------
1 file changed, 53 insertions(+), 57 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 753869e..476dc5c 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -303,62 +303,6 @@ static int lynxfb_ops_pan_display(struct fb_var_screeninfo *var,
return ret;
}
-
-
-
-#ifdef CONFIG_PM
-static int lynxfb_suspend(struct pci_dev * pdev,pm_message_t mesg)
-{
- struct fb_info * info;
- struct lynx_share * share;
- int ret;
-
-
- if(mesg.event = pdev->dev.power.power_state.event)
- return 0;
-
- ret = 0;
- share = pci_get_drvdata(pdev);
- switch (mesg.event) {
- case PM_EVENT_FREEZE:
- case PM_EVENT_PRETHAW:
- pdev->dev.power.power_state = mesg;
- return 0;
- }
-
- console_lock();
- if (mesg.event & PM_EVENT_SLEEP) {
- info = share->fbinfo[0];
- if(info)
- fb_set_suspend(info, 1);/* 1 means do suspend*/
-
- info = share->fbinfo[1];
- if(info)
- fb_set_suspend(info, 1);/* 1 means do suspend*/
-
- ret = pci_save_state(pdev);
- if(ret){
- pr_err("error:%d occured in pci_save_state\n",ret);
- return ret;
- }
-
- /* set chip to sleep mode */
- if(share->suspend)
- (*share->suspend)(share);
-
- pci_disable_device(pdev);
- ret = pci_set_power_state(pdev,pci_choose_state(pdev,mesg));
- if(ret){
- pr_err("error:%d occured in pci_set_power_state\n",ret);
- return ret;
- }
- }
-
- pdev->dev.power.power_state = mesg;
- console_unlock();
- return ret;
-}
-
static int lynxfb_ops_set_par(struct fb_info * info)
{
struct lynxfb_par * par;
@@ -369,7 +313,6 @@ static int lynxfb_ops_set_par(struct fb_info * info)
struct fb_fix_screeninfo * fix;
int ret;
unsigned int line_length;
-
if(!info)
return -EINVAL;
@@ -441,6 +384,7 @@ static int lynxfb_ops_set_par(struct fb_info * info)
ret = output->proc_setMode(output,var,fix);
return ret;
}
+
static inline unsigned int chan_to_field(unsigned int chan,struct fb_bitfield * bf)
{
chan &= 0xffff;
@@ -448,6 +392,58 @@ static inline unsigned int chan_to_field(unsigned int chan,struct fb_bitfield *
return chan << bf->offset;
}
+#ifdef CONFIG_PM
+static int lynxfb_suspend(struct pci_dev *pdev, pm_message_t mesg)
+{
+ struct fb_info *info;
+ struct lynx_share *share;
+ int ret;
+
+ if (mesg.event = pdev->dev.power.power_state.event)
+ return 0;
+
+ ret = 0;
+ share = pci_get_drvdata(pdev);
+ switch (mesg.event) {
+ case PM_EVENT_FREEZE:
+ case PM_EVENT_PRETHAW:
+ pdev->dev.power.power_state = mesg;
+ return 0;
+ }
+
+ console_lock();
+ if (mesg.event & PM_EVENT_SLEEP) {
+ info = share->fbinfo[0];
+ if (info)
+ /* 1 means do suspend*/
+ fb_set_suspend(info, 1);
+ info = share->fbinfo[1];
+ if (info)
+ /* 1 means do suspend*/
+ fb_set_suspend(info, 1);
+
+ ret = pci_save_state(pdev);
+ if (ret) {
+ pr_err("error:%d occurred in pci_save_state\n", ret);
+ return ret;
+ }
+
+ /* set chip to sleep mode*/
+ if (share->suspend)
+ (*share->suspend)(share);
+
+ pci_disable_device(pdev);
+ ret = pci_set_power_state(pdev, pci_choose_state(pdev, mesg));
+ if (ret) {
+ pr_err("error:%d occurred in pci_set_power_state\n", ret);
+ return ret;
+ }
+ }
+
+ pdev->dev.power.power_state = mesg;
+ console_unlock();
+ return ret;
+}
static int lynxfb_resume(struct pci_dev* pdev)
{
--
1.8.1.2
^ permalink raw reply related
* Re: [PATCH v2 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Lad, Prabhakar @ 2015-03-09 7:47 UTC (permalink / raw)
To: Sudip Mukherjee; +Cc: Greg Kroah-Hartman, LFBDEV, OSUOSL Drivers, LKML
In-Reply-To: <1425886506-8643-3-git-send-email-sudipm.mukherjee@gmail.com>
On Mon, Mar 9, 2015 at 7:35 AM, Sudip Mukherjee
<sudipm.mukherjee@gmail.com> wrote:
> check if it is already defined before defining SM750LE_REVISION_ID
> again and at the same time mention correct data type.
>
> Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
> ---
>
> v2: removed the redundant cast in sm750_hw.c
>
> drivers/staging/sm750fb/ddk750_chip.h | 4 +++-
> drivers/staging/sm750fb/sm750_hw.c | 2 +-
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
> index 1c78875..d761b72 100644
> --- a/drivers/staging/sm750fb/ddk750_chip.h
> +++ b/drivers/staging/sm750fb/ddk750_chip.h
> @@ -1,7 +1,9 @@
> #ifndef DDK750_CHIP_H__
> #define DDK750_CHIP_H__
> #define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
> -#define SM750LE_REVISION_ID (char)0xfe
> +#ifndef SM750LE_REVISION_ID
> +#define SM750LE_REVISION_ID ((unsigned char)0xfe)
BTW who is defining this somewhere else ?
Cheers,
--Prabhakar Lad
^ permalink raw reply
* Re: [PATCH v2 1/4] staging: sm750fb: wrong type for print
From: Sudip Mukherjee @ 2015-03-09 8:42 UTC (permalink / raw)
To: Lad, Prabhakar
Cc: Tomi Valkeinen, Greg Kroah-Hartman, LFBDEV, OSUOSL Drivers, LKML
In-Reply-To: <CA+V-a8s65fCvd2cA6w2EwaJfaLgPqQ=Hme+m9_wv+y3Y=GxPiQ@mail.gmail.com>
On Mon, Mar 09, 2015 at 07:42:53AM +0000, Lad, Prabhakar wrote:
> On Mon, Mar 9, 2015 at 7:35 AM, Sudip Mukherjee
> <sudipm.mukherjee@gmail.com> wrote:
> >
> >
> > this patch will give checkpatch warnings about use of printk.
> > this patch was mainly to fix the build warnings. printk will be
> > converted to pr_* and dev_* in a later patch.
> >
> > + printk("lynxfb mmap pgoff: %lx\n", vma->vm_pgoff);
> > + printk("lynxfb mmap off 1: %lx\n", off);
> >
> wouldn't it makes sense to change printk to some pr_*() ?
yes, i could have. But usually Greg does not accept patches which is doing more than one type of change. That is why I mentioned in the comments that this will be converted to pr_* and dev_* in a later patch.
regards
sudip
>
> Cheers,
> --Prabhakar Lad
^ permalink raw reply
* Re: [PATCH v2 3/4] staging: sm750fb: correctly define SM750LE_REVISION_ID
From: Sudip Mukherjee @ 2015-03-09 8:53 UTC (permalink / raw)
To: Lad, Prabhakar; +Cc: Greg Kroah-Hartman, LFBDEV, OSUOSL Drivers, LKML
In-Reply-To: <CA+V-a8sNsxzz38K5KOn7WyDPDR=2bCNpg+53ULQn3qcTPCvcqw@mail.gmail.com>
On Mon, Mar 09, 2015 at 07:47:40AM +0000, Lad, Prabhakar wrote:
> On Mon, Mar 9, 2015 at 7:35 AM, Sudip Mukherjee
> <sudipm.mukherjee@gmail.com> wrote:
> > check if it is already defined before defining SM750LE_REVISION_ID
> > again and at the same time mention correct data type.
> >
> > Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
> > ---
> >
> > v2: removed the redundant cast in sm750_hw.c
> >
> > drivers/staging/sm750fb/ddk750_chip.h | 4 +++-
> > drivers/staging/sm750fb/sm750_hw.c | 2 +-
> > 2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/staging/sm750fb/ddk750_chip.h b/drivers/staging/sm750fb/ddk750_chip.h
> > index 1c78875..d761b72 100644
> > --- a/drivers/staging/sm750fb/ddk750_chip.h
> > +++ b/drivers/staging/sm750fb/ddk750_chip.h
> > @@ -1,7 +1,9 @@
> > #ifndef DDK750_CHIP_H__
> > #define DDK750_CHIP_H__
> > #define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
> > -#define SM750LE_REVISION_ID (char)0xfe
> > +#ifndef SM750LE_REVISION_ID
> > +#define SM750LE_REVISION_ID ((unsigned char)0xfe)
>
> BTW who is defining this somewhere else ?
it is defined in ddk750_chip.h which is again being used by ddk750_chip.c .
regards
sudip
>
> Cheers,
> --Prabhakar Lad
^ permalink raw reply
* Re: [PATCH 1/4] staging: sm750fb: wrong type for print
From: Dan Carpenter @ 2015-03-09 9:22 UTC (permalink / raw)
To: Sudip Mukherjee; +Cc: Greg Kroah-Hartman, devel, linux-fbdev, linux-kernel
In-Reply-To: <1425817886-14387-1-git-send-email-sudipm.mukherjee@gmail.com>
On Sun, Mar 08, 2015 at 06:01:23PM +0530, Sudip Mukherjee wrote:
> diff --git a/drivers/staging/sm750fb/sm750.h b/drivers/staging/sm750fb/sm750.h
> index 711676c..2ab7b74 100644
> --- a/drivers/staging/sm750fb/sm750.h
> +++ b/drivers/staging/sm750fb/sm750.h
> @@ -59,10 +59,10 @@ struct lynx_share{
> }mtrr;
> #endif
> /* all smi graphic adaptor got below attributes */
> - resource_size_t vidmem_start;
> - resource_size_t vidreg_start;
> - resource_size_t vidmem_size;
> - resource_size_t vidreg_size;
> + unsigned long vidmem_start;
> + unsigned long vidreg_start;
> + unsigned long vidmem_size;
> + unsigned long vidreg_size;
> volatile unsigned char __iomem * pvReg;
> unsigned char __iomem * pvMem;
> /* locks*/
This seems like a very risky sort of change. It's not explained very
well in the changelog. What's the deal?
regards,
dan carpenter
^ permalink raw reply
* Re: [PATCH v11 1/6] mfd: Add support for Skyworks SKY81452 driver
From: Lee Jones @ 2015-03-09 9:40 UTC (permalink / raw)
To: gyungoh-Re5JQEeQqe8AvxtiuMwx3w
Cc: sameo-VuQAYsv1563Yd54FQh9/CA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A,
jg1.han-Sze3O3UU22JBDgjK7y7TUQ, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg,
galak-sgV2jX0FEOL9JmXXK+q4OQ, trivial-DgEjT+Ai2ygdnm+yROfE0A,
broonie-DgEjT+Ai2ygdnm+yROfE0A, florian.vaussard-p8DiymsW2f8,
andrew-g2DYL2Zd6BY, antonynpavlov-Re5JQEeQqe8AvxtiuMwx3w,
hytszk-Re5JQEeQqe8AvxtiuMwx3w, plagnioj-sclMFOaUSTBWk0Htik3J/w,
tomi.valkeinen-l0cyMroinI0, jack.yoo-tjhQNA90jdKqndwCJWfcng,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, treding-DDmLM1+adcrQT0dZR+AlfA,
p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ, arno-LkuqDEemtHBg9hUCZPvPmw,
kuninori.morimoto.gx-zM6kxYcvzFBBDgjK7y7TUQ
In-Reply-To: <1425019346-4559-2-git-send-email-jack.yoo-tjhQNA90jdKqndwCJWfcng@public.gmane.org>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> Acked-by: Lee Jones <lee.jones@linaro.org>
> ---
> Changes v11:
> Nothing
>
> Changes v10:
> Nothing
>
> Changes v9:
> Nothing
>
> Changes v8:
> Nothing
>
> Changes v7:
> Modified licensing text to GPLv2
>
> Changes v6:
> Added new line character at the end of line of dev_err()
>
> Changes v5:
> Move sky81452-backlight.h to include/linux/platform_data
>
> Changes v4:
> Removed MODULE_VERSION()
> Modified license to GPLv2
>
> Changes v3:
> Fixed the backlight name from 'sky81452-bl' to 'sky81452-backlight'
> Assigned mfd_cell.of_compatible for binding device node
> Modified error messages
>
> Changes v2:
> Renamed CONFIG_SKY81452 to CONFIG_MFD_SKY81452
> Changed the dependency from I2C=y to I2C, for CONFIG_MFD_SKY81452
> Added message for exception or errors
>
> drivers/mfd/Kconfig | 12 +++++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/sky81452.c | 108 +++++++++++++++++++++++++++++++++++++++++++
> include/linux/mfd/sky81452.h | 31 +++++++++++++
> 4 files changed, 152 insertions(+)
> create mode 100644 drivers/mfd/sky81452.c
> create mode 100644 include/linux/mfd/sky81452.h
>
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 38356e3..bc3b540 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -753,6 +753,18 @@ config MFD_SM501_GPIO
> lines on the SM501. The platform data is used to supply the
> base number for the first GPIO line to register.
>
> +config MFD_SKY81452
> + tristate "Skyworks Solutions SKY81452"
> + select MFD_CORE
> + select REGMAP_I2C
> + depends on I2C
> + help
> + This is the core driver for the Skyworks SKY81452 backlight and
> + voltage regulator device.
> +
> + This driver can also be built as a module. If so, the module
> + will be called sky81452.
> +
> config MFD_SMSC
> bool "SMSC ECE1099 series chips"
> depends on I2C=y
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 19f3d74..75b3ffb 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -178,6 +178,7 @@ obj-$(CONFIG_MFD_MENF21BMC) += menf21bmc.o
> obj-$(CONFIG_MFD_HI6421_PMIC) += hi6421-pmic-core.o
> obj-$(CONFIG_MFD_DLN2) += dln2.o
> obj-$(CONFIG_MFD_RT5033) += rt5033.o
> +obj-$(CONFIG_MFD_SKY81452) += sky81452.o
>
> intel-soc-pmic-objs := intel_soc_pmic_core.o intel_soc_pmic_crc.o
> obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.o
> diff --git a/drivers/mfd/sky81452.c b/drivers/mfd/sky81452.c
> new file mode 100644
> index 0000000..b0c9b04
> --- /dev/null
> +++ b/drivers/mfd/sky81452.c
> @@ -0,0 +1,108 @@
> +/*
> + * sky81452.c SKY81452 MFD driver
> + *
> + * Copyright 2014 Skyworks Solutions Inc.
> + * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License version 2
> + * as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/err.h>
> +#include <linux/slab.h>
> +#include <linux/i2c.h>
> +#include <linux/regmap.h>
> +#include <linux/mfd/core.h>
> +#include <linux/mfd/sky81452.h>
> +
> +static const struct regmap_config sky81452_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> +};
> +
> +static int sky81452_probe(struct i2c_client *client,
> + const struct i2c_device_id *id)
> +{
> + struct device *dev = &client->dev;
> + const struct sky81452_platform_data *pdata = dev_get_platdata(dev);
> + struct mfd_cell cells[2];
> + struct regmap *regmap;
> + int ret;
> +
> + if (!pdata) {
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> + if (!pdata)
> + return -ENOMEM;
> + }
> +
> + regmap = devm_regmap_init_i2c(client, &sky81452_config);
> + if (IS_ERR(regmap)) {
> + dev_err(dev, "failed to initialize.err=%ld\n", PTR_ERR(regmap));
> + return PTR_ERR(regmap);
> + }
> +
> + i2c_set_clientdata(client, regmap);
> +
> + memset(cells, 0, sizeof(cells));
> + cells[0].name = "sky81452-backlight";
> + cells[0].of_compatible = "skyworks,sky81452-backlight";
> + cells[0].platform_data = pdata->bl_pdata;
> + cells[0].pdata_size = sizeof(*pdata->bl_pdata);
> + cells[1].name = "sky81452-regulator";
> + cells[1].platform_data = pdata->regulator_init_data;
> + cells[1].pdata_size = sizeof(*pdata->regulator_init_data);
> +
> + ret = mfd_add_devices(dev, -1, cells, ARRAY_SIZE(cells), NULL, 0, NULL);
> + if (ret)
> + dev_err(dev, "failed to add child devices. err=%d\n", ret);
> +
> + return ret;
> +}
> +
> +static int sky81452_remove(struct i2c_client *client)
> +{
> + mfd_remove_devices(&client->dev);
> + return 0;
> +}
> +
> +static const struct i2c_device_id sky81452_ids[] = {
> + { "sky81452" },
> + { }
> +};
> +MODULE_DEVICE_TABLE(i2c, sky81452_ids);
> +
> +#ifdef CONFIG_OF
> +static const struct of_device_id sky81452_of_match[] = {
> + { .compatible = "skyworks,sky81452", },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, sky81452_of_match);
> +#endif
> +
> +static struct i2c_driver sky81452_driver = {
> + .driver = {
> + .name = "sky81452",
> + .of_match_table = of_match_ptr(sky81452_of_match),
> + },
> + .probe = sky81452_probe,
> + .remove = sky81452_remove,
> + .id_table = sky81452_ids,
> +};
> +
> +module_i2c_driver(sky81452_driver);
> +
> +MODULE_DESCRIPTION("Skyworks SKY81452 MFD driver");
> +MODULE_AUTHOR("Gyungoh Yoo <jack.yoo@skyworksinc.com>");
> +MODULE_LICENSE("GPL v2");
> diff --git a/include/linux/mfd/sky81452.h b/include/linux/mfd/sky81452.h
> new file mode 100644
> index 0000000..b0925fa
> --- /dev/null
> +++ b/include/linux/mfd/sky81452.h
> @@ -0,0 +1,31 @@
> +/*
> + * sky81452.h SKY81452 MFD driver
> + *
> + * Copyright 2014 Skyworks Solutions Inc.
> + * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License version 2
> + * as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef _SKY81452_H
> +#define _SKY81452_H
> +
> +#include <linux/platform_data/sky81452-backlight.h>
> +#include <linux/regulator/machine.h>
> +
> +struct sky81452_platform_data {
> + struct sky81452_bl_platform_data *bl_pdata;
> + struct regulator_init_data *regulator_init_data;
> +};
> +
> +#endif
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH v11 2/6] backlight: Add support Skyworks SKY81452 backlight driver
From: Lee Jones @ 2015-03-09 9:40 UTC (permalink / raw)
To: gyungoh
Cc: sameo, robh+dt, jg1.han, pawel.moll, mark.rutland, ijc+devicetree,
galak, trivial, broonie, florian.vaussard, andrew, antonynpavlov,
hytszk, plagnioj, tomi.valkeinen, jack.yoo, linux-fbdev,
linux-kernel, devicetree, treding, p.zabel, arno,
kuninori.morimoto.gx
In-Reply-To: <1425019346-4559-3-git-send-email-jack.yoo@skyworksinc.com>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> Acked-by: Jingoo Han <jg1.han@samsung.com>
> Acked-by: Bryan Wu <cooloney@gmail.com>
> ---
> Changes v11:
> Renamed 'skyworks,en-channels' property to led-sources.
>
> Changes v10:
> Removed trivial get_brightness implementations
>
> Changes v9:
> Nothing
>
> Changes v8:
> Renamed property names for backlight with vendor prefix
> Modified gpio-enable property to generic property for GPIO
>
> Changes v7:
> Modified licensing text to GPLv2
>
> Changes v6:
> Added new line character at the end of line of dev_err()
>
> Changes v5:
> Move sky81452-backlight.h to include/linux/platform_data
>
> Changes v4:
> Reordering header files for readability
> Removed calling to backlight_device_unregister()
> Removed MODULE_VERSION()
> Modified license to GPLv2
>
> Changes v3:
> Modified DBG messages
>
> Changes v2:
> Added 'compatible' attribute in the driver
> Added message for exception or errors
>
> drivers/video/backlight/Kconfig | 10 +
> drivers/video/backlight/Makefile | 1 +
> drivers/video/backlight/sky81452-backlight.c | 353 +++++++++++++++++++++++
> include/linux/platform_data/sky81452-backlight.h | 46 +++
> 4 files changed, 410 insertions(+)
> create mode 100644 drivers/video/backlight/sky81452-backlight.c
> create mode 100644 include/linux/platform_data/sky81452-backlight.h
>
> diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
> index efb0904..2d9923a 100644
> --- a/drivers/video/backlight/Kconfig
> +++ b/drivers/video/backlight/Kconfig
> @@ -408,6 +408,16 @@ config BACKLIGHT_PANDORA
> If you have a Pandora console, say Y to enable the
> backlight driver.
>
> +config BACKLIGHT_SKY81452
> + tristate "Backlight driver for SKY81452"
> + depends on BACKLIGHT_CLASS_DEVICE && MFD_SKY81452
> + help
> + If you have a Skyworks SKY81452, say Y to enable the
> + backlight driver.
> +
> + To compile this driver as a module, choose M here: the module will
> + be called sky81452-backlight
> +
> config BACKLIGHT_TPS65217
> tristate "TPS65217 Backlight"
> depends on BACKLIGHT_CLASS_DEVICE && MFD_TPS65217
> diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
> index fcd50b73..d67073f 100644
> --- a/drivers/video/backlight/Makefile
> +++ b/drivers/video/backlight/Makefile
> @@ -50,6 +50,7 @@ obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o
> obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o
> obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
> obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o
> +obj-$(CONFIG_BACKLIGHT_SKY81452) += sky81452-backlight.o
> obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o
> obj-$(CONFIG_BACKLIGHT_TPS65217) += tps65217_bl.o
> obj-$(CONFIG_BACKLIGHT_WM831X) += wm831x_bl.o
> diff --git a/drivers/video/backlight/sky81452-backlight.c b/drivers/video/backlight/sky81452-backlight.c
> new file mode 100644
> index 0000000..052fa1b
> --- /dev/null
> +++ b/drivers/video/backlight/sky81452-backlight.c
> @@ -0,0 +1,353 @@
> +/*
> + * sky81452-backlight.c SKY81452 backlight driver
> + *
> + * Copyright 2014 Skyworks Solutions Inc.
> + * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License version 2
> + * as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <linux/backlight.h>
> +#include <linux/err.h>
> +#include <linux/gpio.h>
> +#include <linux/init.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_gpio.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +#include <linux/platform_data/sky81452-backlight.h>
> +#include <linux/slab.h>
> +
> +/* registers */
> +#define SKY81452_REG0 0x00
> +#define SKY81452_REG1 0x01
> +#define SKY81452_REG2 0x02
> +#define SKY81452_REG4 0x04
> +#define SKY81452_REG5 0x05
> +
> +/* bit mask */
> +#define SKY81452_CS 0xFF
> +#define SKY81452_EN 0x3F
> +#define SKY81452_IGPW 0x20
> +#define SKY81452_PWMMD 0x10
> +#define SKY81452_PHASE 0x08
> +#define SKY81452_ILIM 0x04
> +#define SKY81452_VSHRT 0x03
> +#define SKY81452_OCP 0x80
> +#define SKY81452_OTMP 0x40
> +#define SKY81452_SHRT 0x3F
> +#define SKY81452_OPN 0x3F
> +
> +#define SKY81452_DEFAULT_NAME "lcd-backlight"
> +#define SKY81452_MAX_BRIGHTNESS (SKY81452_CS + 1)
> +
> +#define CTZ(b) __builtin_ctz(b)
> +
> +static int sky81452_bl_update_status(struct backlight_device *bd)
> +{
> + const struct sky81452_bl_platform_data *pdata > + dev_get_platdata(bd->dev.parent);
> + const unsigned int brightness = (unsigned int)bd->props.brightness;
> + struct regmap *regmap = bl_get_data(bd);
> + int ret;
> +
> + if (brightness > 0) {
> + ret = regmap_write(regmap, SKY81452_REG0, brightness - 1);
> + if (IS_ERR_VALUE(ret))
> + return ret;
> +
> + return regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN,
> + pdata->enable << CTZ(SKY81452_EN));
> + }
> +
> + return regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN, 0);
> +}
> +
> +static const struct backlight_ops sky81452_bl_ops = {
> + .update_status = sky81452_bl_update_status,
> +};
> +
> +static ssize_t sky81452_bl_store_enable(struct device *dev,
> + struct device_attribute *attr, const char *buf, size_t count)
> +{
> + struct regmap *regmap = bl_get_data(to_backlight_device(dev));
> + unsigned long value;
> + int ret;
> +
> + ret = kstrtoul(buf, 16, &value);
> + if (IS_ERR_VALUE(ret))
> + return ret;
> +
> + ret = regmap_update_bits(regmap, SKY81452_REG1, SKY81452_EN,
> + value << CTZ(SKY81452_EN));
> + if (IS_ERR_VALUE(ret))
> + return ret;
> +
> + return count;
> +}
> +
> +static ssize_t sky81452_bl_show_open_short(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + struct regmap *regmap = bl_get_data(to_backlight_device(dev));
> + unsigned int reg, value = 0;
> + char tmp[3];
> + int i, ret;
> +
> + reg = !strcmp(attr->attr.name, "open") ? SKY81452_REG5 : SKY81452_REG4;
> + ret = regmap_read(regmap, reg, &value);
> + if (IS_ERR_VALUE(ret))
> + return ret;
> +
> + if (value & SKY81452_SHRT) {
> + *buf = 0;
> + for (i = 0; i < 6; i++) {
> + if (value & 0x01) {
> + sprintf(tmp, "%d ", i + 1);
> + strcat(buf, tmp);
> + }
> + value >>= 1;
> + }
> + strcat(buf, "\n");
> + } else {
> + strcpy(buf, "none\n");
> + }
> +
> + return strlen(buf);
> +}
> +
> +static ssize_t sky81452_bl_show_fault(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + struct regmap *regmap = bl_get_data(to_backlight_device(dev));
> + unsigned int value = 0;
> + int ret;
> +
> + ret = regmap_read(regmap, SKY81452_REG4, &value);
> + if (IS_ERR_VALUE(ret))
> + return ret;
> +
> + *buf = 0;
> +
> + if (value & SKY81452_OCP)
> + strcat(buf, "over-current ");
> +
> + if (value & SKY81452_OTMP)
> + strcat(buf, "over-temperature");
> +
> + strcat(buf, "\n");
> + return strlen(buf);
> +}
> +
> +static DEVICE_ATTR(enable, S_IWGRP | S_IWUSR, NULL, sky81452_bl_store_enable);
> +static DEVICE_ATTR(open, S_IRUGO, sky81452_bl_show_open_short, NULL);
> +static DEVICE_ATTR(short, S_IRUGO, sky81452_bl_show_open_short, NULL);
> +static DEVICE_ATTR(fault, S_IRUGO, sky81452_bl_show_fault, NULL);
> +
> +static struct attribute *sky81452_bl_attribute[] = {
> + &dev_attr_enable.attr,
> + &dev_attr_open.attr,
> + &dev_attr_short.attr,
> + &dev_attr_fault.attr,
> + NULL
> +};
> +
> +static const struct attribute_group sky81452_bl_attr_group = {
> + .attrs = sky81452_bl_attribute,
> +};
> +
> +#ifdef CONFIG_OF
> +static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(
> + struct device *dev)
> +{
> + struct device_node *np = of_node_get(dev->of_node);
> + struct sky81452_bl_platform_data *pdata;
> + int num_entry;
> + unsigned int sources[6];
> + int ret;
> +
> + if (!np) {
> + dev_err(dev, "backlight node not found.\n");
> + return ERR_PTR(-ENODATA);
> + }
> +
> + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> + if (!pdata) {
> + of_node_put(np);
> + return ERR_PTR(-ENOMEM);
> + }
> +
> + of_property_read_string(np, "name", &pdata->name);
> + pdata->ignore_pwm = of_property_read_bool(np, "skyworks,ignore-pwm");
> + pdata->dpwm_mode = of_property_read_bool(np, "skyworks,dpwm-mode");
> + pdata->phase_shift = of_property_read_bool(np, "skyworks,phase-shift");
> + pdata->gpio_enable = of_get_gpio(np, 0);
> +
> + ret = of_property_count_u32_elems(np, "led-sources");
> + if (IS_ERR_VALUE(ret)) {
> + pdata->enable = SKY81452_EN >> CTZ(SKY81452_EN);
> + } else {
> + num_entry = ret;
> + if (num_entry > 6)
> + num_entry = 6;
> +
> + ret = of_property_read_u32_array(np, "led-sources", sources,
> + num_entry);
> + if (IS_ERR_VALUE(ret)) {
> + dev_err(dev, "led-sources node is invalid.\n");
> + return ERR_PTR(-EINVAL);
> + }
> +
> + pdata->enable = 0;
> + while (--num_entry)
> + pdata->enable |= (1 << sources[num_entry]);
> + }
> +
> + ret = of_property_read_u32(np,
> + "skyworks,short-detection-threshold-volt",
> + &pdata->short_detection_threshold);
> + if (IS_ERR_VALUE(ret))
> + pdata->short_detection_threshold = 7;
> +
> + ret = of_property_read_u32(np, "skyworks,current-limit-mA",
> + &pdata->boost_current_limit);
> + if (IS_ERR_VALUE(ret))
> + pdata->boost_current_limit = 2750;
> +
> + of_node_put(np);
> + return pdata;
> +}
> +#else
> +static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(
> + struct device *dev)
> +{
> + return ERR_PTR(-EINVAL);
> +}
> +#endif
> +
> +static int sky81452_bl_init_device(struct regmap *regmap,
> + struct sky81452_bl_platform_data *pdata)
> +{
> + unsigned int value;
> +
> + value = pdata->ignore_pwm ? SKY81452_IGPW : 0;
> + value |= pdata->dpwm_mode ? SKY81452_PWMMD : 0;
> + value |= pdata->phase_shift ? 0 : SKY81452_PHASE;
> +
> + if (pdata->boost_current_limit = 2300)
> + value |= SKY81452_ILIM;
> + else if (pdata->boost_current_limit != 2750)
> + return -EINVAL;
> +
> + if (pdata->short_detection_threshold < 4 ||
> + pdata->short_detection_threshold > 7)
> + return -EINVAL;
> + value |= (7 - pdata->short_detection_threshold) << CTZ(SKY81452_VSHRT);
> +
> + return regmap_write(regmap, SKY81452_REG2, value);
> +}
> +
> +static int sky81452_bl_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct regmap *regmap = dev_get_drvdata(dev->parent);
> + struct sky81452_bl_platform_data *pdata = dev_get_platdata(dev);
> + struct backlight_device *bd;
> + struct backlight_properties props;
> + const char *name;
> + int ret;
> +
> + if (!pdata) {
> + pdata = sky81452_bl_parse_dt(dev);
> + if (IS_ERR(pdata))
> + return PTR_ERR(pdata);
> + }
> +
> + if (gpio_is_valid(pdata->gpio_enable)) {
> + ret = devm_gpio_request_one(dev, pdata->gpio_enable,
> + GPIOF_OUT_INIT_HIGH, "sky81452-en");
> + if (IS_ERR_VALUE(ret)) {
> + dev_err(dev, "failed to request GPIO. err=%d\n", ret);
> + return ret;
> + }
> + }
> +
> + ret = sky81452_bl_init_device(regmap, pdata);
> + if (IS_ERR_VALUE(ret)) {
> + dev_err(dev, "failed to initialize. err=%d\n", ret);
> + return ret;
> + }
> +
> + memset(&props, 0, sizeof(props));
> + props.max_brightness = SKY81452_MAX_BRIGHTNESS,
> + name = pdata->name ? pdata->name : SKY81452_DEFAULT_NAME;
> + bd = devm_backlight_device_register(dev, name, dev, regmap,
> + &sky81452_bl_ops, &props);
> + if (IS_ERR(bd)) {
> + dev_err(dev, "failed to register. err=%ld\n", PTR_ERR(bd));
> + return PTR_ERR(bd);
> + }
> +
> + platform_set_drvdata(pdev, bd);
> +
> + ret = sysfs_create_group(&bd->dev.kobj, &sky81452_bl_attr_group);
> + if (IS_ERR_VALUE(ret)) {
> + dev_err(dev, "failed to create attribute. err=%d\n", ret);
> + return ret;
> + }
> +
> + return ret;
> +}
> +
> +static int sky81452_bl_remove(struct platform_device *pdev)
> +{
> + const struct sky81452_bl_platform_data *pdata > + dev_get_platdata(&pdev->dev);
> + struct backlight_device *bd = platform_get_drvdata(pdev);
> +
> + sysfs_remove_group(&bd->dev.kobj, &sky81452_bl_attr_group);
> +
> + bd->props.power = FB_BLANK_UNBLANK;
> + bd->props.brightness = 0;
> + backlight_update_status(bd);
> +
> + if (gpio_is_valid(pdata->gpio_enable))
> + gpio_set_value_cansleep(pdata->gpio_enable, 0);
> +
> + return 0;
> +}
> +
> +#ifdef CONFIG_OF
> +static const struct of_device_id sky81452_bl_of_match[] = {
> + { .compatible = "skyworks,sky81452-backlight", },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, sky81452_bl_of_match);
> +#endif
> +
> +static struct platform_driver sky81452_bl_driver = {
> + .driver = {
> + .name = "sky81452-backlight",
> + .of_match_table = of_match_ptr(sky81452_bl_of_match),
> + },
> + .probe = sky81452_bl_probe,
> + .remove = sky81452_bl_remove,
> +};
> +
> +module_platform_driver(sky81452_bl_driver);
> +
> +MODULE_DESCRIPTION("Skyworks SKY81452 backlight driver");
> +MODULE_AUTHOR("Gyungoh Yoo <jack.yoo@skyworksinc.com>");
> +MODULE_LICENSE("GPL v2");
> diff --git a/include/linux/platform_data/sky81452-backlight.h b/include/linux/platform_data/sky81452-backlight.h
> new file mode 100644
> index 0000000..1231e9b
> --- /dev/null
> +++ b/include/linux/platform_data/sky81452-backlight.h
> @@ -0,0 +1,46 @@
> +/*
> + * sky81452.h SKY81452 backlight driver
> + *
> + * Copyright 2014 Skyworks Solutions Inc.
> + * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License version 2
> + * as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef _SKY81452_BACKLIGHT_H
> +#define _SKY81452_BACKLIGHT_H
> +
> +/**
> + * struct sky81452_platform_data
> + * @name: backlight driver name.
> + If it is not defined, default name is lcd-backlight.
> + * @gpio_enable:GPIO number which control EN pin
> + * @enable: Enable mask for current sink channel 1, 2, 3, 4, 5 and 6.
> + * @ignore_pwm: true if DPWMI should be ignored.
> + * @dpwm_mode: true is DPWM dimming mode, otherwise Analog dimming mode.
> + * @phase_shift:true is phase shift mode.
> + * @short_detecion_threshold: It should be one of 4, 5, 6 and 7V.
> + * @boost_current_limit: It should be one of 2300, 2750mA.
> + */
> +struct sky81452_bl_platform_data {
> + const char *name;
> + int gpio_enable;
> + unsigned int enable;
> + bool ignore_pwm;
> + bool dpwm_mode;
> + bool phase_shift;
> + unsigned int short_detection_threshold;
> + unsigned int boost_current_limit;
> +};
> +
> +#endif
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH v11 3/6] devicetree: Add new SKY81452 mfd binding
From: Lee Jones @ 2015-03-09 9:40 UTC (permalink / raw)
To: gyungoh-Re5JQEeQqe8AvxtiuMwx3w
Cc: sameo-VuQAYsv1563Yd54FQh9/CA, robh+dt-DgEjT+Ai2ygdnm+yROfE0A,
jg1.han-Sze3O3UU22JBDgjK7y7TUQ, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg,
galak-sgV2jX0FEOL9JmXXK+q4OQ, trivial-DgEjT+Ai2ygdnm+yROfE0A,
broonie-DgEjT+Ai2ygdnm+yROfE0A, florian.vaussard-p8DiymsW2f8,
andrew-g2DYL2Zd6BY, antonynpavlov-Re5JQEeQqe8AvxtiuMwx3w,
hytszk-Re5JQEeQqe8AvxtiuMwx3w, plagnioj-sclMFOaUSTBWk0Htik3J/w,
tomi.valkeinen-l0cyMroinI0, jack.yoo-tjhQNA90jdKqndwCJWfcng,
linux-fbdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, treding-DDmLM1+adcrQT0dZR+AlfA,
p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ, arno-LkuqDEemtHBg9hUCZPvPmw,
kuninori.morimoto.gx-zM6kxYcvzFBBDgjK7y7TUQ
In-Reply-To: <1425019346-4559-4-git-send-email-jack.yoo-tjhQNA90jdKqndwCJWfcng@public.gmane.org>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> Acked-by: Lee Jones <lee.jones@linaro.org>
> ---
> Changes v11:
> Renamed 'skyworks,en-channels' property to led-sources.
> Removed unused property 'skyworks,ovp-level'.
>
> Changes v10:
> Nothing
>
> Changes v9:
> Nothing
>
> Changes v8:
> Made up the example for backlight DT
>
> Changes v7:
> Nothing
>
> Changes v6:
> Nothing
>
> Changes v5:
> Changed DT for regulator : 'lout' node should be defined under 'regulator'
> Removed compatible string from sky81452-regulator driver
>
> Changes v4:
> Nothing
>
> Changes v3:
> Nothing
>
> Changes v2:
> Added reg attribute for I2C slave address
>
> Documentation/devicetree/bindings/mfd/sky81452.txt | 35 ++++++++++++++++++++++
> 1 file changed, 35 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mfd/sky81452.txt
>
> diff --git a/Documentation/devicetree/bindings/mfd/sky81452.txt b/Documentation/devicetree/bindings/mfd/sky81452.txt
> new file mode 100644
> index 0000000..3518179
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/sky81452.txt
> @@ -0,0 +1,35 @@
> +SKY81452 bindings
> +
> +Required properties:
> +- compatible : Must be "skyworks,sky81452"
> +- reg : I2C slave address
> +
> +Required child nodes:
> +- backlight : container node for backlight following the binding
> + in video/backlight/sky81452-backlight.txt
> +- regulator : container node for regulators following the binding
> + in regulator/sky81452-regulator.txt
> +
> +Example:
> +
> + sky81452@2c {
> + compatible = "skyworks,sky81452";
> + reg = <0x2c>;
> +
> + backlight {
> + compatible = "skyworks,sky81452-backlight";
> + name = "pwm-backlight";
> + led-sources = <0 1 2 3 6>;
> + skyworks,ignore-pwm;
> + skyworks,phase-shift;
> + skyworks,current-limit = <2300>;
> + };
> +
> + regulator {
> + lout {
> + regulator-name = "sky81452-lout";
> + regulator-min-microvolt = <4500000>;
> + regulator-max-microvolt = <8000000>;
> + };
> + };
> + };
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH v11 4/6] devicetree: Add new SKY81452 backlight binding
From: Lee Jones @ 2015-03-09 9:40 UTC (permalink / raw)
To: gyungoh
Cc: sameo, robh+dt, jg1.han, pawel.moll, mark.rutland, ijc+devicetree,
galak, trivial, broonie, florian.vaussard, andrew, antonynpavlov,
hytszk, plagnioj, tomi.valkeinen, jack.yoo, linux-fbdev,
linux-kernel, devicetree, treding, p.zabel, arno,
kuninori.morimoto.gx
In-Reply-To: <1425019346-4559-5-git-send-email-jack.yoo@skyworksinc.com>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> Acked-by: Bryan Wu <cooloney@gmail.com>
> ---
> Changes v11:
> Renamed 'skyworks,en-channels' property to led-sources.
> Removed unused property 'skyworks,ovp-level'.
>
> Changes v10:
> Nothing
>
> Changes v9:
> Nothing
>
> Changes v8:
> Renamed property names for backlight with vendor prefix
> Modified gpio-enable property to generic property for GPIO
> Made up the example for backlight DT
>
> Changes v7:
> Nothing
>
> Changes v6:
> Nothing
>
> Changes v5:
> Nothing
>
> Changes v4:
> Nothing
>
> Changes v3:
> Nothing
>
> Changes v2:
> Added reg attribute for I2C slave address
>
> .../video/backlight/sky81452-backlight.txt | 29 ++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/video/backlight/sky81452-backlight.txt
>
> diff --git a/Documentation/devicetree/bindings/video/backlight/sky81452-backlight.txt b/Documentation/devicetree/bindings/video/backlight/sky81452-backlight.txt
> new file mode 100644
> index 0000000..8bf2940
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/video/backlight/sky81452-backlight.txt
> @@ -0,0 +1,29 @@
> +SKY81452-backlight bindings
> +
> +Required properties:
> +- compatible : Must be "skyworks,sky81452-backlight"
> +
> +Optional properties:
> +- name : Name of backlight device. Default is 'lcd-backlight'.
> +- gpios : GPIO to use to EN pin.
> + See Documentation/devicetree/bindings/gpio/gpio.txt
> +- led-sources : List of enabled channels from 0 to 5.
> + See Documentation/devicetree/bindings/leds/common.txt
> +- skyworks,ignore-pwm : Ignore both PWM input
> +- skyworks,dpwm-mode : Enable DPWM dimming mode, otherwise Analog dimming.
> +- skyworks,phase-shift : Enable phase shift mode
> +- skyworks,short-detection-threshold-volt
> + : It should be one of 4, 5, 6 and 7V.
> +- skyworks,current-limit-mA
> + : It should be 2300mA or 2750mA.
> +
> +Example:
> +
> + backlight {
> + compatible = "skyworks,sky81452-backlight";
> + name = "pwm-backlight";
> + led-sources = <0 1 2 5>;
> + skyworks,ignore-pwm;
> + skyworks,phase-shift;
> + skyworks,current-limit-mA = <2300>;
> + };
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH v11 5/6] devicetree: Add vendor prefix for Skyworks Solutions, Inc.
From: Lee Jones @ 2015-03-09 9:41 UTC (permalink / raw)
To: gyungoh
Cc: sameo, robh+dt, jg1.han, pawel.moll, mark.rutland, ijc+devicetree,
galak, trivial, broonie, florian.vaussard, andrew, antonynpavlov,
hytszk, plagnioj, tomi.valkeinen, jack.yoo, linux-fbdev,
linux-kernel, devicetree, treding, p.zabel, arno,
kuninori.morimoto.gx
In-Reply-To: <1425019346-4559-6-git-send-email-jack.yoo@skyworksinc.com>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> Acked-by: Lee Jones <lee.jones@linaro.org>
> ---
> Changes v11:
> Nothing
>
> Changes v10:
> Nothing
>
> Changes v9:
> Nothing
>
> Changes v8:
> Nothing
>
> Changes v7:
> Nothing
>
> Changes v6:
> Nothing
>
> Changes v5:
> Nothing
>
> Changes v4:
> Nothing
>
> Changes v3:
> Nothing
>
> Changes v2:
> Added vendor prefix for Skyworks Solutions, Inc.
>
> Documentation/devicetree/bindings/vendor-prefixes.txt | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
> index 389ca13..c4fe9cc 100644
> --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
> +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
> @@ -165,6 +165,7 @@ sii Seiko Instruments, Inc.
> silergy Silergy Corp.
> sirf SiRF Technology, Inc.
> sitronix Sitronix Technology Corporation
> +skyworks Skyworks Solutions, Inc.
> smsc Standard Microsystems Corporation
> snps Synopsys, Inc.
> solidrun SolidRun
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply
* Re: [PATCH v11 6/6] devicetree: Add SKY81452 to the Trivial Devices list
From: Lee Jones @ 2015-03-09 9:41 UTC (permalink / raw)
To: gyungoh
Cc: sameo, robh+dt, jg1.han, pawel.moll, mark.rutland, ijc+devicetree,
galak, trivial, broonie, florian.vaussard, andrew, antonynpavlov,
hytszk, plagnioj, tomi.valkeinen, jack.yoo, linux-fbdev,
linux-kernel, devicetree, treding, p.zabel, arno,
kuninori.morimoto.gx
In-Reply-To: <1425019346-4559-7-git-send-email-jack.yoo@skyworksinc.com>
Applied, thanks.
On Fri, 27 Feb 2015, gyungoh@gmail.com wrote:
> From: Gyungoh Yoo <jack.yoo@skyworksinc.com>
>
> Signed-off-by: Gyungoh Yoo <jack.yoo@skyworksinc.com>
> ---
> Changes v11:
> Nothing
>
> Changes v10:
> Nothing
>
> Changes v9:
> Nothing
>
> Changes v8:
> Nothing
>
> Changes v7:
> Nothing
>
> Changes v6:
> Nothing
>
> Changes v5:
> Nothing
>
> Changes v4:
> Nothing
>
> Changes v3:
> Nothing
>
> Changes v2:
> Add SKY81452 to the Trivial Devices list
>
> Documentation/devicetree/bindings/i2c/trivial-devices.txt | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
> index aaa8325..003bd77 100644
> --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt
> +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
> @@ -89,6 +89,7 @@ ricoh,rv5c386 I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
> ricoh,rv5c387a I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
> samsung,24ad0xd1 S524AD0XF1 (128K/256K-bit Serial EEPROM for Low Power)
> sii,s35390a 2-wire CMOS real-time clock
> +skyworks,sky81452 Skyworks SKY81452: Six-Channel White LED Driver with Touch Panel Bias Supply
> st-micro,24c256 i2c serial eeprom (24cxx)
> stm,m41t00 Serial Access TIMEKEEPER
> stm,m41t62 Serial real-time clock (RTC) with alarm
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ 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