summaryrefslogtreecommitdiff
path: root/nuttx/drivers
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-05-12 13:00:19 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-05-12 13:00:19 +0000
commit4573308f42bec2514e2edfae7d9a39b05d5f8a23 (patch)
tree5343e9e7ff039b8b0162142e590a45224edb0c78 /nuttx/drivers
parent8df9f66e89d5dd5dcbe6d669d3655f4db3c4405e (diff)
downloadpx4-nuttx-4573308f42bec2514e2edfae7d9a39b05d5f8a23.tar.gz
px4-nuttx-4573308f42bec2514e2edfae7d9a39b05d5f8a23.tar.bz2
px4-nuttx-4573308f42bec2514e2edfae7d9a39b05d5f8a23.zip
Add power methods
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2666 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers')
-rwxr-xr-xnuttx/drivers/lcd/p14201.c62
1 files changed, 56 insertions, 6 deletions
diff --git a/nuttx/drivers/lcd/p14201.c b/nuttx/drivers/lcd/p14201.c
index 0ab7a8dbf..e23326820 100755
--- a/nuttx/drivers/lcd/p14201.c
+++ b/nuttx/drivers/lcd/p14201.c
@@ -96,7 +96,19 @@
#endif
#if CONFIG_LCD_MAXCONTRAST > 255
-# error "CONFIG_LCD_MAXCONTRAST exceed supported maximum"
+# error "CONFIG_LCD_MAXCONTRAST exceeds supported maximum"
+#endif
+
+/* Check power setting */
+
+#if !defined(CONFIG_LCD_MAXPOWER)
+# define CONFIG_LCD_MAXPOWER 1
+#endif
+
+#if CONFIG_LCD_MAXCONTRAST > 1
+# warning "CONFIG_LCD_MAXPOWER exceeds supported maximum"
+# undef CONFIG_LCD_MAXPOWER
+# define CONFIG_LCD_MAXPOWER 1
#endif
/* Define the following to enable register-level debug output */
@@ -155,6 +167,7 @@ struct rit_dev_s
struct lcd_dev_s dev; /* Publically visible device structure */
FAR struct spi_dev_s *spi; /* Cached SPI device reference */
uint8_t contrast; /* Current contrast setting */
+ bool on; /* true: display is on */
};
/**************************************************************************************
@@ -309,11 +322,25 @@ static const uint8_t g_initcmds[] =
3, SSD1329_PRECHRG1_VOLT, /* Set First Precharge voltage, VP */
0x3f, /* 1.00 x Vcc */
SSD1329_NOOP,
- 2, SSD1329_SLEEP_OFF, /* Matrix display ON */
- SSD1329_NOOP,
0 /* Zero length command terminates table */
};
+/* Turn the maxtrix display on (sleep mode off) */
+
+static const uint8_t g_sleepoff[] =
+{
+ SSD1329_SLEEP_OFF, /* Matrix display ON */
+ SSD1329_NOOP,
+};
+
+/* Turn the maxtrix display off (sleep mode on) */
+
+static const uint8_t g_sleepon[] =
+{
+ SSD1329_SLEEP_ON, /* Matrix display OFF */
+ SSD1329_NOOP,
+};
+
/**************************************************************************************
* Private Functions
**************************************************************************************/
@@ -458,7 +485,7 @@ static void rit_sndbytes(FAR struct spi_dev_s *spi, FAR const uint8_t *buffer,
/* Clear the D/Cn bit to enable command mode */
- oled_data(spi, data);
+ rit_seldata(spi, data);
/* Loop until the entire command is transferred */
@@ -472,7 +499,6 @@ static void rit_sndbytes(FAR struct spi_dev_s *spi, FAR const uint8_t *buffer,
/* Send a dummy byte */
(void)SPI_SEND(spi, 0xff);
-
}
/* De-select the SD1329 controller */
@@ -614,7 +640,11 @@ static int rit_getplaneinfo(FAR struct lcd_dev_s *dev, unsigned int planeno,
static int rit_getpower(struct lcd_dev_s *dev)
{
- return -ENOSYS; /* Not implemented */
+ struct rit_dev_s *priv = (struct rit_dev_s *)dev;
+ DEBUGASSERT(priv);
+
+ gvdbg("power: %s\n", priv->on ? "ON" : "OFF");
+ return (int)priv->on;
}
/**************************************************************************************
@@ -628,7 +658,26 @@ static int rit_getpower(struct lcd_dev_s *dev)
static int rit_setpower(struct lcd_dev_s *dev, int power)
{
+ struct rit_dev_s *priv = (struct rit_dev_s *)dev;
+ DEBUGASSERT(priv && (unsigned)power <= CONFIG_LCD_MAXPOWER && priv->spi);
+
gvdbg("power: %d\n", power);
+ if (power > 0)
+ {
+ /* Re-initialize the SSD1329 controller */
+
+ rit_sndcmds(priv->spi, g_initcmds);
+
+ /* Take the display out of sleep mode */
+
+ rit_sndcmd(priv->spi, g_sleepoff, sizeof(g_sleepon));
+ }
+ else
+ {
+ /* Put the display into sleep mode */
+
+ rit_sndcmd(priv->spi, g_sleepon, sizeof(g_sleepon));
+ }
return -ENOSYS; /* Not implemented */
}
@@ -716,6 +765,7 @@ FAR struct lcd_dev_s *rit_initialize(FAR struct spi_dev_s *spi, int devno)
priv->dev.setcontrast = rit_setcontrast;
priv->spi = spi;
priv->contrast = RIT_CONTRAST;
+ priv->on = false;
return &priv->dev;
}
return NULL;