[PATCH] media: omap3isp: fix format string warning

2011-05-29 Thread Ohad Ben-Cohen
Trivially fix this:

drivers/media/video/omap3isp/isp.c: In function 'isp_isr_dbg':
drivers/media/video/omap3isp/isp.c:394: warning: zero-length gnu_printf format 
string

Signed-off-by: Ohad Ben-Cohen o...@wizery.com
---
 drivers/media/video/omap3isp/isp.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap3isp/isp.c 
b/drivers/media/video/omap3isp/isp.c
index 472a693..a0d5e69 100644
--- a/drivers/media/video/omap3isp/isp.c
+++ b/drivers/media/video/omap3isp/isp.c
@@ -391,7 +391,7 @@ static inline void isp_isr_dbg(struct isp_device *isp, u32 
irqstatus)
};
int i;
 
-   dev_dbg(isp-dev, );
+   dev_dbg(isp-dev, %s\n, __func__);
 
for (i = 0; i  ARRAY_SIZE(name); i++) {
if ((1  i)  irqstatus)
-- 
1.7.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


Re: [RFC][PATCH 3/9] OMAP4460: HWMOD: DO not reset GPIO1 during HWMOD init

2011-05-29 Thread Steve Calfee
On Fri, May 27, 2011 at 12:38 PM, Kevin Hilman khil...@ti.com wrote:
 Cousson, Benoit b-cous...@ti.com writes:

 [...]

 In general we do not want to reset nor idle an IP that was potentially
 already properly configured by bootloader or early Linux boot code.

 Actually, the opposite is true.

 The kernel should not make any assumptions about what the bootloader has
 or has not done.  We need to have a kernel that can boot from any
 bootloader (or none, like using kexec) and be able to start from a known
 hardware state.

YES. Bootloaders should only do what is necessary (set clocks, enable
memories etc) to load the next stage. Pushing stuff that should be in
the kernel into the bootloader (like iniiting gpios and other things)
bloats it and makes a developer deal with two entirely different
source trees (kernel and booterx) to enable a new feature or to fix
bugs.

Uboot tends to lag the kernel in capabilities too, probably because
fewer developers or something. For instance Beagleboard xm uboot
cannot access the ethernet because it is usb based, and uboot cannot
access its own environment in flash - because it is running from a new
microsd based flash system. U-boot will eventually catch up with
these, but by then other new hardware will be available.

Does anyone know if 2.6.39 has kexec working again for the kernel? NFS
boot is a dream development environment but with both u-boot and kexec
not working with nfs, it is slightly more work and less automated.

Regards, Steve
--
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


[pm_wip/voltdm_nm][PATCH v2 0/4] OMAP4: PM: Voltage cleanups

2011-05-29 Thread Nishanth Menon
The following patches are on top of:
git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm.git
branch: pm-wip/voltdm_nm

Tested on: SDP4430

This is v2 of the series (of which most of the patches were incorporated)
Dropped patches:
http://marc.info/?l=linux-omapm=130570864519114w=2
- Agree that we should wait for regulators
Pending:
http://marc.info/?l=linux-omapm=130569587107997w=2
- I have a bunch of scope pictures and xls
 from which this data was created, so no equation yet available.
Updated patches:
http://marc.info/?l=linux-omapm=130569587007994w=2 - review comments

v1: http://marc.info/?l=linux-omapm=130569586007964w=2

Nishanth Menon (3):
  OMAP4: PM: VC: fix channel bit offset for MPU
  OMAP4: PM: VC: introduce concept of default channel
  OMAP4: PM: VC: make omap_vc_i2c_init static

 arch/arm/mach-omap2/vc.c  |   82 ++---
 arch/arm/mach-omap2/vc.h  |   37 +++-
 arch/arm/mach-omap2/vc3xxx_data.c |   11 +
 arch/arm/mach-omap2/vc44xx_data.c |   22 ++
 arch/arm/mach-omap2/voltage.h |9 
 5 files changed, 125 insertions(+), 36 deletions(-)

Regards,
Nishanth Menon
--
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


[pm_wip/voltdm_nm][PATCH v2 1/3] OMAP4: PM: VC: fix channel bit offset for MPU

2011-05-29 Thread Nishanth Menon
Patch OMAP3+: VC: abstract out channel configuration abstracts out
VC channel configuration. However, TRM has it's little surprises such
as the following for channel_cfg:
CFG_CHANNEL_SABIT(0)
CFG_CHANNEL_RAV   BIT(1)
CFG_CHANNEL_RAC   BIT(2)
CFG_CHANNEL_RACEN BIT(3)
CFG_CHANNEL_CMD   BIT(4)
is valid for core and iva, *but* for mpu, the channel offsets are as follows:
CFG_CHANNEL_SABIT(0)
CFG_CHANNEL_CMD   BIT(1)
CFG_CHANNEL_RAV   BIT(2)
CFG_CHANNEL_RAC   BIT(3)
CFG_CHANNEL_RACEN BIT(4)

To handle this on the fly, add a structure to describe this and use the
structure for vc definition.

Signed-off-by: Nishanth Menon n...@ti.com
---
 arch/arm/mach-omap2/vc.c  |   30 ++
 arch/arm/mach-omap2/vc.h  |   29 +
 arch/arm/mach-omap2/vc3xxx_data.c |   11 +++
 arch/arm/mach-omap2/vc44xx_data.c |   21 +
 4 files changed, 75 insertions(+), 16 deletions(-)

diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index fba352d..6437460 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -10,18 +10,6 @@
 #include prm-regbits-44xx.h
 #include prm44xx.h
 
-/*
- * Channel configuration bits, common for OMAP3  4
- * OMAP3 register: PRM_VC_CH_CONF
- * OMAP4 register: PRM_VC_CFG_CHANNEL
- */
-#define CFG_CHANNEL_SABIT(0)
-#define CFG_CHANNEL_RAV   BIT(1)
-#define CFG_CHANNEL_RAC   BIT(2)
-#define CFG_CHANNEL_RACEN BIT(3)
-#define CFG_CHANNEL_CMD   BIT(4)
-#define CFG_CHANNEL_MASK 0x3f
-
 /**
  * omap_vc_config_channel - configure VC channel to PMIC mappings
  * @voltdm: pointer to voltagdomain defining the desired VC channel
@@ -249,6 +237,7 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
 {
struct omap_vc_channel *vc = voltdm-vc;
u8 on_vsel, onlp_vsel, ret_vsel, off_vsel;
+   struct omap_vc_channel_cfg *cfg_channel_data;
u32 val;
 
if (!voltdm-pmic || !voltdm-pmic-uv_to_vsel) {
@@ -264,6 +253,14 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
return;
}
 
+   /* Ensure we have VC channel data */
+   if (!vc-cfg_ch_bits) {
+   pr_err(%s: No CFG Channel data for vdd_%s regs\n,
+   __func__, voltdm-name);
+   return;
+   }
+   cfg_channel_data = vc-cfg_ch_bits;
+
vc-cfg_channel = 0;
 
/* get PMIC/board specific settings */
@@ -276,7 +273,7 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
voltdm-rmw(vc-smps_sa_mask,
vc-i2c_slave_addr  __ffs(vc-smps_sa_mask),
vc-common-smps_sa_reg);
-   vc-cfg_channel |= CFG_CHANNEL_SA;
+   vc-cfg_channel |= cfg_channel_data-sa;
 
/*
 * Configure the PMIC register addresses.
@@ -284,13 +281,14 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
voltdm-rmw(vc-smps_volra_mask,
vc-volt_reg_addr  __ffs(vc-smps_volra_mask),
vc-common-smps_volra_reg);
-   vc-cfg_channel |= CFG_CHANNEL_RAV;
+   vc-cfg_channel |= cfg_channel_data-rav;
 
if (vc-cmd_reg_addr) {
voltdm-rmw(vc-smps_cmdra_mask,
vc-cmd_reg_addr  __ffs(vc-smps_cmdra_mask),
vc-common-smps_cmdra_reg);
-   vc-cfg_channel |= CFG_CHANNEL_RAC | CFG_CHANNEL_RACEN;
+   vc-cfg_channel |= cfg_channel_data-rac |
+   cfg_channel_data-racen;
}
 
/* Set up the on, inactive, retention and off voltage */
@@ -303,7 +301,7 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
   (ret_vsel  vc-common-cmd_ret_shift) |
   (off_vsel  vc-common-cmd_off_shift));
voltdm-write(val, vc-cmdval_reg);
-   vc-cfg_channel |= CFG_CHANNEL_CMD;
+   vc-cfg_channel |= cfg_channel_data-cmd;
 
/* Channel configuration */
omap_vc_config_channel(voltdm);
diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
index f0fb61f..2538089 100644
--- a/arch/arm/mach-omap2/vc.h
+++ b/arch/arm/mach-omap2/vc.h
@@ -62,11 +62,39 @@ struct omap_vc_common {
u8 i2c_mcode_mask;
 };
 
+/*
+ * Channel configuration bits, common for OMAP3  4
+ * OMAP3 register: PRM_VC_CH_CONF
+ * OMAP4 register: PRM_VC_CFG_CHANNEL
+ */
+#define CFG_CHANNEL_SABIT(0)
+#define CFG_CHANNEL_RAV   BIT(1)
+#define CFG_CHANNEL_RAC   BIT(2)
+#define CFG_CHANNEL_RACEN BIT(3)
+#define CFG_CHANNEL_CMD   BIT(4)
+#define CFG_CHANNEL_MASK 0x3f
+/**
+ * struct omap_vc_channel_cfg - describe the cfg_channel bitfield
+ * @sa:SA_VDD_xxx_L
+ * @rav:   RAV_VDD_xxx_L
+ * @rac:   RAC_VDD_xxx_L
+ * @racen: RACEN_VDD_xxx_L
+ * @cmd:   CMD_VDD_xxx_L
+ */
+struct omap_vc_channel_cfg {
+   u8 sa;
+   u8 rav;
+   u8 rac;
+   u8 racen;
+   u8 cmd;
+};
+
 /**
  * struct omap_vc_channel - VC 

[pm_wip/voltdm_nm][PATCH v2 2/3] OMAP4: PM: VC: introduce concept of default channel

2011-05-29 Thread Nishanth Menon
Due to a TRM bug, the current code assumes that channel0(core) is the default
channel. With the additional explanation provided by the hardware team, it is
clear that PRM_VC_CFG_CHANNEL register allows for flexibility of configuring
for various PMIC configurations. For example, the I2C slave address on TWL6030
when using 4430 configuration could potentially use the same slave address for
all domains, while in 4460 configuration, we drive MPU using TPS; Core and IVA
using TWL6030. To allow this flexibility, we state in existing parameters using
a flag to indicate usage of default channel.

In addition, the TRM update clears up the confusion on the fact that MPU is
infact the default channel on OMAP4.

We update the same here.

Signed-off-by: Nishanth Menon n...@ti.com
---
 arch/arm/mach-omap2/vc.c  |   58 -
 arch/arm/mach-omap2/vc.h  |8 +++--
 arch/arm/mach-omap2/vc44xx_data.c |1 +
 arch/arm/mach-omap2/voltage.h |9 ++
 4 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 6437460..42c77a8 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -22,20 +22,20 @@
  * - command values for ON, ONLP, RET and OFF (CMD)
  *
  * This function currently only allows flexible configuration of
- * the non-default channel (e.g. non-zero channels.)  Starting with
- * OMAP4, only the non-zero channels can be configured.  Channel zero
- * always uses the channel zero register values.  Therefore, the
- * same limitation is imposed on OMAP3 for consistency.
+ * the non-default channels.  Introduced in OMAP4, is a concept of a default
+ * channel - in OMAP4, this channel is MPU, all other domains could optionally
+ * link their i2c regs to use MPU channel's configuration if required.
  */
 static int omap_vc_config_channel(struct voltagedomain *voltdm)
 {
struct omap_vc_channel *vc = voltdm-vc;
 
/*
-* For channel zero, the only configurable bit is RACEN.
-* All others must stay at zero (see function comment above.)
+* For default channel, the only configurable bit is RACEN.
+* All others default channel bits stays at zero
+* (see function comment above.)
 */
-   if (!vc-cfg_channel_sa_shift)
+   if (vc-is_default_channel)
vc-cfg_channel = CFG_CHANNEL_RACEN;
 
voltdm-rmw(CFG_CHANNEL_MASK  vc-cfg_channel_sa_shift,
@@ -261,6 +261,18 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
}
cfg_channel_data = vc-cfg_ch_bits;
 
+   /* Dont proceed if channel configurations are messed up */
+   if (vc-is_default_channel 
+   (vc-i2c_slave_addr == USE_DEFAULT_CHANNEL_I2C_PARAM ||
+vc-cmd_reg_addr == USE_DEFAULT_CHANNEL_I2C_PARAM ||
+vc-volt_reg_addr == USE_DEFAULT_CHANNEL_I2C_PARAM)) {
+   pr_err(%s: Voltage Domain %s is default.INVALID CONFIGURATION:
+   slave_add = %04x cmd=%04x vol=%04x!\n,
+   __func__, voltdm-name, vc-i2c_slave_addr,
+   vc-cmd_reg_addr, vc-volt_reg_addr);
+   return;
+   }
+
vc-cfg_channel = 0;
 
/* get PMIC/board specific settings */
@@ -269,26 +281,32 @@ void __init omap_vc_init_channel(struct voltagedomain 
*voltdm)
vc-cmd_reg_addr = voltdm-pmic-cmd_reg_addr;
vc-setup_time = voltdm-pmic-volt_setup_time;
 
-   /* Configure the i2c slave address for this VC */
-   voltdm-rmw(vc-smps_sa_mask,
-   vc-i2c_slave_addr  __ffs(vc-smps_sa_mask),
-   vc-common-smps_sa_reg);
-   vc-cfg_channel |= cfg_channel_data-sa;
+   /* Configure the I2C slave address for this VC */
+   if (vc-i2c_slave_addr != USE_DEFAULT_CHANNEL_I2C_PARAM) {
+   voltdm-rmw(vc-smps_sa_mask,
+   vc-i2c_slave_addr  __ffs(vc-smps_sa_mask),
+   vc-common-smps_sa_reg);
+   vc-cfg_channel |= cfg_channel_data-sa;
+   }
 
/*
 * Configure the PMIC register addresses.
 */
-   voltdm-rmw(vc-smps_volra_mask,
-   vc-volt_reg_addr  __ffs(vc-smps_volra_mask),
-   vc-common-smps_volra_reg);
-   vc-cfg_channel |= cfg_channel_data-rav;
-
-   if (vc-cmd_reg_addr) {
+   if (vc-cmd_reg_addr != USE_DEFAULT_CHANNEL_I2C_PARAM) {
voltdm-rmw(vc-smps_cmdra_mask,
vc-cmd_reg_addr  __ffs(vc-smps_cmdra_mask),
vc-common-smps_cmdra_reg);
-   vc-cfg_channel |= cfg_channel_data-rac |
-   cfg_channel_data-racen;
+   vc-cfg_channel |= cfg_channel_data-rac;
+   }
+
+   /* if voltage and cmd regs are same, we can use cmdra register */
+   if (vc-volt_reg_addr == vc-cmd_reg_addr) {
+   

[pm_wip/voltdm_nm][PATCH v2 3/3] OMAP4: PM: VC: make omap_vc_i2c_init static

2011-05-29 Thread Nishanth Menon
The only user of omap_vc_i2c_init is vc.c itself, makes
no reason for us to expose it out.

This also fixes the sparse warning:
arch/arm/mach-omap2/vc.c:207:13: warning: symbol 'omap_vc_i2c_init' was not 
declared. Should it be static?

Signed-off-by: Nishanth Menon n...@ti.com
---
 arch/arm/mach-omap2/vc.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 42c77a8..d0b52cc 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -204,7 +204,7 @@ static void __init omap4_vc_init_channel(struct 
voltagedomain *voltdm)
  * channel registers.  All other VC channels will use the
  * same configuration.
  */
-void __init omap_vc_i2c_init(struct voltagedomain *voltdm)
+static void __init omap_vc_i2c_init(struct voltagedomain *voltdm)
 {
struct omap_vc_channel *vc = voltdm-vc;
static bool initialized;
-- 
1.7.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


Re: [PATCHv2 2/2] OMAP: add omap_device_reset()

2011-05-29 Thread Paul Walmsley
On Fri, 27 May 2011, Tomi Valkeinen wrote:

 However, VENC doesn't use the standard syscontrol mechanism, so that 
 cannot be done via omap_device interface anyway.

struct omap_hwmod_class has a .reset function pointer for this purpose.  
It's already been necessary to deal with the I2C IP block:

   https://patchwork.kernel.org/patch/804072/

If all that's needed are the steps in 4430 TRM Rev. T Section 10.6.5.1.2.3 
Subsequence--Video Encoder Software Reset, then it should be possible to 
handle this internal reset with hwmod code.

- Paul
--
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: [PATCHv2 2/2] OMAP: add omap_device_reset()

2011-05-29 Thread Paul Walmsley
Hi Tomi,

On Fri, 27 May 2011, Tomi Valkeinen wrote:

 DSS driver has been designed so that it resets the HW before it begins
 programming it. That way we get the HW into known state. Otherwise we
 need to be extra careful to program all possible registers to a sane
 value. Not impossible, of course, but requires extra work.
 
 I noticed the problem with DSI driver, it didn't work anymore if I
 didn't reset it.

One thing that I don't quite understand about this thread is that the 
hwmod code should be resetting the DSS hwmods when the system boots.  Is 
something not working with this process?

That is a separate case from the error recovery case.  Sounds like we may 
need to expose a reset function for that purpose as well.  Tomi, I don't 
think your proposed patch is enough for this, though: we'd also need to 
reset the hwmod internal state for that module, and reprogram the 
SYSCONFIG bits, etc. as mach-omap2/omap_hwmod.c:_setup() does.


- Paul
--
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


[pm_wip/voltdm_nm][PATCH] OMAP3+: PM: VC: support configuring PMIC over I2C_SR

2011-05-29 Thread Nishanth Menon
Many simpler PMICs such as TPS65023 as discussed in:
http://marc.info/?t=129848405600010r=1w=2

With a single I2C interface do still have configuration registers that
may need population. Typical being slew rate, thermal shutdown
configuration etc. These devices are typically hooked on Application
Processor's(AP) standard I2C busses. Unfortunately, when hooked on
I2C_SR, unlike the standard I2C framework, we cannot read using
Voltage controller, but we can definitely write to them. Hence
for using PMICs such as these and others such as those used with
OMAP4460, it is imperative that we provide a hook to support the
device configuration.

To reuse code, we split the existing vc_bypass command into a reusable
subfunction which we use from both vc_bypass and the new function.

Signed-off-by: Nishanth Menon n...@ti.com
---
 arch/arm/mach-omap2/vc.c |   91 --
 arch/arm/mach-omap2/vc.h |2 +
 2 files changed, 81 insertions(+), 12 deletions(-)

diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 0b4d533..6f445e8 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -102,30 +102,29 @@ void omap_vc_post_scale(struct voltagedomain *voltdm,
voltdm-curr_volt = target_volt;
 }
 
-/* vc_bypass_scale_voltage - VC bypass method of voltage scaling */
-int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm,
-unsigned long target_volt)
+static int omap_vc_bypass_send_value(struct voltagedomain *voltdm,
+   struct omap_vc_channel *vc, u8 sa, u8 reg, u32 data)
 {
-   struct omap_vc_channel *vc = voltdm-vc;
u32 loop_cnt = 0, retries_cnt = 0;
u32 vc_valid, vc_bypass_val_reg, vc_bypass_value;
-   u8 target_vsel, current_vsel;
-   int ret;
 
-   ret = omap_vc_pre_scale(voltdm, target_volt, target_vsel, 
current_vsel);
-   if (ret)
-   return ret;
+   if (IS_ERR_OR_NULL(vc-common)) {
+   pr_err(%s voldm=%s bad value for vc-common\n,
+   __func__, voltdm-name);
+   return -EINVAL;
+   }
 
vc_valid = vc-common-valid;
vc_bypass_val_reg = vc-common-bypass_val_reg;
-   vc_bypass_value = (target_vsel  vc-common-data_shift) |
-   (vc-volt_reg_addr  vc-common-regaddr_shift) |
-   (vc-i2c_slave_addr  vc-common-slaveaddr_shift);
+   vc_bypass_value = (data  vc-common-data_shift) |
+   (reg  vc-common-regaddr_shift) |
+   (sa  vc-common-slaveaddr_shift);
 
voltdm-write(vc_bypass_value, vc_bypass_val_reg);
voltdm-write(vc_bypass_value | vc_valid, vc_bypass_val_reg);
 
vc_bypass_value = voltdm-read(vc_bypass_val_reg);
+
/*
 * Loop till the bypass command is acknowledged from the SMPS.
 * NOTE: This is legacy code. The loop count and retry count needs
@@ -147,10 +146,78 @@ int omap_vc_bypass_scale_voltage(struct voltagedomain 
*voltdm,
vc_bypass_value = voltdm-read(vc_bypass_val_reg);
}
 
+   return 0;
+
+}
+
+/* vc_bypass_scale_voltage - VC bypass method of voltage scaling */
+int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm,
+unsigned long target_volt)
+{
+   struct omap_vc_channel *vc;
+   u8 target_vsel, current_vsel;
+   int ret;
+
+   if (IS_ERR_OR_NULL(voltdm)) {
+   pr_err(%s bad voldm\n, __func__);
+   return -EINVAL;
+   }
+
+   vc = voltdm-vc;
+   if (IS_ERR_OR_NULL(vc)) {
+   pr_err(%s voldm=%s bad vc\n, __func__, voltdm-name);
+   return -EINVAL;
+   }
+
+   ret = omap_vc_pre_scale(voltdm, target_volt, target_vsel, 
current_vsel);
+   if (ret)
+   return ret;
+
+   ret = omap_vc_bypass_send_value(voltdm, vc, vc-i2c_slave_addr,
+   vc-volt_reg_addr, target_vsel);
+   if (ret)
+   return ret;
+
omap_vc_post_scale(voltdm, target_volt, target_vsel, current_vsel);
return 0;
 }
 
+/**
+ * omap_vc_bypass_send_i2c_msg() - Function to control PMIC registers over 
SRI2C
+ * @voltdm:voltage domain
+ * @slave_addr:slave address of the device.
+ * @reg_addr:  register address to access
+ * @data:  what do we want to write there
+ *
+ * Many simpler PMICs with a single I2C interface still have configuration
+ * registers that may need population. Typical being slew rate configurations
+ * thermal shutdown configuration etc. When these PMICs are hooked on I2C_SR,
+ * this function allows these configuration registers to be accessed.
+ *
+ * WARNING: Though this could be used for voltage register configurations over
+ * I2C_SR, DONOT use it for that purpose, all the Voltage controller's internal
+ * information is bypassed using this function and must be used judiciously.
+ */
+int omap_vc_bypass_send_i2c_msg(struct 

Re: [PATCHv2 2/2] OMAP: add omap_device_reset()

2011-05-29 Thread Tomi Valkeinen
On Sun, 2011-05-29 at 20:24 -0600, Paul Walmsley wrote:
 Hi Tomi,
 
 On Fri, 27 May 2011, Tomi Valkeinen wrote:
 
  DSS driver has been designed so that it resets the HW before it begins
  programming it. That way we get the HW into known state. Otherwise we
  need to be extra careful to program all possible registers to a sane
  value. Not impossible, of course, but requires extra work.
  
  I noticed the problem with DSI driver, it didn't work anymore if I
  didn't reset it.
 
 One thing that I don't quite understand about this thread is that the 
 hwmod code should be resetting the DSS hwmods when the system boots.  Is 
 something not working with this process?

I believe that is working fine.

The problem appears when DSS is turned off (i.e. the screen is blanked)
and then started again. The driver has been written so that it will
reset the DSS HW before starting to use that particular DSS HW block, to
get a clean state. Remove that reset, and we've got all the old register
values lying around, causing the device to malfunction.

This should be fixable in the driver, of course, although my experience
with DSI (and DSS in general) shows that it's not always very easy to
stop and restart the HW without a reset.

However, I'd still argue that a driver is more robust if it does do a
reset when starting up the HW. Perhaps the driver should be developed
without that reset, but in the production device the reset should give
us extra protection for unexpected situations.

 That is a separate case from the error recovery case.  Sounds like we may 
 need to expose a reset function for that purpose as well.  Tomi, I don't 
 think your proposed patch is enough for this, though: we'd also need to 
 reset the hwmod internal state for that module, and reprogram the 
 SYSCONFIG bits, etc. as mach-omap2/omap_hwmod.c:_setup() does.

Ah, ok, sounds right. It worked for me, but I probably wouldn't notice
if the PM bits in SYSCONFIG are wrong, as I didn't do any PM testing.

 Tomi


--
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