Re: [PATCH v3 1/5] spi: introduce mmap read support for spi flash devices
Hi Brian, On 11/13/2015 09:35 PM, Cyrille Pitchen wrote: [...] > > In September I've sent a series of patches to enhance the support of QSPI > flash > memories. Patch 4 was dedicated to the m25p80 driver and set the > rx_nbits / tx_nbits fields of spi_transfer struct(s) in order to configure the > number of I/O lines independently for the opcode, address and data parts. > The work was done for m25p80_read() but also for _read_reg(), _write_reg() and > _write(). > The patched m25p80 driver was then tested with an at25 memory to check non- > regression. > > This series of patches also added 4 enum spi_protocol fields inside struct > spi_nor so the spi-nor framework can tell the (Q)SPI controller driver what > SPI > protocol should be use for erase, read, write and register read/write > operations, depending on the memory manufacturer and the command opcode. > This was done to better support Micron, Spansion and Macronix QSPI memories. > > I have tested the series with Micron QSPI memories and Atmel QSPI controller > and I guess Marek also tested it on his side with Spansion QSPI memories and > another QSPI controller. > > So if it can help other developers to develop QSPI controller drivers, the > series is still available there: > > for the whole series: > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/371170.html > > for patch 4 (depends on patch 2 for enum spi_protocol): > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/371173.html > Should I rebase my next version on top of above patches by Cyrille or shall I post on top of 4.4-rc1? -- Regards Vignesh -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 18/27] mtd: nand: update mtd_to_nand()
On Mon, Nov 16, 2015 at 02:37:51PM +0100, Boris Brezillon wrote: > Now that all drivers are using the mtd instance embedded in the nand_chip Do you have a script that verifies this? I thought you did at some point, and it'd be nice to note it, so I can also use it to verify things once it gets applied. > struct we can safely update the mtd_to_nand_chip() implementation to use Nit: s/mtd_to_nand_chip/mtd_to_nand/ > the container_of macro instead of returning the content of mtd->priv. > This will allow us to remove mtd->priv = chip assignments done in all > NAND controller drivers. > > Signed-off-by: Boris Brezillon > --- > include/linux/mtd/nand.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h > index 8ec071e..873646d 100644 > --- a/include/linux/mtd/nand.h > +++ b/include/linux/mtd/nand.h > @@ -734,7 +734,7 @@ static inline struct device_node > *nand_get_flash_node(struct nand_chip *chip) > > static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) > { > - return mtd->priv; > + return container_of(mtd, struct nand_chip, mtd); > } > > static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip) > -- > 2.1.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 14/27] mtd: nand: use the mtd instance embedded in struct nand_chip
Hi Boris, On Mon, Nov 16, 2015 at 02:37:47PM +0100, Boris Brezillon wrote: > struct nand_chip now embeds an mtd device. Patch all drivers to make use > of this mtd instance instead of using the instance embedded in their > private struct or dynamically allocated. > > Signed-off-by: Boris Brezillon > Cc: Julia Lawall > --- > Most of those changes were generate with this coccinelle script: > http://code.bulix.org/5vxuih-89429 I appreciate that this patch is mostly autogenerated (a good thing for preventing errors!), but there are some issues that I don't think play out very well stylistically. Hopefully the cocci script can be improved to handle some of this? I'll try to point out a few snippets below. Also, in case others are interested in reviewing your cocci script directly, it might be better to paste it inline than to link to it. Given the size of the patch, I don't think people would mind a few dozen extra lines to show how it wsa generated. Or maybe stick some in the cover letter too, if you end up reusing them in several patches. > --- > drivers/mtd/nand/ams-delta.c | 13 ++-- > drivers/mtd/nand/atmel_nand.c | 11 ++- > drivers/mtd/nand/au1550nd.c| 18 ++--- > drivers/mtd/nand/bcm47xxnflash/bcm47xxnflash.h | 1 - > drivers/mtd/nand/bcm47xxnflash/main.c | 7 +- > drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c | 2 +- > drivers/mtd/nand/bf5xx_nand.c | 14 ++-- > drivers/mtd/nand/brcmnand/brcmnand.c | 11 ++- > drivers/mtd/nand/cafe_nand.c | 10 +-- > drivers/mtd/nand/cmx270_nand.c | 11 ++- > drivers/mtd/nand/cs553x_nand.c | 13 ++-- > drivers/mtd/nand/davinci_nand.c| 25 +++ > drivers/mtd/nand/denali.c | 61 + > drivers/mtd/nand/denali.h | 1 - > drivers/mtd/nand/diskonchip.c | 11 ++- > drivers/mtd/nand/docg4.c | 18 +++-- > drivers/mtd/nand/fsl_elbc_nand.c | 22 +++--- > drivers/mtd/nand/fsl_ifc_nand.c| 23 +++ > drivers/mtd/nand/fsl_upm.c | 26 +++ > drivers/mtd/nand/fsmc_nand.c | 59 +--- > drivers/mtd/nand/gpio.c| 16 ++--- > drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 2 +- > drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 20 +++--- > drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 1 - > drivers/mtd/nand/hisi504_nand.c| 11 ++- > drivers/mtd/nand/jz4740_nand.c | 9 ++- > drivers/mtd/nand/lpc32xx_mlc.c | 7 +- > drivers/mtd/nand/lpc32xx_slc.c | 7 +- > drivers/mtd/nand/mpc5121_nfc.c | 3 +- > drivers/mtd/nand/mxc_nand.c| 5 +- > drivers/mtd/nand/nandsim.c | 12 ++-- > drivers/mtd/nand/ndfc.c| 22 +++--- > drivers/mtd/nand/nuc900_nand.c | 21 +++--- > drivers/mtd/nand/omap2.c | 94 > +++--- > drivers/mtd/nand/orion_nand.c | 4 +- > drivers/mtd/nand/pasemi_nand.c | 14 ++-- > drivers/mtd/nand/plat_nand.c | 14 ++-- > drivers/mtd/nand/pxa3xx_nand.c | 33 - ^^ BTW, this file already has a few conflicts. Sorry :( I'll try to keep any eye out for things like this once we're close to being able to apply something like this, so I don't merge unnecessary churn. But for now, I hope we can review this series, and it won't be too much work to rebase/resend once the bigger things have been worked out. > drivers/mtd/nand/r852.c| 34 -- > drivers/mtd/nand/r852.h| 1 - > drivers/mtd/nand/s3c2410.c | 19 +++--- > drivers/mtd/nand/sh_flctl.c| 8 +-- > drivers/mtd/nand/sharpsl.c | 18 ++--- > drivers/mtd/nand/socrates_nand.c | 5 +- > drivers/mtd/nand/sunxi_nand.c | 13 ++-- > drivers/mtd/nand/tmio_nand.c | 7 +- > drivers/mtd/nand/txx9ndfmc.c | 3 +- > drivers/mtd/nand/vf610_nfc.c | 5 +- > include/linux/mtd/sh_flctl.h | 3 +- > 49 files changed, 383 insertions(+), 385 deletions(-) > ... > diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c > index f8aac0a..51748b4 100644 > --- a/drivers/mtd/nand/atmel_nand.c > +++ b/drivers/mtd/nand/atmel_nand.c ... > @@ -318,7 +317,7 @@ static int nfc_set_sram_bank(struct atmel_nand_host > *host, unsigned int bank) > > if (bank) { > /* Only for a 2k-page or lower flash, NFC can handle 2 banks */ > - if (host->mtd.writesize > 2048) > + if (nand_to_mtd(&host->nand_chip)->writesize > 2048) (This isn't the worst one, b
Re: [PATCH] ARM: OMAP2: use correct timer function for AM43XX and TI81XX
Hi, Arnd Bergmann writes: > AM43XX and TI81XX use omap3_gptimer_timer_init(), but that is only > built into the kernel for OMAP3 and AM33XX, otherwise we get: > > arch/arm/mach-omap2/built-in.o:(.arch.info.init+0x124): undefined reference > to `omap3_gptimer_timer_init' > > This changes the Kconfig logic for building the function to > match the callers. Consequently, we no longer need to build > the omap3_secure_sync32k_timer_init and omap4_local_timer_init > for the platforms that have been moved over to other functions. > > Signed-off-by: Arnd Bergmann no, AM43xx uses omap4_local_timer_init(), there's already a fix in Tony's tree IIRC. > +#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || > defined(CONFIG_SOC_TI81XX) [...] > +#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || > defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) someone doesn't like to run checkpatch.pl care to provide a defconfig which would cause a build error ? -- balbi signature.asc Description: PGP signature
[PATCH] ARM: OMAP2: use correct timer function for AM43XX and TI81XX
AM43XX and TI81XX use omap3_gptimer_timer_init(), but that is only built into the kernel for OMAP3 and AM33XX, otherwise we get: arch/arm/mach-omap2/built-in.o:(.arch.info.init+0x124): undefined reference to `omap3_gptimer_timer_init' This changes the Kconfig logic for building the function to match the callers. Consequently, we no longer need to build the omap3_secure_sync32k_timer_init and omap4_local_timer_init for the platforms that have been moved over to other functions. Signed-off-by: Arnd Bergmann --- The code has changed a couple of times, but this version no longer produces build errors for me. diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index b18ebbefae09..b07dd70b2de1 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -494,7 +494,7 @@ void __init omap_init_time(void) clocksource_probe(); } -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX) +#if defined(CONFIG_ARCH_OMAP3) void __init omap3_secure_sync32k_timer_init(void) { __omap_sync32k_timer_init(12, "secure_32k_fck", "ti,timer-secure", @@ -502,7 +502,7 @@ void __init omap3_secure_sync32k_timer_init(void) } #endif /* CONFIG_ARCH_OMAP3 */ -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) +#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_TI81XX) void __init omap3_gptimer_timer_init(void) { __omap_sync32k_timer_init(2, "timer_sys_ck", NULL, @@ -510,8 +510,7 @@ void __init omap3_gptimer_timer_init(void) } #endif -#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ - defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) +#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) static void __init omap4_sync32k_timer_init(void) { __omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon", -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] ARM: OMAP4+: SMP: use lockless clkdm/pwrdm api in omap4_boot_secondary
OMAP CPU hotplug uses cpu1's clocks and power domains for CPU1 wake up from low power states (or turn on CPU1). This part of code is also part of system suspend (disable_nonboot_cpus()). >From other side, cpu1's clocks and power domains are used by CPUIdle. All above functionality is mutually exclusive and, therefore, lockless clkdm/pwrdm api can be used in omap4_boot_secondary(). This fixes below back-trace on -RT which is triggered by pwrdm_lock/unlock(): BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917 in_atomic(): 1, irqs_disabled(): 0, pid: 118, name: sh 9 locks held by sh/118: #0: (sb_writers#4){.+.+.+}, at: [] vfs_write+0x13c/0x164 #1: (&of->mutex){+.+.+.}, at: [] kernfs_fop_write+0x48/0x19c #2: (s_active#24){.+.+.+}, at: [] kernfs_fop_write+0x50/0x19c #3: (device_hotplug_lock){+.+.+.}, at: [] lock_device_hotplug_sysfs+0xc/0x4c #4: (&dev->mutex){..}, at: [] device_online+0x14/0x88 #5: (cpu_add_remove_lock){+.+.+.}, at: [] cpu_up+0x50/0x1a0 #6: (cpu_hotplug.lock){++}, at: [] cpu_hotplug_begin+0x0/0xc4 #7: (cpu_hotplug.lock#2){+.+.+.}, at: [] cpu_hotplug_begin+0x78/0xc4 #8: (boot_lock){+.+...}, at: [] omap4_boot_secondary+0x1c/0x178 Preemption disabled at:[< (null)>] (null) CPU: 0 PID: 118 Comm: sh Not tainted 4.1.12-rt11-01998-gb4a62c3-dirty #137 Hardware name: Generic DRA74X (Flattened Device Tree) [] (unwind_backtrace) from [] (show_stack+0x10/0x14) [] (show_stack) from [] (dump_stack+0x80/0x94) [] (dump_stack) from [] (rt_spin_lock+0x24/0x54) [] (rt_spin_lock) from [] (clkdm_wakeup+0x10/0x2c) [] (clkdm_wakeup) from [] (omap4_boot_secondary+0x88/0x178) [] (omap4_boot_secondary) from [] (__cpu_up+0xc4/0x164) [] (__cpu_up) from [] (cpu_up+0x15c/0x1a0) [] (cpu_up) from [] (device_online+0x64/0x88) [] (device_online) from [] (online_store+0x68/0x74) [] (online_store) from [] (kernfs_fop_write+0xb8/0x19c) [] (kernfs_fop_write) from [] (__vfs_write+0x20/0xd8) [] (__vfs_write) from [] (vfs_write+0x90/0x164) [] (vfs_write) from [] (SyS_write+0x44/0x9c) [] (SyS_write) from [] (ret_fast_syscall+0x0/0x54) CPU1: smp_ops.cpu_die() returned, trying to resuscitate Cc: Tero Kristo Signed-off-by: Grygorii Strashko --- arch/arm/mach-omap2/omap-smp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index 5305ec7..79e1f87 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c @@ -143,9 +143,9 @@ static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle) * Ensure that CPU power state is set to ON to avoid CPU * powerdomain transition on wfi */ - clkdm_wakeup(cpu1_clkdm); - omap_set_pwrdm_state(cpu1_pwrdm, PWRDM_POWER_ON); - clkdm_allow_idle(cpu1_clkdm); + clkdm_wakeup_nolock(cpu1_clkdm); + pwrdm_set_next_pwrst(cpu1_pwrdm, PWRDM_POWER_ON); + clkdm_allow_idle_nolock(cpu1_clkdm); if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { while (gic_dist_disabled()) { -- 2.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 00/39] ARM: dts: Convert OMAP boards to use IOPAD pinmux macros
On 11/13/2015 08:47 AM, Tony Lindgren wrote: * Javier Martinez Canillas [151112 20:55]: Hello Tony, This series converts all the remaining OMAP boards that didn't use the IOPAD macros to specify the padconf register addresses. The only board that I left was arch/arm/boot/dts/am335x-boneblack.dts because Andrew already posted a patch for that DTS [0]. I built tested all the DTBs that are build by omap2plus_defconfig and the md5 checksum was the same before and after the patches so there's no functional change and is only to make the DTS more readable. Yes great. Being able to compare the register against the documentation helps quite a bit. I plan on applying this series before anything else after -rc1 as it may require other patches to be rebased. Patch #1 should be acked by the pinctrl maintainer and picked through the linux-omap tree to maintain bisectability. [0]: https://lkml.org/lkml/2015/10/24/114 v3 of my little contribution also out when you pull: https://lkml.org/lkml/2015/11/13/480 OK let's wait for Linus to take a look at it. Tony Javier Martinez Canillas (39): pinctrl: Move am4372 and dra7 macros to the the SoC header files ARM: dts: am335x-baltos-ir5221: Remove leftover pinctrl lines ARM: dts: am335x-baltos-ir5221: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-bone-common: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-bonegreen: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-chiliboard: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-chilisom: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-evm: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-evmsk: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-lxm: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-nano: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-pepper: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-phycore-som: Use AM33XX_IOPAD pinmux macro ARM: dts: am335x-wega: Use AM33XX_IOPAD pinmux macro ARM: dts: am3517-craneboard: Use OMAP3_CORE1_IOPAD pinmux macro ARM: dts: am437x-gp-evm: Use AM4372_IOPAD pinmux macro ARM: dts: am437x-idk-evm: Use AM4372_IOPAD pinmux macro ARM: dts: am437x-sk-evm: Use AM4372_IOPAD pinmux macro ARM: dts: am43x-epos-evm: Use AM4372_IOPAD pinmux macro ARM: dts: am57xx-beagle-x15: Use DRA7XX_CORE_IOPAD pinmux macro ARM: dts: dra7-evm: Use DRA7XX_CORE_IOPAD pinmux macro ARM: dts: dra72-evm: Use DRA7XX_CORE_IOPAD pinmux macro ARM: dts: omap3-beagle: Use OMAP3_*_IOPAD pinmux macros ARM: dts: omap3-beagle-xm: Use OMAP3_*_IOPAD pinmux macros ARM: dts: omap3-evm-37xx: Use OMAP3_*_IOPAD pinmux macros ARM: dts: omap3-ldp: Use OMAP3_CORE1_IOPAD pinmux macro ARM: dts: omap3-n900: Use OMAP3_CORE1_IOPAD pinmux macro ARM: dts: omap3-n9: Use OMAP3_CORE1_IOPAD pinmux macro ARM: dts: omap3-zoom3: Use OMAP3_*_IOPAD pinmux macros ARM: dts: twl4030: Use OMAP3_CORE1_IOPAD pinmux macro ARM: dts: omap4-panda-a4: Use OMAP4_IOPAD pinmux macro ARM: dts: omap4-panda-common: Use OMAP4_IOPAD pinmux macro ARM: dts: omap4-panda-es: Use OMAP4_IOPAD pinmux macro ARM: dts: omap4-sdp: Use OMAP4_IOPAD pinmux macro ARM: dts: omap4-sdp-es23plus: Use OMAP4_IOPAD pinmux macro ARM: dts: twl6030: Use OMAP4_IOPAD pinmux macro ARM: dts: omap5-board-common: Use OMAP5_IOPAD pinmux macro ARM: dts: omap5-cm-t54: Use OMAP5_IOPAD pinmux macro ARM: dts: omap5-uevm.dts: Use OMAP5_IOPAD pinmux macro arch/arm/boot/dts/am335x-baltos-ir5221.dts | 186 +++--- arch/arm/boot/dts/am335x-bone-common.dtsi | 104 arch/arm/boot/dts/am335x-bonegreen.dts | 4 +- arch/arm/boot/dts/am335x-chiliboard.dts| 20 +- arch/arm/boot/dts/am335x-chilisom.dtsi | 80 +++--- arch/arm/boot/dts/am335x-evm.dts | 220 - arch/arm/boot/dts/am335x-evmsk.dts | 278 ++--- arch/arm/boot/dts/am335x-lxm.dts | 120 - arch/arm/boot/dts/am335x-nano.dts | 140 +-- arch/arm/boot/dts/am335x-pepper.dts| 200 +++ arch/arm/boot/dts/am335x-phycore-som.dtsi | 60 ++--- arch/arm/boot/dts/am335x-wega.dtsi | 58 ++--- arch/arm/boot/dts/am3517-craneboard.dts| 2 +- arch/arm/boot/dts/am437x-gp-evm.dts| 380 ++--- arch/arm/boot/dts/am437x-idk-evm.dts | 128 +- arch/arm/boot/dts/am437x-sk-evm.dts| 298 +++--- arch/arm/boot/dts/am43x-epos-evm.dts | 246 +-- arch/arm/boot/dts/am57xx-beagle-x15.dts| 198 +++ arch/arm/boot/dts/dra7-evm.dts | 254 +-- arch/arm/boot/dts/dra72-evm.dts| 200 +++ arch/arm/boot/dts/omap3-beagle-xm.dts | 18 +- arch/arm/boot/dts/omap3-beagle.dts | 64 ++--- arch/arm/boot/dts/omap3-evm-37xx.dts | 54 ++-- arch/arm/boot/dts/omap3-ldp.dts| 42 ++-- arch/arm/boot/dts/omap3-n900.dts | 106
Re: [PATCH v2 8/8] DT:omap3+ads7846: use new common touchscreen bindings
HI, Am 16.11.2015 um 15:37 schrieb Grazvydas Ignotas : > Hi, > > On Fri, Nov 13, 2015 at 10:35 PM, H. Nikolaus Schaller > wrote: >> The standard touch screen bindings [1] replace the private ti,swap-xy >> with touchscreen-swaped-x-y. And for the Openpandora we use >> touchscreen-size etc. to match the LCD screen size. >> >> [1]: Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt >> >> Signed-off-by: H. Nikolaus Schaller >> --- >> arch/arm/boot/dts/omap3-lilly-a83x.dtsi | 2 +- >> arch/arm/boot/dts/omap3-pandora-common.dtsi | 17 + >> arch/arm/boot/dts/omap3-panel-sharp-ls037v7dw01.dtsi | 2 +- >> 3 files changed, 15 insertions(+), 6 deletions(-) >> >> diff --git a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi >> b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi >> index d0dd036..01dae66 100644 >> --- a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi >> +++ b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi >> @@ -325,7 +325,7 @@ >>ti,y-max = /bits/ 16 <3600>; >>ti,x-plate-ohms = /bits/ 16 <80>; >>ti,pressure-max = /bits/ 16 <255>; >> - ti,swap-xy; >> + touchscreen-swapped-x-y; >> >>linux,wakeup; >>}; >> diff --git a/arch/arm/boot/dts/omap3-pandora-common.dtsi >> b/arch/arm/boot/dts/omap3-pandora-common.dtsi >> index f672a04..9497cc6 100644 >> --- a/arch/arm/boot/dts/omap3-pandora-common.dtsi >> +++ b/arch/arm/boot/dts/omap3-pandora-common.dtsi >> @@ -696,10 +696,19 @@ >>pendown-gpio = <&gpio3 30 0>; >>vcc-supply = <&vaux4>; >> >> - ti,x-min = /bits/ 16 <0>; >> - ti,x-max = /bits/ 16 <8000>; >> - ti,y-min = /bits/ 16 <0>; >> - ti,y-max = /bits/ 16 <4800>; >> + touchscreen-size-x = <800>; >> + touchscreen-size-y = <480>; >> + touchscreen-max-pressure = <1000>; >> + touchscreen-fuzz-x = <16>; >> + touchscreen-fuzz-y = <16>; >> + touchscreen-fuzz-pressure = <10>; >> + touchscreen-inverted-x; >> + touchscreen-inverted-y; >> + >> + ti,x-min = /bits/ 16 <160>; >> + ti,x-max = /bits/ 16 <3900>; >> + ti,y-min = /bits/ 16 <220>; >> + ti,y-max = /bits/ 16 <3750>; > > I'm not sure this is a good idea, there have been at least 3 different > batches of LCDs which slightly different touchscreens attached, with > such thresholds we might end up with unreachable touchscreen points on > some units. If I understand right, calibration won't help if for some > screen locations ADC reading goes below/above these min/max thresholds > on some specific units? If so there should probably be at least 10% > margin in either case to make calibration useful. Ok, then someone owning all variants should test and we should use the min/max values we find. I.e. the touch with the biggest ADC value range. All others have smaller screens which can be calibrated in user space. But 10% is good enough to boot and start manual calibration. Alternatively, we can set them to 0 and 4095 (or remove them to use defaults). BR and thanks, Nikolaus -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 8/8] DT:omap3+ads7846: use new common touchscreen bindings
Hi, On Fri, Nov 13, 2015 at 10:35 PM, H. Nikolaus Schaller wrote: > The standard touch screen bindings [1] replace the private ti,swap-xy > with touchscreen-swaped-x-y. And for the Openpandora we use > touchscreen-size etc. to match the LCD screen size. > > [1]: Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt > > Signed-off-by: H. Nikolaus Schaller > --- > arch/arm/boot/dts/omap3-lilly-a83x.dtsi | 2 +- > arch/arm/boot/dts/omap3-pandora-common.dtsi | 17 + > arch/arm/boot/dts/omap3-panel-sharp-ls037v7dw01.dtsi | 2 +- > 3 files changed, 15 insertions(+), 6 deletions(-) > > diff --git a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi > b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi > index d0dd036..01dae66 100644 > --- a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi > +++ b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi > @@ -325,7 +325,7 @@ > ti,y-max = /bits/ 16 <3600>; > ti,x-plate-ohms = /bits/ 16 <80>; > ti,pressure-max = /bits/ 16 <255>; > - ti,swap-xy; > + touchscreen-swapped-x-y; > > linux,wakeup; > }; > diff --git a/arch/arm/boot/dts/omap3-pandora-common.dtsi > b/arch/arm/boot/dts/omap3-pandora-common.dtsi > index f672a04..9497cc6 100644 > --- a/arch/arm/boot/dts/omap3-pandora-common.dtsi > +++ b/arch/arm/boot/dts/omap3-pandora-common.dtsi > @@ -696,10 +696,19 @@ > pendown-gpio = <&gpio3 30 0>; > vcc-supply = <&vaux4>; > > - ti,x-min = /bits/ 16 <0>; > - ti,x-max = /bits/ 16 <8000>; > - ti,y-min = /bits/ 16 <0>; > - ti,y-max = /bits/ 16 <4800>; > + touchscreen-size-x = <800>; > + touchscreen-size-y = <480>; > + touchscreen-max-pressure = <1000>; > + touchscreen-fuzz-x = <16>; > + touchscreen-fuzz-y = <16>; > + touchscreen-fuzz-pressure = <10>; > + touchscreen-inverted-x; > + touchscreen-inverted-y; > + > + ti,x-min = /bits/ 16 <160>; > + ti,x-max = /bits/ 16 <3900>; > + ti,y-min = /bits/ 16 <220>; > + ti,y-max = /bits/ 16 <3750>; I'm not sure this is a good idea, there have been at least 3 different batches of LCDs which slightly different touchscreens attached, with such thresholds we might end up with unreachable touchscreen points on some units. If I understand right, calibration won't help if for some screen locations ADC reading goes below/above these min/max thresholds on some specific units? If so there should probably be at least 10% margin in either case to make calibration useful. GraÅžvydas -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] arm, am335x: add support for the bosch shc board
Hello Robert, Am 16.11.2015 um 14:23 schrieb Robert Nelson: + + cpsw_default: cpsw_default { + pinctrl-single,pins = < + /* Slave 1 */ + 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) + 0x118 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) + 0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) + 0x124 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x128 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) + 0x130 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x134 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x138 (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x13c (PIN_INPUT_PULLDOWN | MUX_MODE0) + 0x140 (PIN_INPUT_PULLDOWN | MUX_MODE0) Please use the AM33XX_IOPAD pinmux macro: All boards have recently be converted: https://www.mail-archive.com/linux-omap@vger.kernel.org/msg121329.html Uh.. missed this, changed. Wait for more comments before posting v2. Thanks! bye, Heiko -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 04/27] ARM: nand: make use of mtd_to_nand() where appropriate
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all ARM specific implementations to use this helper. Signed-off-by: Boris Brezillon --- arch/arm/mach-ep93xx/snappercl15.c | 4 ++-- arch/arm/mach-ep93xx/ts72xx.c| 4 ++-- arch/arm/mach-imx/mach-qong.c| 2 +- arch/arm/mach-ixp4xx/ixdp425-setup.c | 2 +- arch/arm/mach-omap1/board-nand.c | 2 +- arch/arm/mach-orion5x/ts78xx-setup.c | 6 +++--- arch/arm/mach-pxa/balloon3.c | 2 +- arch/arm/mach-pxa/em-x270.c | 2 +- arch/arm/mach-pxa/palmtx.c | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/arch/arm/mach-ep93xx/snappercl15.c b/arch/arm/mach-ep93xx/snappercl15.c index c490426..b2db791 100644 --- a/arch/arm/mach-ep93xx/snappercl15.c +++ b/arch/arm/mach-ep93xx/snappercl15.c @@ -49,7 +49,7 @@ static void snappercl15_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); static u16 nand_state = SNAPPERCL15_NAND_WPN; u16 set; @@ -76,7 +76,7 @@ static void snappercl15_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, static int snappercl15_nand_dev_ready(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); return !!(__raw_readw(NAND_CTRL_ADDR(chip)) & SNAPPERCL15_NAND_RDY); } diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 61f4b5d..45b81a2 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c @@ -74,7 +74,7 @@ static void __init ts72xx_map_io(void) static void ts72xx_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); if (ctrl & NAND_CTRL_CHANGE) { void __iomem *addr = chip->IO_ADDR_R; @@ -96,7 +96,7 @@ static void ts72xx_nand_hwcontrol(struct mtd_info *mtd, static int ts72xx_nand_device_ready(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); void __iomem *addr = chip->IO_ADDR_R; addr += (1 << TS72XX_NAND_BUSY_ADDR_LINE); diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c index a213e7b..5c27646 100644 --- a/arch/arm/mach-imx/mach-qong.c +++ b/arch/arm/mach-imx/mach-qong.c @@ -131,7 +131,7 @@ static void qong_init_nor_mtd(void) */ static void qong_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *nand_chip = mtd->priv; + struct nand_chip *nand_chip = mtd_to_nand(mtd); if (cmd == NAND_CMD_NONE) return; diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c index e7b8bef..333b0f9 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-setup.c +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c @@ -76,7 +76,7 @@ static struct mtd_partition ixdp425_partitions[] = { static void ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); int offset = (int)this->priv; if (ctrl & NAND_CTRL_CHANGE) { diff --git a/arch/arm/mach-omap1/board-nand.c b/arch/arm/mach-omap1/board-nand.c index 4d08353..7684f92 100644 --- a/arch/arm/mach-omap1/board-nand.c +++ b/arch/arm/mach-omap1/board-nand.c @@ -22,7 +22,7 @@ void omap1_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); unsigned long mask; if (cmd == NAND_CMD_NONE) diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 1b704d3..96cf6b5 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c @@ -176,7 +176,7 @@ static void ts78xx_ts_rtc_unload(void) static void ts78xx_ts_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); if (ctrl & NAND_CTRL_CHANGE) { unsigned char bits; @@ -200,7 +200,7 @@ static int ts78xx_ts_nand_dev_ready(struct mtd_info *mtd) static void ts78xx_ts_nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); void __iomem *io_base = chip->IO_ADDR_W; unsigned long off = ((unsigned long)buf & 3); int sz; @@ -227,7 +227,7 @@ static void ts78xx_ts_nand_write_buf(struct mtd_info *mtd, static void ts78xx_ts_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
[PATCH 00/27] mtd: nand: refactor the NAND subsystem (part 1)
Hello, This huge series aims at clarifying the relationship between the mtd and nand_chip structures and hiding NAND framework internals to NAND controller drivers. The first part of the series provide an mtd_to_nand() helper to hide the way mtd and nand_chip are linked together. The second part of the series embeds the mtd structure into the nand_chip one so that NAND controller drivers don't have to bother allocating the MTD device and linking it with the NAND chip. The last part of the series hides accesses to the chip->priv field behind two helper functions. This allows removal of some of the boilerplate code done in all NAND controller drivers, but most importantly, it unifies a bit the way NAND chip structures are instantiated (even though we still have two different kinds of drivers: those embedding the nand_chip struct into their private nand chip representation, and those allocating two different structures and linking them together with the chip->priv field). As said in the title, this refactoring is only the first step. I plan to rework the NAND controller / NAND chip separation for pretty much the same reasons: clarifying the separation between the two concepts, and getting rid of more boilerplate code in NAND controller drivers. Stay tuned ;-). Best Regards, Boris Boris Brezillon (27): mtd: nand: fix drivers abusing mtd->priv mtd: nand: add an mtd_to_nand() helper mtd: nand: update examples in the documentation to use mtd_to_nand() ARM: nand: make use of mtd_to_nand() where appropriate blackfin: nand: make use of mtd_to_nand() where appropriate cris: nand: make use of mtd_to_nand() where appropriate mips: nand: make use of mtd_to_nand() where appropriate sh: nand: make use of mtd_to_nand() where appropriate mtd: nand: make use of mtd_to_nand() in NAND core code mtd: nand: make use of mtd_to_nand() in NAND drivers staging: mt29f_spinand: make use of mtd_to_nand() mtd: nand: embed an mtd_info structure into nand_chip mtd: nand: add nand_to_mtd() helper mtd: nand: use the mtd instance embedded in struct nand_chip mtd: nand: update the documentation to reflect framework changes staging: mt29f_spinand: use the mtd instance embedded in struct nand_chip cris: nand: use the mtd instance embedded in struct nand_chip mtd: nand: update mtd_to_nand() mtd: nand: remove useless mtd->priv = chip assignments cris: nand: remove useless mtd->priv = chip assignments staging: mt29f_spinand: remove useless mtd->priv = chip assignment mtd: nand: simplify nand_dt_init() usage mtd: nand: kill the chip->flash_node field mtd: nand: add helpers to access ->priv ARM: make use of nand_set/get_controller_data() helpers mtd: nand: make use of nand_set/get_controller_data() helpers staging: mt29f_spinand: make use of nand_set/get_controller_data() helpers Documentation/DocBook/mtdnand.tmpl | 35 +++--- arch/arm/mach-ep93xx/snappercl15.c | 4 +- arch/arm/mach-ep93xx/ts72xx.c | 4 +- arch/arm/mach-imx/mach-qong.c | 2 +- arch/arm/mach-ixp4xx/ixdp425-setup.c | 6 +- arch/arm/mach-omap1/board-nand.c | 2 +- arch/arm/mach-orion5x/ts78xx-setup.c | 6 +- arch/arm/mach-pxa/balloon3.c | 2 +- arch/arm/mach-pxa/em-x270.c| 2 +- arch/arm/mach-pxa/palmtx.c | 2 +- arch/blackfin/mach-bf537/boards/stamp.c| 2 +- arch/blackfin/mach-bf561/boards/acvilon.c | 2 +- arch/cris/arch-v32/drivers/mach-a3/nandflash.c | 8 +- arch/cris/arch-v32/drivers/mach-fs/nandflash.c | 8 +- arch/mips/alchemy/devboards/db1200.c | 2 +- arch/mips/alchemy/devboards/db1300.c | 2 +- arch/mips/alchemy/devboards/db1550.c | 2 +- arch/mips/pnx833x/common/platform.c| 2 +- arch/mips/rb532/devices.c | 2 +- arch/sh/boards/mach-migor/setup.c | 2 +- drivers/mtd/nand/ams-delta.c | 26 ++--- drivers/mtd/nand/atmel_nand.c | 116 ++- drivers/mtd/nand/au1550nd.c| 40 +++ drivers/mtd/nand/bcm47xxnflash/bcm47xxnflash.h | 1 - drivers/mtd/nand/bcm47xxnflash/main.c | 9 +- drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c | 34 +++--- drivers/mtd/nand/bf5xx_nand.c | 27 +++-- drivers/mtd/nand/brcmnand/brcmnand.c | 54 + drivers/mtd/nand/cafe_nand.c | 41 --- drivers/mtd/nand/cmx270_nand.c | 20 ++-- drivers/mtd/nand/cs553x_nand.c | 30 +++-- drivers/mtd/nand/davinci_nand.c| 33 +++--- drivers/mtd/nand/denali.c | 61 +- drivers/mtd/nand/denali.h | 1 - drivers/mtd/nand/diskonchip.c | 148 - drivers/mtd/nand/docg4.c | 93
[PATCH 02/27] mtd: nand: add an mtd_to_nand() helper
Some drivers are retrieving the nand_chip pointer using the container_of macro on a struct wrapping both the nand_chip and the mtd_info struct while the standard way of retrieving this pointer is through mtd->priv. Provide an helper to do that. Signed-off-by: Boris Brezillon --- include/linux/mtd/nand.h | 5 + 1 file changed, 5 insertions(+) diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 4f7c9b9..056d165 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -730,6 +730,11 @@ static inline struct device_node *nand_get_flash_node(struct nand_chip *chip) return chip->flash_node; } +static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) +{ + return mtd->priv; +} + /* * NAND Flash Manufacturer ID Codes */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 05/27] blackfin: nand: make use of mtd_to_nand() where appropriate
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all blackfin specific implementations to use this helper. Signed-off-by: Boris Brezillon --- arch/blackfin/mach-bf537/boards/stamp.c | 2 +- arch/blackfin/mach-bf561/boards/acvilon.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index 88a19fc..c181543 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c @@ -404,7 +404,7 @@ static struct mtd_partition bfin_plat_nand_partitions[] = { #define BFIN_NAND_PLAT_ALE 1 static void bfin_plat_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); if (cmd == NAND_CMD_NONE) return; diff --git a/arch/blackfin/mach-bf561/boards/acvilon.c b/arch/blackfin/mach-bf561/boards/acvilon.c index 6ab9515..37f8f25 100644 --- a/arch/blackfin/mach-bf561/boards/acvilon.c +++ b/arch/blackfin/mach-bf561/boards/acvilon.c @@ -267,7 +267,7 @@ static struct mtd_partition bfin_plat_nand_partitions[] = { static void bfin_plat_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); if (cmd == NAND_CMD_NONE) return; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 01/27] mtd: nand: fix drivers abusing mtd->priv
The ->priv field of the mtd_info object attached to a nand_chip device should point to the nand_chip device. The pxa and cafe drivers are assigning this field their own private structure, which works fine as long as the nand_chip field is the first one in the driver private struct but seems a bit fragile. Fix that by setting mtd->priv to point the nand_chip field and assigning chip->priv to the private structure head. Signed-off-by: Boris Brezillon --- drivers/mtd/nand/cafe_nand.c | 34 ++ drivers/mtd/nand/pxa3xx_nand.c | 30 +++--- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c index 9de78d2..cce3ac4 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c @@ -101,7 +101,8 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL }; static int cafe_device_ready(struct mtd_info *mtd) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; int result = !!(cafe_readl(cafe, NAND_STATUS) & 0x4000); uint32_t irqs = cafe_readl(cafe, NAND_IRQ); @@ -117,7 +118,8 @@ static int cafe_device_ready(struct mtd_info *mtd) static void cafe_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; if (usedma) memcpy(cafe->dmabuf + cafe->datalen, buf, len); @@ -132,7 +134,8 @@ static void cafe_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) static void cafe_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; if (usedma) memcpy(buf, cafe->dmabuf + cafe->datalen, len); @@ -146,7 +149,8 @@ static void cafe_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) static uint8_t cafe_read_byte(struct mtd_info *mtd) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; uint8_t d; cafe_read_buf(mtd, &d, 1); @@ -158,7 +162,8 @@ static uint8_t cafe_read_byte(struct mtd_info *mtd) static void cafe_nand_cmdfunc(struct mtd_info *mtd, unsigned command, int column, int page_addr) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; int adrbytes = 0; uint32_t ctl1; uint32_t doneint = 0x8000; @@ -313,7 +318,8 @@ static void cafe_nand_cmdfunc(struct mtd_info *mtd, unsigned command, static void cafe_select_chip(struct mtd_info *mtd, int chipnr) { - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; cafe_dev_dbg(&cafe->pdev->dev, "select_chip %d\n", chipnr); @@ -328,7 +334,8 @@ static void cafe_select_chip(struct mtd_info *mtd, int chipnr) static irqreturn_t cafe_nand_interrupt(int irq, void *id) { struct mtd_info *mtd = id; - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *chip = mtd->priv; + struct cafe_priv *cafe = chip->priv; uint32_t irqs = cafe_readl(cafe, NAND_IRQ); cafe_writel(cafe, irqs & ~0x9000, NAND_IRQ); if (!irqs) @@ -377,7 +384,7 @@ static int cafe_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip, static int cafe_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf, int oob_required, int page) { - struct cafe_priv *cafe = mtd->priv; + struct cafe_priv *cafe = chip->priv; unsigned int max_bitflips = 0; cafe_dev_dbg(&cafe->pdev->dev, "ECC result %08x SYN1,2 %08x\n", @@ -519,7 +526,7 @@ static int cafe_nand_write_page_lowlevel(struct mtd_info *mtd, const uint8_t *buf, int oob_required, int page) { - struct cafe_priv *cafe = mtd->priv; + struct cafe_priv *cafe = chip->priv; chip->write_buf(mtd, buf, mtd->writesize); chip->write_buf(mtd, chip->oob_poi, mtd->oobsize); @@ -604,7 +611,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, cafe = (void *)(&mtd[1]); mtd->dev.parent = &pdev->dev; - mtd->priv = cafe; + mtd->priv = &cafe->nand; + cafe->nand.priv = cafe; cafe->pdev = pdev; cafe->mmio = pci_iomap(pdev, 0, 0); @@ -792,7 +800,8 @@ static int cafe_nand_probe(struct pci_dev *pdev, static void cafe_nand_remove(struct pci_dev *pdev) { struct mtd_info *mtd = pci_get_drvdata(pdev); - struct cafe_priv *cafe = mtd->priv; + struct nand_chip *ch
[PATCH 06/27] cris: nand: make use of mtd_to_nand() where appropriate
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all CRIS specific implementations to use this helper. Signed-off-by: Boris Brezillon --- arch/cris/arch-v32/drivers/mach-a3/nandflash.c | 2 +- arch/cris/arch-v32/drivers/mach-fs/nandflash.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c index 7fb5212..db953cf 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c @@ -52,7 +52,7 @@ static void crisv32_hwcontrol(struct mtd_info *mtd, int cmd, { unsigned long flags; reg_pio_rw_dout dout; - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); local_irq_save(flags); diff --git a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c index e032384..22a6467 100644 --- a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c @@ -51,7 +51,7 @@ static void crisv32_hwcontrol(struct mtd_info *mtd, int cmd, { unsigned long flags; reg_gio_rw_pa_dout dout; - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); local_irq_save(flags); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 03/27] mtd: nand: update examples in the documentation to use mtd_to_nand()
mtd_to_nand() has been introduced to hide accesses to mtd->priv. All NAND controller drivers should use it instead of directly accessing the ->priv field. Signed-off-by: Boris Brezillon --- Documentation/DocBook/mtdnand.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/DocBook/mtdnand.tmpl b/Documentation/DocBook/mtdnand.tmpl index 7da8f04..403a7ab 100644 --- a/Documentation/DocBook/mtdnand.tmpl +++ b/Documentation/DocBook/mtdnand.tmpl @@ -235,7 +235,7 @@ static void board_hwcontrol(struct mtd_info *mtd, int cmd) static void board_hwcontrol(struct mtd_info *mtd, int cmd) { - struct nand_chip *this = (struct nand_chip *) mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); switch(cmd){ case NAND_CTL_SETCLE: this->IO_ADDR_W |= CLE_ADRR_BIT; break; case NAND_CTL_CLRCLE: this->IO_ADDR_W &= ~CLE_ADRR_BIT; break; @@ -399,7 +399,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip) static void board_select_chip (struct mtd_info *mtd, int chip) { - struct nand_chip *this = (struct nand_chip *) mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); /* Deselect all chips */ this->IO_ADDR_R &= ~BOARD_NAND_ADDR_MASK; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 07/27] mips: nand: make use of mtd_to_nand() where appropriate
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all MIPS specific implementations to use this helper. Signed-off-by: Boris Brezillon --- arch/mips/alchemy/devboards/db1200.c | 2 +- arch/mips/alchemy/devboards/db1300.c | 2 +- arch/mips/alchemy/devboards/db1550.c | 2 +- arch/mips/pnx833x/common/platform.c | 2 +- arch/mips/rb532/devices.c| 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/mips/alchemy/devboards/db1200.c b/arch/mips/alchemy/devboards/db1200.c index 8c13675..992442a 100644 --- a/arch/mips/alchemy/devboards/db1200.c +++ b/arch/mips/alchemy/devboards/db1200.c @@ -200,7 +200,7 @@ static struct i2c_board_info db1200_i2c_devs[] __initdata = { static void au1200_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; ioaddr &= 0xff00; diff --git a/arch/mips/alchemy/devboards/db1300.c b/arch/mips/alchemy/devboards/db1300.c index b580770..d3c087f 100644 --- a/arch/mips/alchemy/devboards/db1300.c +++ b/arch/mips/alchemy/devboards/db1300.c @@ -150,7 +150,7 @@ static void __init db1300_gpio_config(void) static void au1300_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; ioaddr &= 0xff00; diff --git a/arch/mips/alchemy/devboards/db1550.c b/arch/mips/alchemy/devboards/db1550.c index 5740bcf..b518f02 100644 --- a/arch/mips/alchemy/devboards/db1550.c +++ b/arch/mips/alchemy/devboards/db1550.c @@ -128,7 +128,7 @@ static struct i2c_board_info db1550_i2c_devs[] __initdata = { static void au1550_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; ioaddr &= 0xff00; diff --git a/arch/mips/pnx833x/common/platform.c b/arch/mips/pnx833x/common/platform.c index b4b774b..3cd3577 100644 --- a/arch/mips/pnx833x/common/platform.c +++ b/arch/mips/pnx833x/common/platform.c @@ -180,7 +180,7 @@ static struct platform_device pnx833x_sata_device = { static void pnx833x_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *this = mtd->priv; + struct nand_chip *this = mtd_to_nand(mtd); unsigned long nandaddr = (unsigned long)this->IO_ADDR_W; if (cmd == NAND_CMD_NONE) diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c index 9bd7a2d..0966adc 100644 --- a/arch/mips/rb532/devices.c +++ b/arch/mips/rb532/devices.c @@ -148,7 +148,7 @@ static int rb532_dev_ready(struct mtd_info *mtd) static void rb532_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); unsigned char orbits, nandbits; if (ctrl & NAND_CTRL_CHANGE) { -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 09/27] mtd: nand: make use of mtd_to_nand() in NAND core code
mtd_to_nand() was recently introduced to avoid direct access to the mtd->priv field. Update core code to use mtd_to_nand(). Signed-off-by: Boris Brezillon --- drivers/mtd/nand/nand_base.c | 84 ++-- drivers/mtd/nand/nand_bbt.c | 32 - drivers/mtd/nand/nand_bch.c | 4 +-- drivers/mtd/nand/nand_ecc.c | 4 +-- drivers/mtd/nand/nandsim.c | 18 +- 5 files changed, 71 insertions(+), 71 deletions(-) diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 4ac4efe..71cc029 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -106,7 +106,7 @@ DEFINE_LED_TRIGGER(nand_led_trigger); static int check_offs_len(struct mtd_info *mtd, loff_t ofs, uint64_t len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); int ret = 0; /* Start address must align on block boundary */ @@ -132,7 +132,7 @@ static int check_offs_len(struct mtd_info *mtd, */ static void nand_release_device(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); /* Release the controller and the chip */ spin_lock(&chip->controller->lock); @@ -150,7 +150,7 @@ static void nand_release_device(struct mtd_info *mtd) */ static uint8_t nand_read_byte(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); return readb(chip->IO_ADDR_R); } @@ -163,7 +163,7 @@ static uint8_t nand_read_byte(struct mtd_info *mtd) */ static uint8_t nand_read_byte16(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); return (uint8_t) cpu_to_le16(readw(chip->IO_ADDR_R)); } @@ -175,7 +175,7 @@ static uint8_t nand_read_byte16(struct mtd_info *mtd) */ static u16 nand_read_word(struct mtd_info *mtd) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); return readw(chip->IO_ADDR_R); } @@ -188,7 +188,7 @@ static u16 nand_read_word(struct mtd_info *mtd) */ static void nand_select_chip(struct mtd_info *mtd, int chipnr) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); switch (chipnr) { case -1: @@ -211,7 +211,7 @@ static void nand_select_chip(struct mtd_info *mtd, int chipnr) */ static void nand_write_byte(struct mtd_info *mtd, uint8_t byte) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); chip->write_buf(mtd, &byte, 1); } @@ -225,7 +225,7 @@ static void nand_write_byte(struct mtd_info *mtd, uint8_t byte) */ static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); uint16_t word = byte; /* @@ -257,7 +257,7 @@ static void nand_write_byte16(struct mtd_info *mtd, uint8_t byte) */ static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); iowrite8_rep(chip->IO_ADDR_W, buf, len); } @@ -272,7 +272,7 @@ static void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len) */ static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); ioread8_rep(chip->IO_ADDR_R, buf, len); } @@ -287,7 +287,7 @@ static void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len) */ static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); u16 *p = (u16 *) buf; iowrite16_rep(chip->IO_ADDR_W, p, len >> 1); @@ -303,7 +303,7 @@ static void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len) */ static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); u16 *p = (u16 *) buf; ioread16_rep(chip->IO_ADDR_R, p, len >> 1); @@ -320,7 +320,7 @@ static void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len) static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip) { int page, chipnr, res = 0, i = 0; - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); u16 bad; if (chip->bbt_options & NAND_BBT_SCANLASTPAGE) @@ -380,7 +380,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip) */ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) { - struct nand_chip *chip = mtd
[PATCH 08/27] sh: nand: make use of mtd_to_nand() where appropriate
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Update all SH specific implementations to use this helper. Signed-off-by: Boris Brezillon --- arch/sh/boards/mach-migor/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index 29b7c0d..8673f91 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c @@ -167,7 +167,7 @@ static struct mtd_partition migor_nand_flash_partitions[] = { static void migor_nand_flash_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { - struct nand_chip *chip = mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); if (cmd == NAND_CMD_NONE) return; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 11/27] staging: mt29f_spinand: make use of mtd_to_nand()
mtd_to_nand() was recently introduced to avoid direct accesses to the mtd->priv field. Use it where appropriate. Signed-off-by: Boris Brezillon --- drivers/staging/mt29f_spinand/mt29f_spinand.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index 6536066..8924a96 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c @@ -31,7 +31,7 @@ static inline struct spinand_state *mtd_to_state(struct mtd_info *mtd) { - struct nand_chip *chip = (struct nand_chip *)mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); struct spinand_info *info = (struct spinand_info *)chip->priv; struct spinand_state *state = (struct spinand_state *)info->priv; @@ -744,7 +744,7 @@ static void spinand_reset(struct spi_device *spi_nand) static void spinand_cmdfunc(struct mtd_info *mtd, unsigned int command, int column, int page) { - struct nand_chip *chip = (struct nand_chip *)mtd->priv; + struct nand_chip *chip = mtd_to_nand(mtd); struct spinand_info *info = (struct spinand_info *)chip->priv; struct spinand_state *state = (struct spinand_state *)info->priv; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 15/27] mtd: nand: update the documentation to reflect framework changes
The MTD device is now directly embedded in the nand_chip struct. Update the mtdnand documentation to mention this aspect and fix the different examples. Signed-off-by: Boris Brezillon --- Documentation/DocBook/mtdnand.tmpl | 31 +++ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Documentation/DocBook/mtdnand.tmpl b/Documentation/DocBook/mtdnand.tmpl index 403a7ab..b442921 100644 --- a/Documentation/DocBook/mtdnand.tmpl +++ b/Documentation/DocBook/mtdnand.tmpl @@ -162,12 +162,15 @@ Basic defines - At least you have to provide a mtd structure and - a storage for the ioremap'ed chip address. - You can allocate the mtd structure using kmalloc - or you can allocate it statically. - In case of static allocation you have to allocate - a nand_chip structure too. + At least you have to provide a nand_chip structure + and a storage for the ioremap'ed chip address. + You can allocate the nand_chip structure using + kmalloc or you can allocate it statically. + The NAND chip structure embeds an mtd structure + which will be registered to the MTD subsystem. + You can extract a pointer to the mtd structure + from a nand_chip pointer using the nand_to_mtd() + helper. Kmalloc based example @@ -180,7 +183,6 @@ static void __iomem *baseaddr; Static example -static struct mtd_info board_mtd; static struct nand_chip board_chip; static void __iomem *baseaddr; @@ -274,13 +276,15 @@ static int __init board_init (void) int err = 0; /* Allocate memory for MTD device structure and private data */ - board_mtd = kzalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip), GFP_KERNEL); - if (!board_mtd) { + this = kzalloc(sizeof(struct nand_chip), GFP_KERNEL); + if (!this) { printk ("Unable to allocate NAND MTD device structure.\n"); err = -ENOMEM; goto out; } + board_mtd = nand_to_mtd(this); + /* map physical address */ baseaddr = ioremap(CHIP_PHYSICAL_ADDRESS, 1024); if (!baseaddr) { @@ -289,11 +293,6 @@ static int __init board_init (void) goto out_mtd; } - /* Get pointer to private data */ - this = (struct nand_chip *) (); - /* Link the private data with the MTD structure */ - board_mtd->priv = this; - /* Set address of NAND IO lines */ this->IO_ADDR_R = baseaddr; this->IO_ADDR_W = baseaddr; @@ -317,7 +316,7 @@ static int __init board_init (void) out_ior: iounmap(baseaddr); out_mtd: - kfree (board_mtd); + kfree (this); out: return err; } @@ -343,7 +342,7 @@ static void __exit board_cleanup (void) iounmap(baseaddr); /* Free the MTD device structure */ - kfree (board_mtd); + kfree (mtd_to_nand(board_mtd)); } module_exit(board_cleanup); #endif -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 14/27] mtd: nand: use the mtd instance embedded in struct nand_chip
struct nand_chip now embeds an mtd device. Patch all drivers to make use of this mtd instance instead of using the instance embedded in their private struct or dynamically allocated. Signed-off-by: Boris Brezillon Cc: Julia Lawall --- Most of those changes were generate with this coccinelle script: http://code.bulix.org/5vxuih-89429 --- drivers/mtd/nand/ams-delta.c | 13 ++-- drivers/mtd/nand/atmel_nand.c | 11 ++- drivers/mtd/nand/au1550nd.c| 18 ++--- drivers/mtd/nand/bcm47xxnflash/bcm47xxnflash.h | 1 - drivers/mtd/nand/bcm47xxnflash/main.c | 7 +- drivers/mtd/nand/bcm47xxnflash/ops_bcm4706.c | 2 +- drivers/mtd/nand/bf5xx_nand.c | 14 ++-- drivers/mtd/nand/brcmnand/brcmnand.c | 11 ++- drivers/mtd/nand/cafe_nand.c | 10 +-- drivers/mtd/nand/cmx270_nand.c | 11 ++- drivers/mtd/nand/cs553x_nand.c | 13 ++-- drivers/mtd/nand/davinci_nand.c| 25 +++ drivers/mtd/nand/denali.c | 61 + drivers/mtd/nand/denali.h | 1 - drivers/mtd/nand/diskonchip.c | 11 ++- drivers/mtd/nand/docg4.c | 18 +++-- drivers/mtd/nand/fsl_elbc_nand.c | 22 +++--- drivers/mtd/nand/fsl_ifc_nand.c| 23 +++ drivers/mtd/nand/fsl_upm.c | 26 +++ drivers/mtd/nand/fsmc_nand.c | 59 +--- drivers/mtd/nand/gpio.c| 16 ++--- drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 2 +- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 20 +++--- drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 1 - drivers/mtd/nand/hisi504_nand.c| 11 ++- drivers/mtd/nand/jz4740_nand.c | 9 ++- drivers/mtd/nand/lpc32xx_mlc.c | 7 +- drivers/mtd/nand/lpc32xx_slc.c | 7 +- drivers/mtd/nand/mpc5121_nfc.c | 3 +- drivers/mtd/nand/mxc_nand.c| 5 +- drivers/mtd/nand/nandsim.c | 12 ++-- drivers/mtd/nand/ndfc.c| 22 +++--- drivers/mtd/nand/nuc900_nand.c | 21 +++--- drivers/mtd/nand/omap2.c | 94 +++--- drivers/mtd/nand/orion_nand.c | 4 +- drivers/mtd/nand/pasemi_nand.c | 14 ++-- drivers/mtd/nand/plat_nand.c | 14 ++-- drivers/mtd/nand/pxa3xx_nand.c | 33 - drivers/mtd/nand/r852.c| 34 -- drivers/mtd/nand/r852.h| 1 - drivers/mtd/nand/s3c2410.c | 19 +++--- drivers/mtd/nand/sh_flctl.c| 8 +-- drivers/mtd/nand/sharpsl.c | 18 ++--- drivers/mtd/nand/socrates_nand.c | 5 +- drivers/mtd/nand/sunxi_nand.c | 13 ++-- drivers/mtd/nand/tmio_nand.c | 7 +- drivers/mtd/nand/txx9ndfmc.c | 3 +- drivers/mtd/nand/vf610_nfc.c | 5 +- include/linux/mtd/sh_flctl.h | 3 +- 49 files changed, 383 insertions(+), 385 deletions(-) diff --git a/drivers/mtd/nand/ams-delta.c b/drivers/mtd/nand/ams-delta.c index b2b49c4..0f638c6 100644 --- a/drivers/mtd/nand/ams-delta.c +++ b/drivers/mtd/nand/ams-delta.c @@ -183,19 +183,16 @@ static int ams_delta_init(struct platform_device *pdev) return -ENXIO; /* Allocate memory for MTD device structure and private data */ - ams_delta_mtd = kzalloc(sizeof(struct mtd_info) + - sizeof(struct nand_chip), GFP_KERNEL); - if (!ams_delta_mtd) { + this = kzalloc(sizeof(struct nand_chip), GFP_KERNEL); + if (!this) { printk (KERN_WARNING "Unable to allocate E3 NAND MTD device structure.\n"); err = -ENOMEM; goto out; } + ams_delta_mtd = nand_to_mtd(this); ams_delta_mtd->owner = THIS_MODULE; - /* Get pointer to private data */ - this = (struct nand_chip *) (&ams_delta_mtd[1]); - /* Link the private data with the MTD structure */ ams_delta_mtd->priv = this; @@ -256,7 +253,7 @@ out_gpio: gpio_free(AMS_DELTA_GPIO_PIN_NAND_RB); iounmap(io_base); out_free: - kfree(ams_delta_mtd); + kfree(this); out: return err; } @@ -276,7 +273,7 @@ static int ams_delta_cleanup(struct platform_device *pdev) iounmap(io_base); /* Free the MTD device structure */ - kfree(ams_delta_mtd); + kfree(mtd_to_nand(ams_delta_mtd)); return 0; } diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index f8aac0a..51748b4 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c @@ -116,7 +116,6 @@ static struct atmel_nfc nand_nfc;
[PATCH 12/27] mtd: nand: embed an mtd_info structure into nand_chip
Currently all NAND controller drivers are providing both the mtd_info and nand_chip struct and then let the NAND subsystem to initialize a few things before registering the mtd instance to the MTD layer. Embed an mtd_info field into nand_chip to add some consistency to all NAND controller drivers. This change will also help factorizing boilerplate code copied in all NAND drivers. Signed-off-by: Boris Brezillon --- include/linux/mtd/nand.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 056d165..c4e39ff 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -540,6 +540,7 @@ struct nand_buffers { /** * struct nand_chip - NAND Private Flash Chip Data + * @mtd: MTD device registered to the MTD framework * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the * flash device * @IO_ADDR_W: [BOARDSPECIFIC] address to write the 8 I/O lines of the @@ -640,6 +641,7 @@ struct nand_buffers { */ struct nand_chip { + struct mtd_info mtd; void __iomem *IO_ADDR_R; void __iomem *IO_ADDR_W; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 16/27] staging: mt29f_spinand: use the mtd instance embedded in struct nand_chip
struct nand_chip now embeds an mtd device, use it instead of allocating a new one. Signed-off-by: Boris Brezillon --- drivers/staging/mt29f_spinand/mt29f_spinand.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index 8924a96..8171b74 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c @@ -903,9 +903,7 @@ static int spinand_probe(struct spi_device *spi_nand) chip->options |= NAND_CACHEPRG; chip->select_chip = spinand_select_chip; - mtd = devm_kzalloc(&spi_nand->dev, sizeof(struct mtd_info), GFP_KERNEL); - if (!mtd) - return -ENOMEM; + mtd = nand_to_mtd(chip); dev_set_drvdata(&spi_nand->dev, mtd); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 17/27] cris: nand: use the mtd instance embedded in struct nand_chip
struct nand_chip now embeds an mtd device. Patch all drivers to make use of this mtd instance instead of using the instance embedded in their private struct or dynamically allocated. Signed-off-by: Boris Brezillon --- Most of those changes were generate with this coccinelle script: http://code.bulix.org/5vxuih-89429 --- arch/cris/arch-v32/drivers/mach-a3/nandflash.c | 3 +-- arch/cris/arch-v32/drivers/mach-fs/nandflash.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c index db953cf..ad78b97 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c @@ -36,7 +36,6 @@ #define CE_BIT 12 struct mtd_info_wrapper { - struct mtd_info info; struct nand_chip chip; }; @@ -148,7 +147,7 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) /* Get pointer to private data */ this = &wrapper->chip; - crisv32_mtd = &wrapper->info; + crisv32_mtd = nand_to_mtd(&wrapper->chip); /* Link the private data with the MTD structure */ crisv32_mtd->priv = this; diff --git a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c index 22a6467..00a277b 100644 --- a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c @@ -31,7 +31,6 @@ #define BY_BIT 7 struct mtd_info_wrapper { - struct mtd_info info; struct nand_chip chip; }; @@ -129,7 +128,7 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) /* Get pointer to private data */ this = &wrapper->chip; - crisv32_mtd = &wrapper->info; + crisv32_mtd = nand_to_mtd(&wrapper->chip); pa_oe.oe |= 1 << CE_BIT; pa_oe.oe |= 1 << ALE_BIT; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 18/27] mtd: nand: update mtd_to_nand()
Now that all drivers are using the mtd instance embedded in the nand_chip struct we can safely update the mtd_to_nand_chip() implementation to use the container_of macro instead of returning the content of mtd->priv. This will allow us to remove mtd->priv = chip assignments done in all NAND controller drivers. Signed-off-by: Boris Brezillon --- include/linux/mtd/nand.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 8ec071e..873646d 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -734,7 +734,7 @@ static inline struct device_node *nand_get_flash_node(struct nand_chip *chip) static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) { - return mtd->priv; + return container_of(mtd, struct nand_chip, mtd); } static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 21/27] staging: mt29f_spinand: remove useless mtd->priv = chip assignment
mtd_to_nand_chip() now uses the container_of() approach to transform an mtd_info pointer into a nand_chip one. Drop useless mtd->priv assignments from NAND controller drivers. Signed-off-by: Boris Brezillon --- Patch generated with the following coccinelle script: ---8< virtual patch @@ struct mtd_info mtd; struct mtd_info *mtdptr; struct nand_chip *chipptr; expression d; @@ ( -(mtd).priv = (chipptr); | -(mtdptr)->priv = (chipptr); ---8< --- drivers/staging/mt29f_spinand/mt29f_spinand.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index 8171b74..b7d429d 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c @@ -907,7 +907,6 @@ static int spinand_probe(struct spi_device *spi_nand) dev_set_drvdata(&spi_nand->dev, mtd); - mtd->priv = chip; mtd->dev.parent = &spi_nand->dev; mtd->oobsize = 64; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 20/27] cris: nand: remove useless mtd->priv = chip assignments
mtd_to_nand_chip() now uses the container_of() approach to transform an mtd_info pointer into a nand_chip one. Drop useless mtd->priv assignments from NAND controller drivers. Signed-off-by: Boris Brezillon --- Patch generated with the following coccinelle script: ---8< virtual patch @@ struct mtd_info mtd; struct mtd_info *mtdptr; struct nand_chip *chipptr; expression d; @@ ( -(mtd).priv = (chipptr); | -(mtdptr)->priv = (chipptr); ---8< --- arch/cris/arch-v32/drivers/mach-a3/nandflash.c | 3 --- arch/cris/arch-v32/drivers/mach-fs/nandflash.c | 3 --- 2 files changed, 6 deletions(-) diff --git a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c index ad78b97..2f65261 100644 --- a/arch/cris/arch-v32/drivers/mach-a3/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-a3/nandflash.c @@ -149,9 +149,6 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) this = &wrapper->chip; crisv32_mtd = nand_to_mtd(&wrapper->chip); - /* Link the private data with the MTD structure */ - crisv32_mtd->priv = this; - /* Set address of NAND IO lines */ this->IO_ADDR_R = read_cs; this->IO_ADDR_W = write_cs; diff --git a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c index 00a277b..4ab9d4e 100644 --- a/arch/cris/arch-v32/drivers/mach-fs/nandflash.c +++ b/arch/cris/arch-v32/drivers/mach-fs/nandflash.c @@ -140,9 +140,6 @@ struct mtd_info *__init crisv32_nand_flash_probe(void) bif_cfg.gated_csp1 = regk_bif_core_wr; REG_WR(bif_core, regi_bif_core, rw_grp3_cfg, bif_cfg); - /* Link the private data with the MTD structure */ - crisv32_mtd->priv = this; - /* Set address of NAND IO lines */ this->IO_ADDR_R = read_cs; this->IO_ADDR_W = write_cs; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 19/27] mtd: nand: remove useless mtd->priv = chip assignments
mtd_to_nand_chip() now uses the container_of() approach to transform an mtd_info pointer into a nand_chip one. Drop useless mtd->priv assignments from NAND controller drivers. Signed-off-by: Boris Brezillon --- Patch generated with the following coccinelle script: ---8< virtual patch @@ struct mtd_info mtd; struct mtd_info *mtdptr; struct nand_chip *chipptr; expression d; @@ ( -(mtd).priv = (chipptr); | -(mtdptr)->priv = (chipptr); ---8< --- drivers/mtd/nand/ams-delta.c | 3 --- drivers/mtd/nand/atmel_nand.c | 1 - drivers/mtd/nand/bf5xx_nand.c | 1 - drivers/mtd/nand/brcmnand/brcmnand.c | 1 - drivers/mtd/nand/cafe_nand.c | 1 - drivers/mtd/nand/cmx270_nand.c | 1 - drivers/mtd/nand/cs553x_nand.c | 1 - drivers/mtd/nand/diskonchip.c | 1 - drivers/mtd/nand/docg4.c | 1 - drivers/mtd/nand/fsmc_nand.c | 1 - drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 1 - drivers/mtd/nand/hisi504_nand.c| 1 - drivers/mtd/nand/jz4740_nand.c | 1 - drivers/mtd/nand/lpc32xx_mlc.c | 1 - drivers/mtd/nand/lpc32xx_slc.c | 1 - drivers/mtd/nand/mpc5121_nfc.c | 1 - drivers/mtd/nand/mxc_nand.c| 1 - drivers/mtd/nand/omap2.c | 1 - drivers/mtd/nand/orion_nand.c | 1 - drivers/mtd/nand/pasemi_nand.c | 1 - drivers/mtd/nand/pxa3xx_nand.c | 1 - drivers/mtd/nand/r852.c| 1 - drivers/mtd/nand/sh_flctl.c| 1 - drivers/mtd/nand/socrates_nand.c | 1 - drivers/mtd/nand/sunxi_nand.c | 1 - drivers/mtd/nand/tmio_nand.c | 1 - drivers/mtd/nand/txx9ndfmc.c | 2 -- drivers/mtd/nand/vf610_nfc.c | 1 - 28 files changed, 31 deletions(-) diff --git a/drivers/mtd/nand/ams-delta.c b/drivers/mtd/nand/ams-delta.c index 0f638c6..1a18938 100644 --- a/drivers/mtd/nand/ams-delta.c +++ b/drivers/mtd/nand/ams-delta.c @@ -193,9 +193,6 @@ static int ams_delta_init(struct platform_device *pdev) ams_delta_mtd = nand_to_mtd(this); ams_delta_mtd->owner = THIS_MODULE; - /* Link the private data with the MTD structure */ - ams_delta_mtd->priv = this; - /* * Don't try to request the memory region from here, * it should have been already requested from the diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index 51748b4..aef02d3 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c @@ -2126,7 +2126,6 @@ static int atmel_nand_probe(struct platform_device *pdev) } nand_chip->priv = host; /* link the private data structures */ - mtd->priv = nand_chip; mtd->dev.parent = &pdev->dev; /* Set address of NAND IO lines */ diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c index 671d983..77d3b11 100644 --- a/drivers/mtd/nand/bf5xx_nand.c +++ b/drivers/mtd/nand/bf5xx_nand.c @@ -782,7 +782,6 @@ static int bf5xx_nand_probe(struct platform_device *pdev) /* initialise mtd info data struct */ mtd = nand_to_mtd(&info->chip); - mtd->priv = chip; mtd->dev.parent = &pdev->dev; /* initialise the hardware */ diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c index 20ebf00..a124147 100644 --- a/drivers/mtd/nand/brcmnand/brcmnand.c +++ b/drivers/mtd/nand/brcmnand/brcmnand.c @@ -1925,7 +1925,6 @@ static int brcmnand_init_cs(struct brcmnand_host *host) nand_set_flash_node(chip, dn); chip->priv = host; - mtd->priv = chip; mtd->name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "brcmnand.%d", host->cs); mtd->owner = THIS_MODULE; diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c index 1d3a66c..096917a 100644 --- a/drivers/mtd/nand/cafe_nand.c +++ b/drivers/mtd/nand/cafe_nand.c @@ -611,7 +611,6 @@ static int cafe_nand_probe(struct pci_dev *pdev, mtd = nand_to_mtd(&cafe->nand); mtd->dev.parent = &pdev->dev; - mtd->priv = &cafe->nand; cafe->nand.priv = cafe; cafe->pdev = pdev; diff --git a/drivers/mtd/nand/cmx270_nand.c b/drivers/mtd/nand/cmx270_nand.c index 84d027e..ca1f9b6 100644 --- a/drivers/mtd/nand/cmx270_nand.c +++ b/drivers/mtd/nand/cmx270_nand.c @@ -177,7 +177,6 @@ static int __init cmx270_init(void) /* Link the private data with the MTD structure */ cmx270_nand_mtd->owner = THIS_MODULE; - cmx270_nand_mtd->priv = this; /* insert callbacks */ this->IO_ADDR_R = cmx270_nand_io; diff --git a/drivers/mtd/nand/cs553x_nand.c b/drivers/mtd/nand/cs553x_nand.c index ea51a9c..3a691d9 100644 --- a/drivers/mtd/nand/cs553x_nand.c +++ b/drivers/mtd/nand/cs553x_nand.c @@ -206,7 +206,6 @@ static int __init cs553x_init_one(int cs, int mmio, unsigned long adr) new_mtd = nand_to_mtd(this);
[PATCH 23/27] mtd: nand: kill the chip->flash_node field
Now that the nand_chip struct directly embeds an mtd_info struct we can get rid of the ->flash_node field and forward set/get_flash_node requests to the MTD layer. As a side effect, we no longer need the mtd_set_of_node() call done in nand_dt_init(). Signed-off-by: Boris Brezillon --- drivers/mtd/nand/nand_base.c | 3 --- include/linux/mtd/nand.h | 7 ++- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 2f75eb1..78e5123 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -3945,9 +3945,6 @@ static int nand_dt_init(struct nand_chip *chip) if (!dn) return 0; - /* MTD can automatically handle DT partitions, etc. */ - mtd_set_of_node(nand_to_mtd(chip), dn); - if (of_get_nand_bus_width(dn) == 16) chip->options |= NAND_BUSWIDTH_16; diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 873646d..f12efe1 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -545,7 +545,6 @@ struct nand_buffers { * flash device * @IO_ADDR_W: [BOARDSPECIFIC] address to write the 8 I/O lines of the * flash device. - * @flash_node:[BOARDSPECIFIC] device node describing this instance * @read_byte: [REPLACEABLE] read one byte from the chip * @read_word: [REPLACEABLE] read one word from the chip * @write_byte:[REPLACEABLE] write a single byte to the chip on the @@ -645,8 +644,6 @@ struct nand_chip { void __iomem *IO_ADDR_R; void __iomem *IO_ADDR_W; - struct device_node *flash_node; - uint8_t (*read_byte)(struct mtd_info *mtd); u16 (*read_word)(struct mtd_info *mtd); void (*write_byte)(struct mtd_info *mtd, uint8_t byte); @@ -724,12 +721,12 @@ struct nand_chip { static inline void nand_set_flash_node(struct nand_chip *chip, struct device_node *np) { - chip->flash_node = np; + mtd_set_of_node(&chip->mtd, np); } static inline struct device_node *nand_get_flash_node(struct nand_chip *chip) { - return chip->flash_node; + return mtd_get_of_node(&chip->mtd); } static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 24/27] mtd: nand: add helpers to access ->priv
Add two helpers to access the field reserved for private controller data. This makes it clearer what this field is reserved for and ease future refactoring. Signed-off-by: Boris Brezillon --- include/linux/mtd/nand.h | 10 ++ 1 file changed, 10 insertions(+) diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index f12efe1..4afa263 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -739,6 +739,16 @@ static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip) return &chip->mtd; } +static inline void *nand_get_controller_data(struct nand_chip *chip) +{ + return chip->priv; +} + +static inline void nand_set_controller_data(struct nand_chip *chip, void *priv) +{ + chip->priv = priv; +} + /* * NAND Flash Manufacturer ID Codes */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 27/27] staging: mt29f_spinand: make use of nand_set/get_controller_data() helpers
New helpers have been added to avoid directly accessing chip->field. Use them where appropriate. Signed-off-by: Boris Brezillon --- drivers/staging/mt29f_spinand/mt29f_spinand.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index b7d429d..5b3027a 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c @@ -32,7 +32,7 @@ static inline struct spinand_state *mtd_to_state(struct mtd_info *mtd) { struct nand_chip *chip = mtd_to_nand(mtd); - struct spinand_info *info = (struct spinand_info *)chip->priv; + struct spinand_info *info = (struct spinand_info *)nand_get_controller_data(chip); struct spinand_state *state = (struct spinand_state *)info->priv; return state; @@ -633,7 +633,7 @@ static int spinand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip, u8 *p = buf; int eccsize = chip->ecc.size; int eccsteps = chip->ecc.steps; - struct spinand_info *info = (struct spinand_info *)chip->priv; + struct spinand_info *info = (struct spinand_info *)nand_get_controller_data(chip); enable_read_hw_ecc = 1; @@ -679,7 +679,7 @@ static u8 spinand_read_byte(struct mtd_info *mtd) static int spinand_wait(struct mtd_info *mtd, struct nand_chip *chip) { - struct spinand_info *info = (struct spinand_info *)chip->priv; + struct spinand_info *info = (struct spinand_info *)nand_get_controller_data(chip); unsigned long timeo = jiffies; int retval, state = chip->state; @@ -745,7 +745,7 @@ static void spinand_cmdfunc(struct mtd_info *mtd, unsigned int command, int column, int page) { struct nand_chip *chip = mtd_to_nand(mtd); - struct spinand_info *info = (struct spinand_info *)chip->priv; + struct spinand_info *info = (struct spinand_info *)nand_get_controller_data(chip); struct spinand_state *state = (struct spinand_state *)info->priv; switch (command) { @@ -894,7 +894,7 @@ static int spinand_probe(struct spi_device *spi_nand) #endif nand_set_flash_node(chip, spi_nand->dev.of_node); - chip->priv = info; + nand_set_controller_data(chip, info); chip->read_buf = spinand_read_buf; chip->write_buf = spinand_write_buf; chip->read_byte = spinand_read_byte; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 25/27] ARM: make use of nand_set/get_controller_data() helpers
New helpers have been added to avoid directly accessing chip->field. Use them where appropriate. Signed-off-by: Boris Brezillon --- arch/arm/mach-ixp4xx/ixdp425-setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c index 333b0f9..508c2d7 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-setup.c +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c @@ -77,7 +77,7 @@ static void ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) { struct nand_chip *this = mtd_to_nand(mtd); - int offset = (int)this->priv; + int offset = (int)nand_get_controller_data(this); if (ctrl & NAND_CTRL_CHANGE) { if (ctrl & NAND_NCE) { @@ -88,7 +88,7 @@ ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl) offset = (ctrl & NAND_CLE) ? IXDP425_NAND_CMD_BYTE : 0; offset |= (ctrl & NAND_ALE) ? IXDP425_NAND_ADDR_BYTE : 0; - this->priv = (void *)offset; + nand_set_controller_data(this, (void *)offset); } if (cmd != NAND_CMD_NONE) -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 13/27] mtd: nand: add nand_to_mtd() helper
Add a new helper to retrieve the MTD device attached to a NAND chip. Signed-off-by: Boris Brezillon --- include/linux/mtd/nand.h | 5 + 1 file changed, 5 insertions(+) diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index c4e39ff..8ec071e 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -737,6 +737,11 @@ static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd) return mtd->priv; } +static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip) +{ + return &chip->mtd; +} + /* * NAND Flash Manufacturer ID Codes */ -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 22/27] mtd: nand: simplify nand_dt_init() usage
nand_dt_init() function requires 3 arguments where it actually needs one (dn and mtd can both be retrieved from chip). Drop these parameters. Testing for dn != NULL inside nand_dt_init() also helps simplifying the caller code. Signed-off-by: Boris Brezillon --- drivers/mtd/nand/nand_base.c | 21 +++-- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 71cc029..2f75eb1 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -3937,11 +3937,17 @@ ident_done: return type; } -static int nand_dt_init(struct mtd_info *mtd, struct nand_chip *chip, - struct device_node *dn) +static int nand_dt_init(struct nand_chip *chip) { + struct device_node *dn = nand_get_flash_node(chip); int ecc_mode, ecc_strength, ecc_step; + if (!dn) + return 0; + + /* MTD can automatically handle DT partitions, etc. */ + mtd_set_of_node(nand_to_mtd(chip), dn); + if (of_get_nand_bus_width(dn) == 16) chip->options |= NAND_BUSWIDTH_16; @@ -3989,14 +3995,9 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips, struct nand_flash_dev *type; int ret; - if (nand_get_flash_node(chip)) { - /* MTD can automatically handle DT partitions, etc. */ - mtd_set_of_node(mtd, nand_get_flash_node(chip)); - - ret = nand_dt_init(mtd, chip, nand_get_flash_node(chip)); - if (ret) - return ret; - } + ret = nand_dt_init(chip); + if (ret) + return ret; /* Set the default functions */ nand_set_defaults(chip, chip->options & NAND_BUSWIDTH_16); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] arm, am335x: add support for the bosch shc board
> + > + cpsw_default: cpsw_default { > + pinctrl-single,pins = < > + /* Slave 1 */ > + 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) > + 0x118 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) > + 0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) > + 0x124 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x128 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) > + 0x130 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x134 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x138 (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x13c (PIN_INPUT_PULLDOWN | MUX_MODE0) > + 0x140 (PIN_INPUT_PULLDOWN | MUX_MODE0) Please use the AM33XX_IOPAD pinmux macro: All boards have recently be converted: https://www.mail-archive.com/linux-omap@vger.kernel.org/msg121329.html Regards, -- Robert Nelson https://rcn-ee.com/ -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 3/3] [media] include/media: move platform_data to linux/platform_data/media
W dniu 16.11.2015 o 20:00, Mauro Carvalho Chehab pisze: > Let's not mix platform_data headers with the core headers. Instead, let's > create a subdir at linux/platform_data and move the headers to that > common place, adding it to MAINTAINERS. > > The headers were moved with: > mkdir include/linux/platform_data/media/; git mv > include/media/gpio-ir-recv.h include/media/ir-rx51.h > include/media/mmp-camera.h include/media/omap1_camera.h > include/media/omap4iss.h include/media/s5p_hdmi.h include/media/si4713.h > include/media/sii9234.h include/media/smiapp.h include/media/soc_camera.h > include/media/soc_camera_platform.h include/media/timb_radio.h > include/media/timb_video.h include/linux/platform_data/media/ > > And the references fixed with this script: > MAIN_DIR="linux/platform_data/" > PREV_DIR="media/" > DIRS="media/" > > echo "Checking affected files" >&2 > for i in $DIRS; do > for j in $(find include/$MAIN_DIR/$i -type f -name '*.h'); do >n=`basename $j` > git grep -l $n > done > done|sort|uniq >files && ( > echo "Handling files..." >&2; > echo "for i in \$(cat files|grep -v Documentation); do cat \$i | \\"; > ( > cd include/$MAIN_DIR; > for j in $DIRS; do > for i in $(ls $j); do > echo "perl -ne 's,(include > [\\\"\\<])$PREV_DIR($i)([\\\"\\>]),\1$MAIN_DIR$j\2\3,; print \$_' |\\"; > done; > done; > echo "cat > a && mv a \$i; done"; > ); > echo "Handling documentation..." >&2; > echo "for i in MAINTAINERS \$(cat files); do cat \$i | \\"; > ( > cd include/$MAIN_DIR; > for j in $DIRS; do > for i in $(ls $j); do > echo " perl -ne > 's,include/$PREV_DIR($i)\b,include/$MAIN_DIR$j\1,; print \$_' |\\"; > done; > done; > echo "cat > a && mv a \$i; done" > ); > ) >script && . ./script > > Signed-off-by: Mauro Carvalho Chehab > --- > Documentation/video4linux/omap4_camera.txt| 2 +- > Documentation/video4linux/si4713.txt | 2 +- > MAINTAINERS | 1 + > arch/arm/mach-omap1/include/mach/camera.h | 2 +- > arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++-- > arch/arm/plat-samsung/devs.c | 2 +- Acked-by: Krzysztof Kozlowski Best regards, Krzysztof -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 3/3] [media] include/media: move platform_data to linux/platform_data/media
On Mon, 16 Nov 2015, Mauro Carvalho Chehab wrote: > Let's not mix platform_data headers with the core headers. Instead, let's > create a subdir at linux/platform_data and move the headers to that > common place, adding it to MAINTAINERS. > > The headers were moved with: > mkdir include/linux/platform_data/media/; git mv > include/media/gpio-ir-recv.h include/media/ir-rx51.h > include/media/mmp-camera.h include/media/omap1_camera.h > include/media/omap4iss.h include/media/s5p_hdmi.h include/media/si4713.h > include/media/sii9234.h include/media/smiapp.h include/media/soc_camera.h > include/media/soc_camera_platform.h include/media/timb_radio.h > include/media/timb_video.h include/linux/platform_data/media/ > > And the references fixed with this script: > MAIN_DIR="linux/platform_data/" > PREV_DIR="media/" > DIRS="media/" > > echo "Checking affected files" >&2 > for i in $DIRS; do > for j in $(find include/$MAIN_DIR/$i -type f -name '*.h'); do >n=`basename $j` > git grep -l $n > done > done|sort|uniq >files && ( > echo "Handling files..." >&2; > echo "for i in \$(cat files|grep -v Documentation); do cat \$i | \\"; > ( > cd include/$MAIN_DIR; > for j in $DIRS; do > for i in $(ls $j); do > echo "perl -ne 's,(include > [\\\"\\<])$PREV_DIR($i)([\\\"\\>]),\1$MAIN_DIR$j\2\3,; print \$_' |\\"; > done; > done; > echo "cat > a && mv a \$i; done"; > ); > echo "Handling documentation..." >&2; > echo "for i in MAINTAINERS \$(cat files); do cat \$i | \\"; > ( > cd include/$MAIN_DIR; > for j in $DIRS; do > for i in $(ls $j); do > echo " perl -ne > 's,include/$PREV_DIR($i)\b,include/$MAIN_DIR$j\1,; print \$_' |\\"; > done; > done; > echo "cat > a && mv a \$i; done" > ); > ) >script && . ./script > > Signed-off-by: Mauro Carvalho Chehab > --- > Documentation/video4linux/omap4_camera.txt| 2 +- > Documentation/video4linux/si4713.txt | 2 +- > MAINTAINERS | 1 + > arch/arm/mach-omap1/include/mach/camera.h | 2 +- > arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++-- > arch/arm/plat-samsung/devs.c | 2 +- > arch/sh/boards/mach-ap325rxa/setup.c | 2 +- > drivers/media/platform/marvell-ccic/mmp-driver.c | 2 +- > drivers/media/platform/s5p-tv/hdmi_drv.c | 2 +- > drivers/media/platform/s5p-tv/sii9234_drv.c | 2 +- > drivers/media/platform/soc_camera/omap1_camera.c | 2 +- > drivers/media/platform/soc_camera/soc_camera_platform.c | 2 +- > drivers/media/platform/timblogiw.c| 2 +- > drivers/media/radio/radio-timb.c | 2 +- > drivers/media/radio/si4713/radio-usb-si4713.c | 2 +- > drivers/media/radio/si4713/si4713.h | 2 +- > drivers/media/rc/gpio-ir-recv.c | 2 +- > drivers/media/rc/ir-rx51.c| 2 +- > drivers/mfd/timberdale.c | 4 ++-- Acked-by: Lee Jones > drivers/staging/media/omap4iss/iss.h | 2 +- > drivers/staging/media/omap4iss/iss_csiphy.h | 2 +- > include/{ => linux/platform_data}/media/gpio-ir-recv.h| 1 - > include/{ => linux/platform_data}/media/ir-rx51.h | 0 > include/{ => linux/platform_data}/media/mmp-camera.h | 0 > include/{ => linux/platform_data}/media/omap1_camera.h| 0 > include/{ => linux/platform_data}/media/omap4iss.h| 0 > include/{ => linux/platform_data}/media/s5p_hdmi.h| 1 - > include/{ => linux/platform_data}/media/si4713.h | 2 +- > include/{ => linux/platform_data}/media/sii9234.h | 0 > include/{ => linux/platform_data}/media/soc_camera_platform.h | 0 > include/{ => linux/platform_data}/media/timb_radio.h | 0 > include/{ => linux/platform_data}/media/timb_video.h | 0 > 32 files changed, 24 insertions(+), 25 deletions(-) > rename include/{ => linux/platform_data}/media/gpio-ir-recv.h (99%) > rename include/{ => linux/platform_data}/media/ir-rx51.h (100%) > rename include/{ => linux/platform_data}/media/mmp-camera.h (100%) > rename include/{ => linux/platform_data}/media/omap1_camera.h (100%) > rename include/{ => linux/platform_data}/media/omap4iss.h (100%) > rename include/{ => linux/platform_data}/media/s5p_hdmi.h (99%) > rename include/{ => linux/platform_data}/media/si4713.h (96%) > r
Re: [PATCH v2 3/3] [media] include/media: move platform_data to linux/platform_data/media
On Monday 16 November 2015 09:00:45 Mauro Carvalho Chehab wrote: > Let's not mix platform_data headers with the core headers. Instead, let's > create a subdir at linux/platform_data and move the headers to that > common place, adding it to MAINTAINERS. > Acked-by: Arnd Bergmann I think we can also move some of the existing platform data headers to the same place, but that could be a separate patch: $ git grep linux/platform_data drivers/media/ drivers/media/platform/coda/coda-common.c:#include drivers/media/platform/soc_camera/mx2_camera.c:#include drivers/media/platform/soc_camera/mx3_camera.c:#include drivers/media/platform/soc_camera/mx3_camera.c:#include drivers/media/platform/soc_camera/pxa_camera.c:#include drivers/media/platform/soc_camera/rcar_vin.c:#include Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] ARM: OMAP4: execute initcall to reserve SRAM for I688 only on OMAP4
On 11/16/2015 01:25 PM, Lucas Stach wrote: > omap_interconnect_sync() is the only user of the SRAM scratch area > allocated in the omap4_sram_init initcall. The interconnect sync is > used exclusively in the OMAP4 specific WFI implementation, so there > is no point in allocating the SRAM scratch on other SoC types. > > Bail out of the initcall if the kernel is not running on OMAP4 to > avoid a confusing warning about being unable to allocate the SRAM > needed for I688 handling. > > Signed-off-by: Lucas Stach > Tested-by: Bastian Stender > --- > arch/arm/mach-omap2/omap4-common.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/arm/mach-omap2/omap4-common.c > b/arch/arm/mach-omap2/omap4-common.c > index 949696b6f17b..6db393a30a28 100644 > --- a/arch/arm/mach-omap2/omap4-common.c > +++ b/arch/arm/mach-omap2/omap4-common.c > @@ -131,6 +131,9 @@ static int __init omap4_sram_init(void) > struct device_node *np; > struct gen_pool *sram_pool; > > + if (!cpu_is_omap44xx()) > + return 0; This one affects on am43xx also > + > np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); > if (!np) > pr_warn("%s:Unable to allocate sram needed to handle errata > I688\n", Since all OMAP4+ platforms are now DT based why can't we just return from here silently? -- regards, -grygorii -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] ARM: OMAP4: execute initcall to reserve SRAM for I688 only on OMAP4
omap_interconnect_sync() is the only user of the SRAM scratch area allocated in the omap4_sram_init initcall. The interconnect sync is used exclusively in the OMAP4 specific WFI implementation, so there is no point in allocating the SRAM scratch on other SoC types. Bail out of the initcall if the kernel is not running on OMAP4 to avoid a confusing warning about being unable to allocate the SRAM needed for I688 handling. Signed-off-by: Lucas Stach Tested-by: Bastian Stender --- arch/arm/mach-omap2/omap4-common.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 949696b6f17b..6db393a30a28 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -131,6 +131,9 @@ static int __init omap4_sram_init(void) struct device_node *np; struct gen_pool *sram_pool; + if (!cpu_is_omap44xx()) + return 0; + np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); if (!np) pr_warn("%s:Unable to allocate sram needed to handle errata I688\n", -- 2.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 3/3] [media] include/media: move platform_data to linux/platform_data/media
Let's not mix platform_data headers with the core headers. Instead, let's create a subdir at linux/platform_data and move the headers to that common place, adding it to MAINTAINERS. The headers were moved with: mkdir include/linux/platform_data/media/; git mv include/media/gpio-ir-recv.h include/media/ir-rx51.h include/media/mmp-camera.h include/media/omap1_camera.h include/media/omap4iss.h include/media/s5p_hdmi.h include/media/si4713.h include/media/sii9234.h include/media/smiapp.h include/media/soc_camera.h include/media/soc_camera_platform.h include/media/timb_radio.h include/media/timb_video.h include/linux/platform_data/media/ And the references fixed with this script: MAIN_DIR="linux/platform_data/" PREV_DIR="media/" DIRS="media/" echo "Checking affected files" >&2 for i in $DIRS; do for j in $(find include/$MAIN_DIR/$i -type f -name '*.h'); do n=`basename $j` git grep -l $n done done|sort|uniq >files && ( echo "Handling files..." >&2; echo "for i in \$(cat files|grep -v Documentation); do cat \$i | \\"; ( cd include/$MAIN_DIR; for j in $DIRS; do for i in $(ls $j); do echo "perl -ne 's,(include [\\\"\\<])$PREV_DIR($i)([\\\"\\>]),\1$MAIN_DIR$j\2\3,; print \$_' |\\"; done; done; echo "cat > a && mv a \$i; done"; ); echo "Handling documentation..." >&2; echo "for i in MAINTAINERS \$(cat files); do cat \$i | \\"; ( cd include/$MAIN_DIR; for j in $DIRS; do for i in $(ls $j); do echo " perl -ne 's,include/$PREV_DIR($i)\b,include/$MAIN_DIR$j\1,; print \$_' |\\"; done; done; echo "cat > a && mv a \$i; done" ); ) >script && . ./script Signed-off-by: Mauro Carvalho Chehab --- Documentation/video4linux/omap4_camera.txt| 2 +- Documentation/video4linux/si4713.txt | 2 +- MAINTAINERS | 1 + arch/arm/mach-omap1/include/mach/camera.h | 2 +- arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++-- arch/arm/plat-samsung/devs.c | 2 +- arch/sh/boards/mach-ap325rxa/setup.c | 2 +- drivers/media/platform/marvell-ccic/mmp-driver.c | 2 +- drivers/media/platform/s5p-tv/hdmi_drv.c | 2 +- drivers/media/platform/s5p-tv/sii9234_drv.c | 2 +- drivers/media/platform/soc_camera/omap1_camera.c | 2 +- drivers/media/platform/soc_camera/soc_camera_platform.c | 2 +- drivers/media/platform/timblogiw.c| 2 +- drivers/media/radio/radio-timb.c | 2 +- drivers/media/radio/si4713/radio-usb-si4713.c | 2 +- drivers/media/radio/si4713/si4713.h | 2 +- drivers/media/rc/gpio-ir-recv.c | 2 +- drivers/media/rc/ir-rx51.c| 2 +- drivers/mfd/timberdale.c | 4 ++-- drivers/staging/media/omap4iss/iss.h | 2 +- drivers/staging/media/omap4iss/iss_csiphy.h | 2 +- include/{ => linux/platform_data}/media/gpio-ir-recv.h| 1 - include/{ => linux/platform_data}/media/ir-rx51.h | 0 include/{ => linux/platform_data}/media/mmp-camera.h | 0 include/{ => linux/platform_data}/media/omap1_camera.h| 0 include/{ => linux/platform_data}/media/omap4iss.h| 0 include/{ => linux/platform_data}/media/s5p_hdmi.h| 1 - include/{ => linux/platform_data}/media/si4713.h | 2 +- include/{ => linux/platform_data}/media/sii9234.h | 0 include/{ => linux/platform_data}/media/soc_camera_platform.h | 0 include/{ => linux/platform_data}/media/timb_radio.h | 0 include/{ => linux/platform_data}/media/timb_video.h | 0 32 files changed, 24 insertions(+), 25 deletions(-) rename include/{ => linux/platform_data}/media/gpio-ir-recv.h (99%) rename include/{ => linux/platform_data}/media/ir-rx51.h (100%) rename include/{ => linux/platform_data}/media/mmp-camera.h (100%) rename include/{ => linux/platform_data}/media/omap1_camera.h (100%) rename include/{ => linux/platform_data}/media/omap4iss.h (100%) rename include/{ => linux/platform_data}/media/s5p_hdmi.h (99%) rename include/{ => linux/platform_data}/media/si4713.h (96%) rename include/{ => linux/platform_data}/media/sii9234.h (100%) rename include/{ => linux/platform_data}/media/soc_camera_platform.h (100%) rename include/{ => linux/platform_data}/media/timb_radio.h (100%) r
[PATCH RESEND] ARM: OMAP2+: PM: Denote the cpuidle tracepoints as _rcuidle()
The cpuidle tracepoints are called within a rcu_idle_exit() section, and must be denoted with the _rcuidle() version of the tracepoint. Signed-off-by: Jisheng Zhang Acked-by: Kevin Hilman --- arch/arm/mach-omap2/pm34xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 87b98bf9..2dbd378 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -301,11 +301,11 @@ static void omap3_pm_idle(void) if (omap_irq_pending()) return; - trace_cpu_idle(1, smp_processor_id()); + trace_cpu_idle_rcuidle(1, smp_processor_id()); omap_sram_idle(); - trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()); + trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); } #ifdef CONFIG_SUSPEND -- 2.6.2 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] arm, am335x: add support for the bosch shc board
add support for the am335x based shc board. UART: 0-2 and 4 DRAM: 512 MiB MMC: OMAP SD/MMC: 0 @ 26 MHz OMAP SD/MMC: 1 @ 26 MHz I2C: at24 eeprom, pcf8563 USB: USB1 (host) Signed-off-by: Heiko Schocher --- The following patches are needed to get all working for the shc board: - disable clkout on pcf8563 accepted. http://www.spinics.net/lists/devicetree/msg98542.html - leds: leds-gpio: add shutdown function accepted. https://lkml.org/lkml/2015/10/13/169 - net: phy: smsc: disable energy detect mode accepted [PATCH v2 2/2] net: phy: smsc: disable energy detect mode https://lkml.org/lkml/2015/10/17/2 [PATCH v2 1/2] drivers: net: cpsw: add phy-handle parsing https://lkml.org/lkml/2015/10/17/4 - ARM: OMAP2+: omap_hwmod: Introduce ti,no-init dt property http://lists.infradead.org/pipermail/linux-arm-kernel/2015-March/328204.html @Dave: What is the current state of this patch? I have the same problem here on this am335x based board - [PATCH v2] regulator: tps65217: remove tps65217.dtsi file http://www.kernelhub.org/?msg=868907&p=2 - bootlog and automated tests: http://xeidos.ddns.net/buildbot/waterfall arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/am335x-shc.dts | 577 +++ 2 files changed, 579 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/am335x-shc.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 30bbc37..65d750f 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -466,7 +466,8 @@ dtb-$(CONFIG_SOC_AM33XX) += \ am335x-pepper.dtb \ am335x-lxm.dtb \ am335x-chiliboard.dtb \ - am335x-wega-rdk.dtb + am335x-wega-rdk.dtb \ + am335x-shc.dtb dtb-$(CONFIG_ARCH_OMAP4) += \ omap4-duovero-parlor.dtb \ omap4-panda.dtb \ diff --git a/arch/arm/boot/dts/am335x-shc.dts b/arch/arm/boot/dts/am335x-shc.dts new file mode 100644 index 000..c2aceea --- /dev/null +++ b/arch/arm/boot/dts/am335x-shc.dts @@ -0,0 +1,577 @@ +/* + * support for the bosch am335x based shc c3 board + * + * Copyright (C) 2015 Heiko Schocher + * + * 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. + */ +/dts-v1/; + +#include "am33xx.dtsi" +#include + +/ { + model = "Bosch SHC"; + compatible = "ti,am335x-shc", "ti,am335x-bone", "ti,am33xx"; + + aliases { + mmcblk0 = &mmc1; + mmcblk1 = &mmc2; + }; + + cpus { + cpu@0 { + /* +* To consider voltage drop between PMIC and SoC, +* tolerance value is reduced to 2% from 4% and +* voltage value is increased as a precaution. +*/ + operating-points = < + /* kHzuV */ + 594000 1225000 + 294000 1125000 + >; + voltage-tolerance = <2>; /* 2 percentage */ + cpu0-supply = <&dcdc2_reg>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + back_button { + label = "Back Button"; + gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; + linux,code = ; + debounce-interval = <1000>; + gpio-key,wakeup; + }; + + front_button { + label = "Front Button"; + gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>; + linux,code = ; + debounce-interval = <1000>; + gpio-key,wakeup; + }; + }; + + leds { + pinctrl-names = "default"; + pinctrl-0 = <&user_leds_s0>; + + compatible = "gpio-leds"; + + led@1 { + label = "shc:power:red"; + gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>; + default-state = "off"; + }; + + led@2 { + label = "shc:power:bl"; + gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "timer"; + default-state = "on"; + }; + + led@3 { + label = "shc:lan:red"; + gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; + default-state = "off"; + }; + + led@4 { + label = "shc:lan:bl"; + gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>; + default-state = "off"; + }; + + led@5 { +