Change snvs rtc and poweroff to use syscon add pwrkey driver
Subsystems (7)
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
From: Frank Li <[email protected]>
Change from v1 to v2
- Change simple-bus to simple-mfd
- RTC remove lock.
- RTC remove comments "These register offsets are relative to LP (Low Power) range"
- power off, remove extra space
SNVS is MPF module.
include rtc, power off, ON/OFF power key
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Above two patch change existed power-off and rtc use syscon
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
Update dt file and document
input: keyboard: imx: add snvs power key driver
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Added on/off key driver
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Robin Gong (1):
input: keyboard: imx: add snvs power key driver
.../devicetree/bindings/crypto/fsl-sec4.txt | 93 +++++++-- .../devicetree/bindings/input/snvs-pwrkey.txt | 1 + .../bindings/power_supply/imx-snvs-poweroff.txt | 24 +-- arch/arm/boot/dts/imx6qdl.dtsi | 12 +- arch/arm/boot/dts/imx6sl.dtsi | 12 +- arch/arm/boot/dts/imx6sx.dtsi | 19 +- arch/arm/boot/dts/vfxxx.dtsi | 9 +- drivers/input/keyboard/Kconfig | 11 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/snvs_pwrkey.c | 232 +++++++++++++++++++++ drivers/power/reset/imx-snvs-poweroff.c | 21 +- drivers/rtc/rtc-snvs.c | 128 +++++------- 12 files changed, 417 insertions(+), 146 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/snvs-pwrkey.txt create mode 100644 drivers/input/keyboard/snvs_pwrkey.c
Signature · 1 line
1.9.1
PATCH v2 1/7 arm: imx: power-off: change to syscon to access register
From: Frank Li <[email protected]>
snvs is MFP device, which included rtc, ON/OFF key, power off
--- drivers/power/reset/imx-snvs-poweroff.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
drivers/power/reset/imx-snvs-poweroff.c +15 -6
@@ -22,21 +22,30 @@#include <linux/of.h> #include <linux/of_address.h> #include <linux/platform_device.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> -static void __iomem *snvs_base; +static struct regmap *snvs; + +#define SNVS_LPCR 0x38static void do_imx_poweroff (void ) { -u32 value =readl (snvs_base); -/* set TOP and DP_EN bit */ -writel (value |0x60 , snvs_base); +regmap_update_bits (snvs,SNVS_LPCR ,0x60 ,0x60 ); }static int imx_poweroff_probe (struct platform_device *pdev) { - snvs_base =of_iomap (pdev->dev.of_node,0 ); -if (!snvs_base) { +struct device_node *nd; + + nd =of_get_parent (pdev->dev.of_node); +if (!nd) +return -ENODEV ; + snvs =syscon_node_to_regmap (nd); +of_node_put (nd); + +if (!snvs) {dev_err (&pdev->dev,"failed to get memory\n" );return -ENODEV ; }
Signature · 1 line
1.9.1
PATCH v2 2/7 rtc: arm: imx: snvs: change use syscon to access register
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
snvs included rtc, on/off key, power-off module
change to syscon to access register
--- drivers/rtc/rtc-snvs.c | 128 +++++++++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 74 deletions(-)
drivers/rtc/rtc-snvs.c +54 -74
@@ -18,14 +18,15 @@#include <linux/platform_device.h> #include <linux/rtc.h> #include <linux/clk.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> -/* These register offsets are relative to LP (Low Power) range */ -#define SNVS_LPCR 0x04 -#define SNVS_LPSR 0x18 -#define SNVS_LPSRTCMR 0x1c -#define SNVS_LPSRTCLR 0x20 -#define SNVS_LPTAR 0x24 -#define SNVS_LPPGDR 0x30 +#define SNVS_LPCR 0x38 +#define SNVS_LPSR 0x4c +#define SNVS_LPSRTCMR 0x50 +#define SNVS_LPSRTCLR 0x54 +#define SNVS_LPTAR 0x58 +#define SNVS_LPPGDR 0x64#define SNVS_LPCR_SRTC_ENV (1 << 0)#define SNVS_LPCR_LPTA_EN (1 << 1)
@@ -37,31 +38,34 @@struct snvs_rtc_data {struct rtc_device *rtc; -void __iomem *ioaddr; +struct regmap *snvs;int irq; -spinlock_t lock;struct clk *clk; }; -static u32 rtc_read_lp_counter (void __iomem *ioaddr) +static u32 rtc_read_lp_counter (struct regmap *snvs) {u64 read1, read2; - +u32 val;do { - read1 =readl (ioaddr +SNVS_LPSRTCMR ); +regmap_read (snvs,SNVS_LPSRTCMR , &val); + read1 = val; read1 <<=32 ; - read1 |=readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &val); + read1 |= val; - read2 =readl (ioaddr +SNVS_LPSRTCMR ); +regmap_read (snvs,SNVS_LPSRTCMR , &val); + read2 = val; read2 <<=32 ; - read2 |=readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &val); + read2 |= val; }while (read1 != read2);/* Convert 47-bit counter to 32-bit raw second count */ return (u32) (read1 >>CNTR_TO_SECS_SH ); } -static void rtc_write_sync_lp (void __iomem *ioaddr) +static void rtc_write_sync_lp (struct regmap *snvs) {u32 count1, count2, count3;int i;
@@ -69,15 +73,15 @@ static void rtc_write_sync_lp(void __iomem *ioaddr)/* Wait for 3 CKIL cycles */ for (i =0 ; i <3 ; i++) {do { - count1 =readl (ioaddr +SNVS_LPSRTCLR ); - count2 =readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &count1); +regmap_read (snvs,SNVS_LPSRTCLR , &count2); }while (count1 != count2);/* Now wait until counter value changes */ do {do { - count2 =readl (ioaddr +SNVS_LPSRTCLR ); - count3 =readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &count2); +regmap_read (snvs,SNVS_LPSRTCLR , &count3); }while (count2 != count3); }while (count3 == count1); }
@@ -85,23 +89,14 @@ static void rtc_write_sync_lp(void __iomem *ioaddr)static int snvs_rtc_enable (struct snvs_rtc_data *data,bool enable) { -unsigned long flags;int timeout =1000 ;u32 lpcr; -spin_lock_irqsave (&data->lock, flags); - - lpcr =readl (data->ioaddr +SNVS_LPCR ); -if (enable) - lpcr |=SNVS_LPCR_SRTC_ENV ; -else - lpcr &= ~SNVS_LPCR_SRTC_ENV ; -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); +regmap_update_bits (data->snvs,SNVS_LPCR ,SNVS_LPCR_SRTC_ENV , + enable ?SNVS_LPCR_SRTC_ENV :0 );while (--timeout) { - lpcr =readl (data->ioaddr +SNVS_LPCR ); +regmap_read (data->snvs,SNVS_LPCR , &lpcr);if (enable) {if (lpcr &SNVS_LPCR_SRTC_ENV )
@@ -121,7 +116,7 @@ static int snvs_rtc_enable(struct snvs_rtc_data *data, bool enable)static int snvs_rtc_read_time (struct device *dev,struct rtc_time *tm) {struct snvs_rtc_data *data =dev_get_drvdata (dev); -unsigned long time =rtc_read_lp_counter (data->ioaddr); +unsigned long time =rtc_read_lp_counter (data->snvs);rtc_time_to_tm (time, tm);
@@ -139,8 +134,8 @@ static int snvs_rtc_set_time(struct device *dev, struct rtc_time *tm)snvs_rtc_enable (data, false);/* Write 32-bit time to 47-bit timer, leaving 15 LSBs blank */ -writel (time <<CNTR_TO_SECS_SH , data->ioaddr +SNVS_LPSRTCLR ); -writel (time >> (32 -CNTR_TO_SECS_SH ), data->ioaddr +SNVS_LPSRTCMR ); +regmap_write (data->snvs,SNVS_LPSRTCLR , time <<CNTR_TO_SECS_SH ); +regmap_write (data->snvs,SNVS_LPSRTCMR , time >> (32 -CNTR_TO_SECS_SH ));/* Enable RTC again */ snvs_rtc_enable (data, true);
@@ -153,10 +148,10 @@ static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)struct snvs_rtc_data *data =dev_get_drvdata (dev);u32 lptar, lpsr; - lptar =readl (data->ioaddr +SNVS_LPTAR ); +regmap_read (data->snvs,SNVS_LPTAR , &lptar);rtc_time_to_tm (lptar, &alrm->time); - lpsr =readl (data->ioaddr +SNVS_LPSR ); +regmap_read (data->snvs,SNVS_LPSR , &lpsr); alrm->pending = (lpsr &SNVS_LPSR_LPTA ) ?1 :0 ;return 0 ;
@@ -165,21 +160,11 @@ static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)static int snvs_rtc_alarm_irq_enable (struct device *dev,unsigned int enable) {struct snvs_rtc_data *data =dev_get_drvdata (dev); -u32 lpcr; -unsigned long flags; -spin_lock_irqsave (&data->lock, flags); +regmap_update_bits (data->snvs,SNVS_LPCR , (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ), + enable ? (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ) :0 ); - lpcr =readl (data->ioaddr +SNVS_LPCR ); -if (enable) - lpcr |= (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ); -else - lpcr &= ~(SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ); -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); - -rtc_write_sync_lp (data->ioaddr); +rtc_write_sync_lp (data->snvs);return 0 ; }
@@ -189,24 +174,14 @@ static int snvs_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)struct snvs_rtc_data *data =dev_get_drvdata (dev);struct rtc_time *alrm_tm = &alrm->time;unsigned long time; -unsigned long flags; -u32 lpcr;rtc_tm_to_time (alrm_tm, &time); -spin_lock_irqsave (&data->lock, flags); - -/* Have to clear LPTA_EN before programming new alarm time in LPTAR */ - lpcr =readl (data->ioaddr +SNVS_LPCR ); - lpcr &= ~SNVS_LPCR_LPTA_EN ; -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); - -writel (time, data->ioaddr +SNVS_LPTAR ); +regmap_update_bits (data->snvs,SNVS_LPCR ,SNVS_LPCR_LPTA_EN ,0 ); +regmap_write (data->snvs,SNVS_LPTAR , time);/* Clear alarm interrupt status bit */ -writel (SNVS_LPSR_LPTA , data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR ,SNVS_LPSR_LPTA );return snvs_rtc_alarm_irq_enable (dev, alrm->enabled); }
@@ -226,7 +201,7 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)u32 lpsr;u32 events =0 ; - lpsr =readl (data->ioaddr +SNVS_LPSR ); +regmap_read (data->snvs,SNVS_LPSR , &lpsr);if (lpsr &SNVS_LPSR_LPTA ) { events |= (RTC_AF |RTC_IRQF );
@@ -238,7 +213,7 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id) }/* clear interrupt status */ -writel (lpsr, data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR , lpsr);return events ?IRQ_HANDLED :IRQ_NONE ; }
@@ -246,17 +221,24 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)static int snvs_rtc_probe (struct platform_device *pdev) {struct snvs_rtc_data *data; -struct resource *res;int ret; +struct device_node *snvs_np; data =devm_kzalloc (&pdev->dev,sizeof (*data),GFP_KERNEL );if (!data)return -ENOMEM ; - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - data->ioaddr =devm_ioremap_resource (&pdev->dev, res); -if (IS_ERR (data->ioaddr)) -return PTR_ERR (data->ioaddr); + snvs_np =of_get_parent (pdev->dev.of_node); +if (!snvs_np) +return -ENODEV ; + + data->snvs =syscon_node_to_regmap (snvs_np); +of_node_put (snvs_np); + +if (!data->snvs) { +pr_err ("Can't snvs syscon\n" ); +return -ENODEV ; + } data->irq =platform_get_irq (pdev,0 );if (data->irq <0 )
@@ -276,13 +258,11 @@ static int snvs_rtc_probe(struct platform_device *pdev)platform_set_drvdata (pdev, data); -spin_lock_init (&data->lock); -/* Initialize glitch detect */ -writel (SNVS_LPPGDR_INIT , data->ioaddr +SNVS_LPPGDR ); +regmap_write (data->snvs,SNVS_LPPGDR ,SNVS_LPPGDR_INIT );/* Clear interrupt status */ -writel (0xffffffff , data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR ,0xffffffff );/* Enable RTC */ snvs_rtc_enable (data, true);
Signature · 1 line
1.9.1
PATCH v2 2/7 rtc: arm: imx: snvs: change use syscon to access register
Quoted 6 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
snvs included rtc, on/off key, power-off module
change to syscon to access registerSigned-off-by Frank Li <[email protected]>
Quoted 275 lines
--- drivers/rtc/rtc-snvs.c | 128 +++++++++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 74 deletions(-)drivers/rtc/rtc-snvs.c +54
-74@@ -18,14 +18,15 @@#include <linux/platform_device.h> #include <linux/rtc.h> #include <linux/clk.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> -/* These register offsets are relative to LP (Low Power) range */ -#define SNVS_LPCR 0x04 -#define SNVS_LPSR 0x18 -#define SNVS_LPSRTCMR 0x1c -#define SNVS_LPSRTCLR 0x20 -#define SNVS_LPTAR 0x24 -#define SNVS_LPPGDR 0x30 +#define SNVS_LPCR 0x38 +#define SNVS_LPSR 0x4c +#define SNVS_LPSRTCMR 0x50 +#define SNVS_LPSRTCLR 0x54 +#define SNVS_LPTAR 0x58 +#define SNVS_LPPGDR 0x64#define SNVS_LPCR_SRTC_ENV (1 << 0)#define SNVS_LPCR_LPTA_EN (1 << 1)@@ -37,31 +38,34 @@struct snvs_rtc_data {struct rtc_device *rtc; -void __iomem *ioaddr; +struct regmap *snvs;int irq; -spinlock_t lock;struct clk *clk; }; -static u32 rtc_read_lp_counter (void __iomem *ioaddr) +static u32 rtc_read_lp_counter (struct regmap *snvs) {u64 read1, read2; - +u32 val;do { - read1 =readl (ioaddr +SNVS_LPSRTCMR ); +regmap_read (snvs,SNVS_LPSRTCMR , &val); + read1 = val; read1 <<=32 ; - read1 |=readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &val); + read1 |= val; - read2 =readl (ioaddr +SNVS_LPSRTCMR ); +regmap_read (snvs,SNVS_LPSRTCMR , &val); + read2 = val; read2 <<=32 ; - read2 |=readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &val); + read2 |= val; }while (read1 != read2);/* Convert 47-bit counter to 32-bit raw second count */ return (u32) (read1 >>CNTR_TO_SECS_SH ); } -static void rtc_write_sync_lp (void __iomem *ioaddr) +static void rtc_write_sync_lp (struct regmap *snvs) {u32 count1, count2, count3;int i;@@ -69,15 +73,15 @@ static void rtc_write_sync_lp(void __iomem *ioaddr)/* Wait for 3 CKIL cycles */ for (i =0 ; i <3 ; i++) {do { - count1 =readl (ioaddr +SNVS_LPSRTCLR ); - count2 =readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &count1); +regmap_read (snvs,SNVS_LPSRTCLR , &count2); }while (count1 != count2);/* Now wait until counter value changes */ do {do { - count2 =readl (ioaddr +SNVS_LPSRTCLR ); - count3 =readl (ioaddr +SNVS_LPSRTCLR ); +regmap_read (snvs,SNVS_LPSRTCLR , &count2); +regmap_read (snvs,SNVS_LPSRTCLR , &count3); }while (count2 != count3); }while (count3 == count1); }@@ -85,23 +89,14 @@ static void rtc_write_sync_lp(void __iomem *ioaddr)static int snvs_rtc_enable (struct snvs_rtc_data *data,bool enable) { -unsigned long flags;int timeout =1000 ;u32 lpcr; -spin_lock_irqsave (&data->lock, flags); - - lpcr =readl (data->ioaddr +SNVS_LPCR ); -if (enable) - lpcr |=SNVS_LPCR_SRTC_ENV ; -else - lpcr &= ~SNVS_LPCR_SRTC_ENV ; -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); +regmap_update_bits (data->snvs,SNVS_LPCR ,SNVS_LPCR_SRTC_ENV , + enable ?SNVS_LPCR_SRTC_ENV :0 );while (--timeout) { - lpcr =readl (data->ioaddr +SNVS_LPCR ); +regmap_read (data->snvs,SNVS_LPCR , &lpcr);if (enable) {if (lpcr &SNVS_LPCR_SRTC_ENV )@@ -121,7 +116,7 @@ static int snvs_rtc_enable(struct snvs_rtc_data *data, bool enable)static int snvs_rtc_read_time (struct device *dev,struct rtc_time *tm) {struct snvs_rtc_data *data =dev_get_drvdata (dev); -unsigned long time =rtc_read_lp_counter (data->ioaddr); +unsigned long time =rtc_read_lp_counter (data->snvs);rtc_time_to_tm (time, tm);@@ -139,8 +134,8 @@ static int snvs_rtc_set_time(struct device *dev, struct rtc_time *tm)snvs_rtc_enable (data, false);/* Write 32-bit time to 47-bit timer, leaving 15 LSBs blank */ -writel (time <<CNTR_TO_SECS_SH , data->ioaddr +SNVS_LPSRTCLR ); -writel (time >> (32 -CNTR_TO_SECS_SH ), data->ioaddr +SNVS_LPSRTCMR ); +regmap_write (data->snvs,SNVS_LPSRTCLR , time <<CNTR_TO_SECS_SH ); +regmap_write (data->snvs,SNVS_LPSRTCMR , time >> (32 -CNTR_TO_SECS_SH ));/* Enable RTC again */ snvs_rtc_enable (data, true);@@ -153,10 +148,10 @@ static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)struct snvs_rtc_data *data =dev_get_drvdata (dev);u32 lptar, lpsr; - lptar =readl (data->ioaddr +SNVS_LPTAR ); +regmap_read (data->snvs,SNVS_LPTAR , &lptar);rtc_time_to_tm (lptar, &alrm->time); - lpsr =readl (data->ioaddr +SNVS_LPSR ); +regmap_read (data->snvs,SNVS_LPSR , &lpsr); alrm->pending = (lpsr &SNVS_LPSR_LPTA ) ?1 :0 ;return 0 ;@@ -165,21 +160,11 @@ static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)static int snvs_rtc_alarm_irq_enable (struct device *dev,unsigned int enable) {struct snvs_rtc_data *data =dev_get_drvdata (dev); -u32 lpcr; -unsigned long flags; -spin_lock_irqsave (&data->lock, flags); +regmap_update_bits (data->snvs,SNVS_LPCR , (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ), + enable ? (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ) :0 ); - lpcr =readl (data->ioaddr +SNVS_LPCR ); -if (enable) - lpcr |= (SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ); -else - lpcr &= ~(SNVS_LPCR_LPTA_EN |SNVS_LPCR_LPWUI_EN ); -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); - -rtc_write_sync_lp (data->ioaddr); +rtc_write_sync_lp (data->snvs);return 0 ; }@@ -189,24 +174,14 @@ static int snvs_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)struct snvs_rtc_data *data =dev_get_drvdata (dev);struct rtc_time *alrm_tm = &alrm->time;unsigned long time; -unsigned long flags; -u32 lpcr;rtc_tm_to_time (alrm_tm, &time); -spin_lock_irqsave (&data->lock, flags); - -/* Have to clear LPTA_EN before programming new alarm time in LPTAR */ - lpcr =readl (data->ioaddr +SNVS_LPCR ); - lpcr &= ~SNVS_LPCR_LPTA_EN ; -writel (lpcr, data->ioaddr +SNVS_LPCR ); - -spin_unlock_irqrestore (&data->lock, flags); - -writel (time, data->ioaddr +SNVS_LPTAR ); +regmap_update_bits (data->snvs,SNVS_LPCR ,SNVS_LPCR_LPTA_EN ,0 ); +regmap_write (data->snvs,SNVS_LPTAR , time);/* Clear alarm interrupt status bit */ -writel (SNVS_LPSR_LPTA , data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR ,SNVS_LPSR_LPTA );return snvs_rtc_alarm_irq_enable (dev, alrm->enabled); }@@ -226,7 +201,7 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)u32 lpsr;u32 events =0 ; - lpsr =readl (data->ioaddr +SNVS_LPSR ); +regmap_read (data->snvs,SNVS_LPSR , &lpsr);if (lpsr &SNVS_LPSR_LPTA ) { events |= (RTC_AF |RTC_IRQF );@@ -238,7 +213,7 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id) }/* clear interrupt status */ -writel (lpsr, data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR , lpsr);return events ?IRQ_HANDLED :IRQ_NONE ; }@@ -246,17 +221,24 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)static int snvs_rtc_probe (struct platform_device *pdev) {struct snvs_rtc_data *data; -struct resource *res;int ret; +struct device_node *snvs_np; data =devm_kzalloc (&pdev->dev,sizeof (*data),GFP_KERNEL );if (!data)return -ENOMEM ; - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - data->ioaddr =devm_ioremap_resource (&pdev->dev, res); -if (IS_ERR (data->ioaddr)) -return PTR_ERR (data->ioaddr); + snvs_np =of_get_parent (pdev->dev.of_node); +if (!snvs_np) +return -ENODEV ; + + data->snvs =syscon_node_to_regmap (snvs_np); +of_node_put (snvs_np); + +if (!data->snvs) { +pr_err ("Can't snvs syscon\n" ); +return -ENODEV ; + } data->irq =platform_get_irq (pdev,0 );if (data->irq <0 )@@ -276,13 +258,11 @@ static int snvs_rtc_probe(struct platform_device *pdev)platform_set_drvdata (pdev, data); -spin_lock_init (&data->lock); -/* Initialize glitch detect */ -writel (SNVS_LPPGDR_INIT , data->ioaddr +SNVS_LPPGDR ); +regmap_write (data->snvs,SNVS_LPPGDR ,SNVS_LPPGDR_INIT );/* Clear interrupt status */ -writel (0xffffffff , data->ioaddr +SNVS_LPSR ); +regmap_write (data->snvs,SNVS_LPSR ,0xffffffff );/* Enable RTC */ snvs_rtc_enable (data, true);Signature · 1 line
1.9.1
Signature · 3 lines
Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH v2 3/7 Document: dt: fsl: snvs: change support syscon
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
snvs actually is multi fucntion driver.
Change to use syscon to access register.
--- .../devicetree/bindings/crypto/fsl-sec4.txt | 51 ++++++++++++++++------ .../bindings/power_supply/imx-snvs-poweroff.txt | 24 +--------- 2 files changed, 39 insertions(+), 36 deletions(-)
Documentation/devicetree/bindings/crypto/fsl-sec4.txt +38 -13
@@ -288,12 +288,13 @@ Secure Non-Volatile Storage (SNVS) Node Node defines address range and the associated interrupt for the SNVS function. This function monitors security state information & reports - security violations. + security violations. This also included rtc, + system power off and ON/OFF key. - compatible Usage: required Value type: <string> - Definition: Must include "fsl,sec-v4.0-mon". + Definition: Must include "fsl,sec-v4.0-mon" and "syscon". - reg Usage: required
@@ -324,7 +325,7 @@ Secure Non-Volatile Storage (SNVS) Node the child address, parent address, & length. - interrupts - Usage: required + Usage: optional Value type: <prop_encoded-array> Definition: Specifies the interrupts generated by this device. The value of the interrupts property
@@ -341,7 +342,7 @@ Secure Non-Volatile Storage (SNVS) Node EXAMPLE sec_mon at 314000 { - compatible = "fsl,sec-v4.0-mon"; + compatible = "fsl,sec-v4.0-mon", "syscon"; reg = <0x314000 0x1000>; ranges = <0 0x314000 0x1000>; interrupt-parent = <&mpic>;
@@ -358,19 +359,41 @@ Secure Non-Volatile Storage (SNVS) Low Power (LP) RTC Node Value type: <string> Definition: Must include "fsl,sec-v4.0-mon-rtc-lp". - - reg + - interrupts Usage: required - Value type: <prop-encoded-array> - Definition: A standard property. Specifies the physical - address and length of the SNVS LP configuration registers. + Value type: <prop_encoded-array> + Definition: Specifies the interrupts generated by this + device. The value of the interrupts property + consists of one interrupt specifier. The format + of the specifier is defined by the binding document + describing the node's interrupt parent. EXAMPLE - sec_mon_rtc_lp at 314000 { + sec_mon_rtc_lp at 1 { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; + interrupts = <93 2>; }; ===================================================================== +System power off Driver + + A SNVS child node that define system power off + SNVS_LPCR in SNVS module can power off the whole system by pull + PMIC_ON_REQ low if PMIC_ON_REQ is connected with external PMIC. + If you don't want to use PMIC_ON_REQ as power on/off control, + please set status='disabled' to disable this driver. + + - compatible + Usage: regquied + Value type: <string> + Definition: Must include "fsl,sec-v4.0-poweroff" + +EXAMPLE + snvs_poweroff: snvs-poweroff { + compatible = "fsl,sec-v4.0-poweroff"; +}; + +===================================================================== FULL EXAMPLE crypto: crypto at 300000 {
@@ -443,13 +466,15 @@ FULL EXAMPLE compatible = "fsl,sec-v4.0-mon"; reg = <0x314000 0x1000>; ranges = <0 0x314000 0x1000>; - interrupt-parent = <&mpic>; - interrupts = <93 2>; sec_mon_rtc_lp at 34 { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; + interrupts = <93 2>; }; + + snvs_poweroff: snvs-poweroff at 38 { + compatible = "fsl,sec-v4.0-poweroff"; + }; }; =====================================================================
Documentation/devicetree/bindings/power_supply/imx-snvs-poweroff.txt +1 -23
@@ -1,23 +1 @@ -i.mx6 Poweroff Driver - -SNVS_LPCR in SNVS module can power off the whole system by pull -PMIC_ON_REQ low if PMIC_ON_REQ is connected with external PMIC. -If you don't want to use PMIC_ON_REQ as power on/off control, -please set status='disabled' to disable this driver. - -Required Properties: --compatible: "fsl,sec-v4.0-poweroff" --reg: Specifies the physical address of the SNVS_LPCR register - -Example: - snvs at 020cc000 { - compatible = "fsl,sec-v4.0-mon", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x020cc000 0x4000>; - ..... - snvs_poweroff: snvs-poweroff at 38 { - compatible = "fsl,sec-v4.0-poweroff"; - reg = <0x38 0x4>; - }; - } +See Documentation/devicetree/bindings/crypto/fsl-sec4.txt
Signature · 1 line
1.9.1
PATCH v2 4/7 arm: dts: imx: update snvs to use syscon access register
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
snvs is MFP device. Change dts to use syscon to allocate register resource.
--- arch/arm/boot/dts/imx6qdl.dtsi | 12 ++++-------- arch/arm/boot/dts/imx6sl.dtsi | 12 ++++-------- arch/arm/boot/dts/imx6sx.dtsi | 12 ++++-------- arch/arm/boot/dts/vfxxx.dtsi | 9 +++------ 4 files changed, 15 insertions(+), 30 deletions(-)
arch/arm/boot/dts/imx6qdl.dtsi +4 -8
@@ -687,21 +687,17 @@ }; snvs at 020cc000 { - compatible = "fsl,sec-v4.0-mon", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x020cc000 0x4000>; + compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; + reg = <0x020cc000 0x4000>; - snvs_rtc: snvs-rtc-lp at 34 { + snvs_rtc: snvs-rtc-lp { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, <0 20 IRQ_TYPE_LEVEL_HIGH>; }; - snvs_poweroff: snvs-poweroff at 38 { + snvs_poweroff: snvs-poweroff { compatible = "fsl,sec-v4.0-poweroff"; - reg = <0x38 0x4>; status = "disabled"; }; };
arch/arm/boot/dts/imx6sl.dtsi +4 -8
@@ -564,21 +564,17 @@ }; snvs at 020cc000 { - compatible = "fsl,sec-v4.0-mon", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x020cc000 0x4000>; + compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; + reg = <0x020cc000 0x4000>; - snvs_rtc: snvs-rtc-lp at 34 { + snvs_rtc: snvs-rtc-lp { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, <0 20 IRQ_TYPE_LEVEL_HIGH>; }; - snvs_poweroff: snvs-poweroff at 38 { + snvs_poweroff: snvs-poweroff { compatible = "fsl,sec-v4.0-poweroff"; - reg = <0x38 0x4>; status = "disabled"; }; };
arch/arm/boot/dts/imx6sx.dtsi +4 -8
@@ -662,20 +662,16 @@ }; snvs: snvs at 020cc000 { - compatible = "fsl,sec-v4.0-mon", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x020cc000 0x4000>; + compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; + reg = <0x020cc000 0x4000>; - snvs_rtc: snvs-rtc-lp at 34 { + snvs_rtc: snvs-rtc-lp { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; }; - snvs_poweroff: snvs-poweroff at 38 { + snvs_poweroff: snvs-poweroff { compatible = "fsl,sec-v4.0-poweroff"; - reg = <0x38 0x4>; status = "disabled"; }; };
arch/arm/boot/dts/vfxxx.dtsi +3 -6
@@ -404,14 +404,11 @@ }; snvs0: snvs at 400a7000 { - compatible = "fsl,sec-v4.0-mon", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x400a7000 0x2000>; + compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; + reg = <0x400a7000 0x2000>; - snvsrtc: snvs-rtc-lp at 34 { + snvsrtc: snvs-rtc-lp { compatible = "fsl,sec-v4.0-mon-rtc-lp"; - reg = <0x34 0x58>; interrupts = <100 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks VF610_CLK_SNVS>; clock-names = "snvs-rtc";
Signature · 1 line
1.9.1
PATCH v2 5/7 input: keyboard: imx: add snvs power key driver
In reply to Frank.Li at freescale.comFrom: Robin Gong <[email protected]>
add snvs power key driver.
It work in imx chips after i.mx6sx
ON/OFF key used power on/off whole system.
This driver make it wakeup from suspend state when short press ON/OFF key.
Long time press will trig SNVS power off chip without software intervention.
--- drivers/input/keyboard/Kconfig | 11 ++ drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/snvs_pwrkey.c | 232 +++++++++++++++++++++++++++++++++++ 3 files changed, 244 insertions(+) create mode 100644 drivers/input/keyboard/snvs_pwrkey.c
drivers/input/keyboard/Kconfig +11 -0
@@ -400,6 +400,17 @@ config KEYBOARD_MPR121 To compile this driver as a module, choose M here: the module will be called mpr121_touchkey. +config KEYBOARD_SNVS_PWRKEY + tristate "IMX SNVS Power Key Driver" + depends on SOC_IMX6SX + depends on OF + help + This is the snvs powerkey driver for the Freescale i.MX application + processors that are newer than i.MX6 SX. + + To compile this driver as a module, choose M here; the + module will be called snvs_pwrkey. + config KEYBOARD_IMX tristate "IMX keypad support" depends on ARCH_MXC
drivers/input/keyboard/Makefile +1 -0
@@ -51,6 +51,7 @@ obj-$(CONFIG_KEYBOARD_QT1070) += qt1070.o obj-$(CONFIG_KEYBOARD_QT2160) += qt2160.o obj-$(CONFIG_KEYBOARD_SAMSUNG) += samsung-keypad.o obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o +obj-$(CONFIG_KEYBOARD_SNVS_PWRKEY) += snvs_pwrkey.o obj-$(CONFIG_KEYBOARD_SPEAR) += spear-keyboard.o obj-$(CONFIG_KEYBOARD_STMPE) += stmpe-keypad.o obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
drivers/input/keyboard/snvs_pwrkey.c new file +232 -0
232 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v2 6/7 document: devicetree: input: imx: i.mx snvs power device tree bindings
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
The snvs-pwrkey is designed to enable POWER key function which controlled by SNVS ONOFF. the driver can report the status of POWER key and wakeup system if pressed after system suspend.
--- .../devicetree/bindings/crypto/fsl-sec4.txt | 42 ++++++++++++++++++++++ .../devicetree/bindings/input/snvs-pwrkey.txt | 1 + 2 files changed, 43 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/snvs-pwrkey.txt
Documentation/devicetree/bindings/crypto/fsl-sec4.txt +42 -0
@@ -394,6 +394,41 @@ EXAMPLE }; ===================================================================== +System ON/OFF key driver + + The snvs-pwrkey is designed to enable POWER key function which controlled + by SNVS ONOFF, the driver can report the status of POWER key and wakeup + system if pressed after system suspend. + + - compatible: + Usage: required + Value type: <string> + Definition: Mush include "fsl,sec-v4.0-pwrkey". + + - interrupts: + Usage: required + Value type: <prop_encoded-array> + Definition: The SNVS ON/OFF interrupt number to the CPU(s). + + - linux,keycode: + Usage: option + Value type: <int> + Definition: Keycode to emit, KEY_POWER by default. + + - wakeup: + Usage: option + Value type: <boo> + Definition: Button can wake-up the system + +EXAMPLE: + snvs-pwrkey at 0x020cc000 { + compatible = "fsl,sec-v4.0-pwrkey"; + interrupts = <0 4 0x4> + linux,keycode = <116>; /* KEY_POWER */ + wakeup; + }; + +===================================================================== FULL EXAMPLE crypto: crypto at 300000 {
@@ -475,6 +510,13 @@ FULL EXAMPLE snvs_poweroff: snvs-poweroff at 38 { compatible = "fsl,sec-v4.0-poweroff"; }; + + snvs-pwrkey at 0x020cc000 { + compatible = "fsl,sec-v4.0-pwrkey"; + interrupts = <0 4 0x4>; + linux,keycode = <116>; /* KEY_POWER */ + wakeup; + }; }; =====================================================================
Documentation/devicetree/bindings/input/snvs-pwrkey.txt new file +1 -0
@@ -0,0 +1 @@ +See Documentation/devicetree/bindings/crypto/fsl-sec4.txt
Signature · 1 line
1.9.1
PATCH v2 7/7 arm: dts: imx6sx: enable snvs power key
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
enable snvs ONOFF power key support
--- arch/arm/boot/dts/imx6sx.dtsi | 7 +++++++ 1 file changed, 7 insertions(+)
arch/arm/boot/dts/imx6sx.dtsi +7 -0
@@ -674,6 +674,13 @@ compatible = "fsl,sec-v4.0-poweroff"; status = "disabled"; }; + + snvs_pwrkey: snvs-powerkey { + compatible = "fsl,sec-v4.0-pwrkey"; + interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; + linux,keycode = <116>; /* KEY_POWER */ + wakeup; + }; }; epit1: epit at 020d0000 {
Signature · 1 line
1.9.1
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
In reply to Frank.Li at freescale.comQuoted 24 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Change from v1 to v2
- Change simple-bus to simple-mfd
- RTC remove lock.
- RTC remove comments "These register offsets are relative to LP (Low Power) range"
- power off, remove extra spaceSNVS is MPF module.
include rtc, power off, ON/OFF power keyarm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Above two patch change existed power-off and rtc use sysconDocument: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
Update dt file and documentinput: keyboard: imx: add snvs power key driver
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Added on/off key driver
Quoted 7 lines
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
Shawn
Quoted 28 lines
Robin Gong (1):
input: keyboard: imx: add snvs power key driver.../devicetree/bindings/crypto/fsl-sec4.txt | 93 +++++++-- .../devicetree/bindings/input/snvs-pwrkey.txt | 1 + .../bindings/power_supply/imx-snvs-poweroff.txt | 24 +-- arch/arm/boot/dts/imx6qdl.dtsi | 12 +- arch/arm/boot/dts/imx6sl.dtsi | 12 +- arch/arm/boot/dts/imx6sx.dtsi | 19 +- arch/arm/boot/dts/vfxxx.dtsi | 9 +- drivers/input/keyboard/Kconfig | 11 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/snvs_pwrkey.c | 232 +++++++++++++++++++++ drivers/power/reset/imx-snvs-poweroff.c | 21 +- drivers/rtc/rtc-snvs.c | 128 +++++------- 12 files changed, 417 insertions(+), 146 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/snvs-pwrkey.txt create mode 100644 drivers/input/keyboard/snvs_pwrkey.cSignature · 7 lines
1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel at lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 33 lines · Shawn Guo
Quoted 24 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Change from v1 to v2
- Change simple-bus to simple-mfd
- RTC remove lock.
- RTC remove comments "These register offsets are relative to LP (Low Power) range"
- power off, remove extra spaceSNVS is MPF module.
include rtc, power off, ON/OFF power keyarm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Above two patch change existed power-off and rtc use sysconDocument: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
Update dt file and documentinput: keyboard: imx: add snvs power key driver
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Added on/off key driverQuoted 7 lines
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
How to do that?
Just added it commit message or need runtime warning?
Quoted 31 lines
Shawn
Quoted 28 lines
Robin Gong (1):
input: keyboard: imx: add snvs power key driver.../devicetree/bindings/crypto/fsl-sec4.txt | 93 +++++++-- .../devicetree/bindings/input/snvs-pwrkey.txt | 1 + .../bindings/power_supply/imx-snvs-poweroff.txt | 24 +-- arch/arm/boot/dts/imx6qdl.dtsi | 12 +- arch/arm/boot/dts/imx6sl.dtsi | 12 +- arch/arm/boot/dts/imx6sx.dtsi | 19 +- arch/arm/boot/dts/vfxxx.dtsi | 9 +- drivers/input/keyboard/Kconfig | 11 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/snvs_pwrkey.c | 232 +++++++++++++++++++++ drivers/power/reset/imx-snvs-poweroff.c | 21 +- drivers/rtc/rtc-snvs.c | 128 +++++------- 12 files changed, 417 insertions(+), 146 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/snvs-pwrkey.txt create mode 100644 drivers/input/keyboard/snvs_pwrkey.c--
1.9.1_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 34 lines · Zhi Li
Quoted 33 lines · Shawn Guo
Quoted 31 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Change from v1 to v2
- Change simple-bus to simple-mfd
- RTC remove lock.
- RTC remove comments "These register offsets are relative to LP (Low Power) range"
- power off, remove extra spaceSNVS is MPF module.
include rtc, power off, ON/OFF power keyarm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Above two patch change existed power-off and rtc use sysconDocument: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
Update dt file and documentinput: keyboard: imx: add snvs power key driver
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Added on/off key driverFrank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Quoted 6 lines
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
How to do that?
Just added it commit message or need runtime warning?
runtime, so that users can know why their installed DTBs break with the new kernel.
Shawn
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 39 lines · Shawn Guo
Quoted 38 lines · Zhi Li
Quoted 36 lines · Shawn Guo
Quoted 24 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Change from v1 to v2
- Change simple-bus to simple-mfd
- RTC remove lock.
- RTC remove comments "These register offsets are relative to LP (Low Power) range"
- power off, remove extra spaceSNVS is MPF module.
include rtc, power off, ON/OFF power keyarm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Above two patch change existed power-off and rtc use sysconDocument: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
Update dt file and documentinput: keyboard: imx: add snvs power key driver
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Added on/off key driverQuoted 7 lines
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power keySo, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
Quoted 5 lines
Quoted 2 lines
How to do that?
Just added it commit message or need runtime warning?runtime, so that users can know why their installed DTBs break with the new kernel.
+ snvs_np = of_get_parent(pdev->dev.of_node);
+ if (!snvs_np)
+ return -ENODEV;
+
+ data->snvs = syscon_node_to_regmap(snvs_np);
+ of_node_put(snvs_np);
+
+ if (!data->snvs) {
+ pr_err("Can't snvs syscon\n");
+ return -ENODEV;
+ }
How about change error message to " Can't snvs syscon, probably use old dts file"?
Quoted 2 lines
Shawn
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 13 lines
(quoted diff) +11
-0+ snvs_np = of_get_parent(pdev->dev.of_node); + if (!snvs_np) + return -ENODEV; + + data->snvs = syscon_node_to_regmap(snvs_np); + of_node_put(snvs_np); + + if (!data->snvs) { + pr_err("Can't snvs syscon\n"); + return -ENODEV; + }
Quoted 2 lines
How about change error message to " Can't snvs syscon, probably use old dts file"?
How about simply: "Cannot find snvs syscon node in devicetree."
Signature · 1 line
~Joshua Clayton
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 13 lines · Joshua Clayton
Quoted 13 lines
(quoted diff) +11
-0+ snvs_np = of_get_parent(pdev->dev.of_node); + if (!snvs_np) + return -ENODEV; + + data->snvs = syscon_node_to_regmap(snvs_np); + of_node_put(snvs_np); + + if (!data->snvs) { + pr_err("Can't snvs syscon\n"); + return -ENODEV; + }
Quoted 3 lines
Quoted 2 lines
How about change error message to " Can't snvs syscon, probably use old dts file"?
How about simply: "Cannot find snvs syscon node in devicetree."
Shawn:
Are you okay for that?
best regards
Frank Li
Quoted 4 lines
--
~Joshua Clayton
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
In reply to Shawn GuoQuoted 9 lines · Shawn Guo
Quoted 7 lines · Frank.Li at freescale.com
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
What's the justification for breaking existing DTBs? Really, this is something we should strive to avoid, _and_ actually avoid by providing backwards compatibility.
Signature · 2 lines
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up according to speedtest.net.
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 10 lines · Russell King - ARM Linux
Quoted 9 lines · Shawn Guo
Quoted 7 lines · Frank.Li at freescale.com
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power key
Quoted 7 lines
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
What's the justification for breaking existing DTBs? Really, this is something we should strive to avoid, _and_ actually avoid by providing backwards compatibility.
Looking at the RTC code, it would be pretty trivial to do.
Rather than passing around struct regmap, pass around the private data structure.
Rename the regmap_* function calls to be private accessors. Implement a set of new accessors - if the private data has the regmap, use the regmap API. Otherwise, use the old method, and print a warning that an old DT is being used.
Signature · 2 lines
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up according to speedtest.net.
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 21 lines · Russell King - ARM Linux
Quoted 10 lines · Russell King - ARM Linux
Quoted 9 lines · Shawn Guo
Quoted 7 lines · Frank.Li at freescale.com
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power keyQuoted 7 lines
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
What's the justification for breaking existing DTBs? Really, this is something we should strive to avoid, _and_ actually avoid by providing backwards compatibility.
Looking at the RTC code, it would be pretty trivial to do.
Quoted 7 lines
Rather than passing around struct regmap, pass around the private data structure.
Rename the regmap_* function calls to be private accessors. Implement a set of new accessors - if the private data has the regmap, use the regmap API. Otherwise, use the old method, and print a warning that an old DT is being used.
This method work. But code will become ugly and complex. I seach whole dts tree.
Only imx6 use this driver.
Does it really valuable to keep compatiblity with cost of complex driver code?
best regards
Frank Li
Quoted 4 lines
--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up according to speedtest.net.
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 12 lines · Zhi Li
Quoted 9 lines · Russell King - ARM Linux
Looking at the RTC code, it would be pretty trivial to do.
Rather than passing around struct regmap, pass around the private data structure.
Rename the regmap_* function calls to be private accessors. Implement a set of new accessors - if the private data has the regmap, use the regmap API. Otherwise, use the old method, and print a warning that an old DT is being used.
Quoted 5 lines
This method work. But code will become ugly and complex. I seach whole dts tree.
Only imx6 use this driver.Does it really valuable to keep compatiblity with cost of complex driver code?
Let me put this a different way.
Would you be upset if you installed a new kernel, rebooted and found that the system then fscked your filesystem, stamping a date of 1 Jan 1970 on it. Then you use a later dtb, and you have to go through another fsck of your filesystem because it's apparently been more than "31 days" or so since it was last fscked, and all this caused by the RTC vanishing because we couldn't be bothered with backward compatibility?
There are real products out there which use iMX6 today. In production, being sold.
Do not break existing DTBs unless there really is no other choice.
And I don't think it makes the code ugly, though it does make it _slightly_ more complex. That's a price worth paying for keeping stuff working.
Signature · 2 lines
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up according to speedtest.net.
Dmitry Torokhov
maintainerv2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
In reply to Russell King - ARM LinuxQuoted 21 lines · Russell King - ARM Linux
Quoted 10 lines · Russell King - ARM Linux
Quoted 9 lines · Shawn Guo
Quoted 7 lines · Frank.Li at freescale.com
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power keyQuoted 7 lines
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
What's the justification for breaking existing DTBs? Really, this is something we should strive to avoid, _and_ actually avoid by providing backwards compatibility.
Looking at the RTC code, it would be pretty trivial to do.
Quoted 7 lines
Rather than passing around struct regmap, pass around the private data structure.
Rename the regmap_* function calls to be private accessors. Implement a set of new accessors - if the private data has the regmap, use the regmap API. Otherwise, use the old method, and print a warning that an old DT is being used.
Or maybe have drivers create regmap themselves if they see old DTS and not bother with the 2 sets of accessors?
Thanks.
Signature · 1 line
Dmitry
v2 cover Change snvs rtc and poweroff to use syscon add pwrkey driver
Quoted 25 lines · Dmitry Torokhov
Quoted 24 lines · Russell King - ARM Linux
Quoted 10 lines · Russell King - ARM Linux
Quoted 9 lines · Shawn Guo
Quoted 7 lines · Frank.Li at freescale.com
Frank Li (6):
arm: imx: power-off: change to syscon to access register
rtc: arm: imx: snvs: change use syscon to access register
Document: dt: fsl: snvs: change support syscon
arm: dts: imx: update snvs to use syscon access register
document: devicetree: input: imx: i.mx snvs power device tree bindings
arm: dts: imx6sx: enable snvs power keyQuoted 7 lines
Quoted 3 lines
So, the series will break existing DTBs for RTC and poweroff, right? If this is unavoidable, should we at least have some warning messages telling users about his breakage?
What's the justification for breaking existing DTBs? Really, this is something we should strive to avoid, _and_ actually avoid by providing backwards compatibility.
Looking at the RTC code, it would be pretty trivial to do.
Rather than passing around struct regmap, pass around the private data structure.
Quoted 7 lines
Quoted 4 lines
Rename the regmap_* function calls to be private accessors. Implement a set of new accessors - if the private data has the regmap, use the regmap API. Otherwise, use the old method, and print a warning that an old DT is being used.
Or maybe have drivers create regmap themselves if they see old DTS and not bother with the 2 sets of accessors?
Does any dt node convert to regmap regardless if there are "syscon" compatible string?
Quoted 5 lines
Thanks.
--
Dmitry