Message ID | 1381784555-18344-2-git-send-email-marek@goldelico.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
* Marek Belisko <marek@goldelico.com> [131014 14:11]: > devconf1 reg access is localized only in mach-omap2 and we need to export > updating of devconf1 from omapdss venc driver (bypass and acbias bits). > Add simple api call which update only necessary bits. ... > +void update_bypass_acbias(bool bypass, bool acbias) > +{ > +#ifdef CONFIG_ARCH_OMAP3 > + int val = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1); > + > + if (bypass) > + val |= OMAP2_TVOUTBYPASS; > + else > + val &= ~OMAP2_TVOUTBYPASS; > + > + if (acbias) > + val |= OMAP2_TVACEN; > + else > + val &= ~OMAP2_TVACEN; > + > + omap_ctrl_writel(val, OMAP343X_CONTROL_DEVCONF1); > +#endif If this is truly a pinmux, you could already access this using pinctrl-single,bits device tree driver. But I guess that won't work yet, so it's best to set this up as a separate driver like we've done for the USB PHY registers. Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Tony, On Mon, Nov 11, 2013 at 5:49 PM, Tony Lindgren <tony@atomide.com> wrote: > * Marek Belisko <marek@goldelico.com> [131014 14:11]: >> devconf1 reg access is localized only in mach-omap2 and we need to export >> updating of devconf1 from omapdss venc driver (bypass and acbias bits). >> Add simple api call which update only necessary bits. > ... > >> +void update_bypass_acbias(bool bypass, bool acbias) >> +{ >> +#ifdef CONFIG_ARCH_OMAP3 >> + int val = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1); >> + >> + if (bypass) >> + val |= OMAP2_TVOUTBYPASS; >> + else >> + val &= ~OMAP2_TVOUTBYPASS; >> + >> + if (acbias) >> + val |= OMAP2_TVACEN; >> + else >> + val &= ~OMAP2_TVACEN; >> + >> + omap_ctrl_writel(val, OMAP343X_CONTROL_DEVCONF1); >> +#endif > > If this is truly a pinmux, you could already access this > using pinctrl-single,bits device tree driver. > > But I guess that won't work yet, so it's best to set this > up as a separate driver like we've done for the USB PHY > registers. Can you please point me to that driver directly? I cannot see benefit of new driver as as it will be only dummy driver with export_symbol_gpl of upper function. Can it sit then in dss directory or somewhere else? Thanks. > > Regards, > > Tony BR, marek
Hi Tony, On Mon, Nov 11, 2013 at 5:49 PM, Tony Lindgren <tony@atomide.com> wrote: > * Marek Belisko <marek@goldelico.com> [131014 14:11]: >> devconf1 reg access is localized only in mach-omap2 and we need to export >> updating of devconf1 from omapdss venc driver (bypass and acbias bits). >> Add simple api call which update only necessary bits. > ... > >> +void update_bypass_acbias(bool bypass, bool acbias) >> +{ >> +#ifdef CONFIG_ARCH_OMAP3 >> + int val = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1); >> + >> + if (bypass) >> + val |= OMAP2_TVOUTBYPASS; >> + else >> + val &= ~OMAP2_TVOUTBYPASS; >> + >> + if (acbias) >> + val |= OMAP2_TVACEN; >> + else >> + val &= ~OMAP2_TVACEN; >> + >> + omap_ctrl_writel(val, OMAP343X_CONTROL_DEVCONF1); >> +#endif > > If this is truly a pinmux, you could already access this > using pinctrl-single,bits device tree driver. AFAIK it's not pinmux it's register where we update bits. Or am I missing something? > > But I guess that won't work yet, so it's best to set this > up as a separate driver like we've done for the USB PHY > registers. > > Regards, > > Tony BR, marek
* Belisko Marek <marek.belisko@gmail.com> [131111 14:01]: > Hi Tony, > > On Mon, Nov 11, 2013 at 5:49 PM, Tony Lindgren <tony@atomide.com> wrote: > > * Marek Belisko <marek@goldelico.com> [131014 14:11]: > >> devconf1 reg access is localized only in mach-omap2 and we need to export > >> updating of devconf1 from omapdss venc driver (bypass and acbias bits). > >> Add simple api call which update only necessary bits. > > ... > > > >> +void update_bypass_acbias(bool bypass, bool acbias) > >> +{ > >> +#ifdef CONFIG_ARCH_OMAP3 > >> + int val = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1); > >> + > >> + if (bypass) > >> + val |= OMAP2_TVOUTBYPASS; > >> + else > >> + val &= ~OMAP2_TVOUTBYPASS; > >> + > >> + if (acbias) > >> + val |= OMAP2_TVACEN; > >> + else > >> + val &= ~OMAP2_TVACEN; > >> + > >> + omap_ctrl_writel(val, OMAP343X_CONTROL_DEVCONF1); > >> +#endif > > > > If this is truly a pinmux, you could already access this > > using pinctrl-single,bits device tree driver. > > > > But I guess that won't work yet, so it's best to set this > > up as a separate driver like we've done for the USB PHY > > registers. > > Can you please point me to that driver directly? I cannot see benefit > of new driver as as it will be only dummy driver > with export_symbol_gpl of upper function. Can it sit then in dss > directory or somewhere else? Thanks. You can take a look at drivers/usb/phy/phy-omap-control.c. Then there's a device tree using example for control_devconf0 in Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt. Looks like CONTROL_DEVCONF1 contains a bunch of misc registers, and arch/arm/mach-omap2/hsmmc.c seems to be tinkering with it too. It would be best to set it up as omap-ctrl.c driver under drivers somewhere with few functions exported for DSS and MMC drivers. The reason why it should be a separate driver is that the system control module can live a separate runtime PM life from the drivers using the CONTROL_DEVCONF register bits. Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
* Belisko Marek <marek.belisko@gmail.com> [131111 14:21]: > AFAIK it's not pinmux it's register where we update bits. Or am I > missing something? Most of the omap control module registers seem to affect either external pin configuration or internal signal muxes. So a big chunk of them can already be handled with pinctrl-single,bits for device tree. But some of the control module registers also have regulator and clock like features, and those are better exposed as regulators and clocks to the consumer drivers. Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index afb457c..15e0f28 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -306,3 +306,5 @@ emac-$(CONFIG_TI_DAVINCI_EMAC) := am35xx-emac.o obj-y += $(emac-m) $(emac-y) obj-y += common-board-devices.o twl-common.o dss-common.o + +obj-$(CONFIG_ARCH_OMAP3) += omap3-tvout.o diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index f7d7c2e..65277f1 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h @@ -279,6 +279,8 @@ /* CONTROL_DEVCONF1 bits */ #define OMAP243X_MMC1_ACTIVE_OVERWRITE (1 << 31) +#define OMAP2_TVOUTBYPASS (1 << 18) +#define OMAP2_TVACEN (1 << 11) #define OMAP2_MMCSDIO2ADPCLKISEL (1 << 6) /* MMC2 loop back clock */ #define OMAP2_MCBSP5_CLKS_MASK (1 << 4) /* > 242x */ #define OMAP2_MCBSP4_CLKS_MASK (1 << 2) /* > 242x */ diff --git a/arch/arm/mach-omap2/omap3-tvout.c b/arch/arm/mach-omap2/omap3-tvout.c new file mode 100644 index 0000000..eaed225 --- /dev/null +++ b/arch/arm/mach-omap2/omap3-tvout.c @@ -0,0 +1,36 @@ +/* + * linux/arch/arm/mach-omap2/omap3-tvout.c + * + * Copyright (C) 2013 Golden Delicious Computers + * Author: Marek Belisko <marek@goldelico.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/kernel.h> +#include <linux/omap-tvout.h> + +#include "soc.h" +#include "control.h" + +void update_bypass_acbias(bool bypass, bool acbias) +{ +#ifdef CONFIG_ARCH_OMAP3 + int val = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1); + + if (bypass) + val |= OMAP2_TVOUTBYPASS; + else + val &= ~OMAP2_TVOUTBYPASS; + + if (acbias) + val |= OMAP2_TVACEN; + else + val &= ~OMAP2_TVACEN; + + omap_ctrl_writel(val, OMAP343X_CONTROL_DEVCONF1); +#endif +} + diff --git a/include/linux/omap-tvout.h b/include/linux/omap-tvout.h new file mode 100644 index 0000000..25f676d --- /dev/null +++ b/include/linux/omap-tvout.h @@ -0,0 +1,14 @@ +/* + * OMAP TV-out support + * + * 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. + */ +#ifndef __LINUX_OMAP_TVOUT_H +#define __LINUX_OMAP_TVOUT_H + +extern void update_bypass_acbias(bool bypass, bool acbias); + +#endif +
devconf1 reg access is localized only in mach-omap2 and we need to export updating of devconf1 from omapdss venc driver (bypass and acbias bits). Add simple api call which update only necessary bits. Signed-off-by: Marek Belisko <marek@goldelico.com> --- arch/arm/mach-omap2/Makefile | 2 ++ arch/arm/mach-omap2/control.h | 2 ++ arch/arm/mach-omap2/omap3-tvout.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/omap-tvout.h | 14 ++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 arch/arm/mach-omap2/omap3-tvout.c create mode 100644 include/linux/omap-tvout.h