Re: [PATCH v4] media: soc_camera: rcar_vin: Add BT.709 24-bit RGB888 input support

2014-11-12 Thread Simon Horman
On Sat, Nov 01, 2014 at 12:06:38AM +0900, Yoshihiro Kaneko wrote:
> From: Koji Matsuoka 
> 
> Signed-off-by: Koji Matsuoka 
> Signed-off-by: Simon Horman 
> Signed-off-by: Yoshihiro Kaneko 

Hi Guennadi,

this patch has been through a few revisions but this one seems
to make the reviewers happy. Could you take a look at it when you have
a chance?

> ---
> 
> This patch is against master branch of linuxtv.org/media_tree.git.
> 
> v4 [Yoshihiro Kaneko]
> * indent with a tab, not with spaces
> 
> v3 [Yoshihiro Kaneko]
> * fixes the detection of RGB input
> 
> v2 [Yoshihiro Kaneko]
> * remove unused definition as suggested by Sergei Shtylyov
> * use VNMC_INF_RGB888 directly instead of VNMC_INF_RGB_MASK as a bit-field
>   mask
> 
>  drivers/media/platform/soc_camera/rcar_vin.c | 15 +++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/media/platform/soc_camera/rcar_vin.c 
> b/drivers/media/platform/soc_camera/rcar_vin.c
> index 20defcb..7becec0 100644
> --- a/drivers/media/platform/soc_camera/rcar_vin.c
> +++ b/drivers/media/platform/soc_camera/rcar_vin.c
> @@ -74,6 +74,7 @@
>  #define VNMC_INF_YUV10_BT656 (2 << 16)
>  #define VNMC_INF_YUV10_BT601 (3 << 16)
>  #define VNMC_INF_YUV16   (5 << 16)
> +#define VNMC_INF_RGB888  (6 << 16)
>  #define VNMC_VUP (1 << 10)
>  #define VNMC_IM_ODD  (0 << 3)
>  #define VNMC_IM_ODD_EVEN (1 << 3)
> @@ -272,6 +273,10 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
>  
>   /* input interface */
>   switch (icd->current_fmt->code) {
> + case V4L2_MBUS_FMT_RGB888_1X24:
> + /* BT.601/BT.709 24-bit RGB-888 */
> + vnmc |= VNMC_INF_RGB888;
> + break;
>   case V4L2_MBUS_FMT_YUYV8_1X16:
>   /* BT.601/BT.1358 16bit YCbCr422 */
>   vnmc |= VNMC_INF_YUV16;
> @@ -331,6 +336,15 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
>   if (output_is_yuv)
>   vnmc |= VNMC_BPS;
>  
> + /*
> +  * The above assumes YUV input, toggle BPS for RGB input.
> +  * RGB inputs can be detected by checking that the most-significant
> +  * two bits of INF are set. This corresponds to the bits
> +  * set in VNMC_INF_RGB888.
> +  */
> + if ((vnmc & VNMC_INF_RGB888) == VNMC_INF_RGB888)
> + vnmc ^= VNMC_BPS;
> +
>   /* progressive or interlaced mode */
>   interrupts = progressive ? VNIE_FIE | VNIE_EFE : VNIE_EFE;
>  
> @@ -1013,6 +1027,7 @@ static int rcar_vin_get_formats(struct 
> soc_camera_device *icd, unsigned int idx,
>   case V4L2_MBUS_FMT_YUYV8_1X16:
>   case V4L2_MBUS_FMT_YUYV8_2X8:
>   case V4L2_MBUS_FMT_YUYV10_2X10:
> + case V4L2_MBUS_FMT_RGB888_1X24:
>   if (cam->extra_fmt)
>   break;
>  
> -- 
> 1.9.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


cron job: media_tree daily build: OK

2014-11-12 Thread Hans Verkuil
This message is generated daily by a cron job that builds media_tree for
the kernels and architectures in the list below.

Results of the daily build of media_tree:

date:   Thu Nov 13 04:00:16 CET 2014
git branch: test
git hash:   dd0a6fe2bc3055cd61e369f97982c88183b1f0a0
gcc version:i686-linux-gcc (GCC) 4.9.1
sparse version: v0.5.0-35-gc1c3f96
smatch version: 0.4.1-3153-g7d56ab3
host hardware:  x86_64
host os:3.17-2.slh.2-amd64

linux-git-arm-at91: OK
linux-git-arm-davinci: OK
linux-git-arm-exynos: OK
linux-git-arm-mx: OK
linux-git-arm-omap: OK
linux-git-arm-omap1: OK
linux-git-arm-pxa: OK
linux-git-blackfin: OK
linux-git-i686: OK
linux-git-m32r: OK
linux-git-mips: OK
linux-git-powerpc64: OK
linux-git-sh: OK
linux-git-x86_64: OK
linux-2.6.32.27-i686: OK
linux-2.6.33.7-i686: OK
linux-2.6.34.7-i686: OK
linux-2.6.35.9-i686: OK
linux-2.6.36.4-i686: OK
linux-2.6.37.6-i686: OK
linux-2.6.38.8-i686: OK
linux-2.6.39.4-i686: OK
linux-3.0.60-i686: OK
linux-3.1.10-i686: OK
linux-3.2.37-i686: OK
linux-3.3.8-i686: OK
linux-3.4.27-i686: OK
linux-3.5.7-i686: OK
linux-3.6.11-i686: OK
linux-3.7.4-i686: OK
linux-3.8-i686: OK
linux-3.9.2-i686: OK
linux-3.10.1-i686: OK
linux-3.11.1-i686: OK
linux-3.12.23-i686: OK
linux-3.13.11-i686: OK
linux-3.14.9-i686: OK
linux-3.15.2-i686: OK
linux-3.16-i686: OK
linux-3.17-i686: OK
linux-3.18-rc1-i686: OK
linux-2.6.32.27-x86_64: OK
linux-2.6.33.7-x86_64: OK
linux-2.6.34.7-x86_64: OK
linux-2.6.35.9-x86_64: OK
linux-2.6.36.4-x86_64: OK
linux-2.6.37.6-x86_64: OK
linux-2.6.38.8-x86_64: OK
linux-2.6.39.4-x86_64: OK
linux-3.0.60-x86_64: OK
linux-3.1.10-x86_64: OK
linux-3.2.37-x86_64: OK
linux-3.3.8-x86_64: OK
linux-3.4.27-x86_64: OK
linux-3.5.7-x86_64: OK
linux-3.6.11-x86_64: OK
linux-3.7.4-x86_64: OK
linux-3.8-x86_64: OK
linux-3.9.2-x86_64: OK
linux-3.10.1-x86_64: OK
linux-3.11.1-x86_64: OK
linux-3.12.23-x86_64: OK
linux-3.13.11-x86_64: OK
linux-3.14.9-x86_64: OK
linux-3.15.2-x86_64: OK
linux-3.16-x86_64: OK
linux-3.17-x86_64: OK
linux-3.18-rc1-x86_64: OK
apps: OK
spec-git: OK
sparse: WARNINGS
smatch: ERRORS

Detailed results are available here:

http://www.xs4all.nl/~hverkuil/logs/Thursday.log

Full logs are available here:

http://www.xs4all.nl/~hverkuil/logs/Thursday.tar.bz2

The Media Infrastructure API from this daily build is here:

http://www.xs4all.nl/~hverkuil/spec/media.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


color box, display box, corrugated box, color card, blister card, color sleeve, hang tag, label

2014-11-12 Thread Jinghao Printing - CHINA
Hi, this is David Wu from Shanghai, China.
We are a printing company, we can print color box, corrugated box,
label, hang tag etc.
Please let me know if you need these.

I will send you the website then.

Best regards,
David Wu
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC v7 3/3] Documentation: leds: Add description of LED Flash Class extension

2014-11-12 Thread Jacek Anaszewski
The documentation being added contains overall description of the
LED Flash Class and the related sysfs attributes.

Signed-off-by: Jacek Anaszewski 
Acked-by: Kyungmin Park 
Cc: Bryan Wu 
Cc: Richard Purdie 
---
 Documentation/leds/leds-class-flash.txt |   39 +++
 1 file changed, 39 insertions(+)
 create mode 100644 Documentation/leds/leds-class-flash.txt

diff --git a/Documentation/leds/leds-class-flash.txt 
b/Documentation/leds/leds-class-flash.txt
new file mode 100644
index 000..0164329
--- /dev/null
+++ b/Documentation/leds/leds-class-flash.txt
@@ -0,0 +1,39 @@
+
+Flash LED handling under Linux
+==
+
+Some LED devices support two modes - torch and flash. In order to enable
+support for flash LEDs CONFIG_LEDS_CLASS_FLASH symbol must be defined
+in the kernel config. A flash LED driver must register in the LED subsystem
+with led_classdev_flash_register to gain flash capabilities.
+
+Following sysfs attributes are exposed for controlling flash led devices:
+
+   - flash_brightness - flash LED brightness in microamperes (RW)
+   - max_flash_brightness - maximum available flash LED brightness (RO)
+   - indicator_brightness - privacy LED brightness in microamperes (RW)
+   - max_indicator_brightness - maximum privacy LED brightness in
+microamperes (RO)
+   - flash_timeout - flash strobe duration in microseconds (RW)
+   - max_flash_timeout - maximum available flash strobe duration (RO)
+   - flash_strobe - flash strobe state (RW)
+   - flash_fault - bitmask of flash faults that may have occurred,
+   possible flags are:
+   * 0x01 - flash controller voltage to the flash LED has exceeded
+the limit specific to the flash controller
+   * 0x02 - the flash strobe was still on when the timeout set by
+the user has expired; not all flash controllers may
+set this in all such conditions
+   * 0x04 - the flash controller has overheated
+   * 0x08 - the short circuit protection of the flash controller
+has been triggered
+   * 0x10 - current in the LED power supply has exceeded the limit
+specific to the flash controller
+   * 0x40 - flash controller voltage to the flash LED has been
+below the minimum limit specific to the flash
+   * 0x80 - the input voltage of the flash controller is below
+the limit under which strobing the flash at full
+current will not be possible. The condition persists
+until this flag is no longer set
+   * 0x100 - the temperature of the LED has exceeded its allowed
+ upper limit
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC v7 2/3] leds: Add LED Flash Class wrapper to LED subsystem

2014-11-12 Thread Jacek Anaszewski
Some LED devices support two operation modes - torch and flash.
This patch provides support for flash LED devices in the LED subsystem
by introducing new sysfs attributes and kernel internal interface.
The attributes being introduced are: flash_brightness, flash_strobe,
flash_timeout, max_flash_timeout, max_flash_brightness, flash_fault,
indicator_brightness and  max_indicator_brightness. All the flash
related features are placed in a separate module.

The modifications aim to be compatible with V4L2 framework requirements
related to the flash devices management. The design assumes that V4L2
sub-device can take of the LED class device control and communicate
with it through the kernel internal interface. When V4L2 Flash sub-device
file is opened, the LED class device sysfs interface is made
unavailable.

Signed-off-by: Jacek Anaszewski 
Acked-by: Kyungmin Park 
Cc: Bryan Wu 
Cc: Richard Purdie 
---
 drivers/leds/Kconfig|   11 +
 drivers/leds/Makefile   |1 +
 drivers/leds/led-class-flash.c  |  511 +++
 drivers/leds/led-class.c|4 +
 include/linux/led-class-flash.h |  229 ++
 include/linux/leds.h|3 +
 6 files changed, 759 insertions(+)
 create mode 100644 drivers/leds/led-class-flash.c
 create mode 100644 include/linux/led-class-flash.h

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 808095b..50c4370 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -19,6 +19,17 @@ config LEDS_CLASS
  This option enables the led sysfs class in /sys/class/leds.  You'll
  need this to do anything useful with LEDs.  If unsure, say N.
 
+config LEDS_CLASS_FLASH
+   tristate "LED Flash Class Support"
+   depends on LEDS_CLASS
+   depends on OF
+   help
+ This option enables the flash led sysfs class in /sys/class/leds.
+ It wrapps LED Class and adds flash LEDs specific sysfs attributes
+ and kernel internal API to it. You'll need this to provide support
+ for the flash related features of a LED device. It can be built
+ as a module.
+
 comment "LED drivers"
 
 config LEDS_88PM860X
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index a2b1647..73c0cec 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -2,6 +2,7 @@
 # LED Core
 obj-$(CONFIG_NEW_LEDS) += led-core.o
 obj-$(CONFIG_LEDS_CLASS)   += led-class.o
+obj-$(CONFIG_LEDS_CLASS_FLASH) += led-class-flash.o
 obj-$(CONFIG_LEDS_TRIGGERS)+= led-triggers.o
 
 # LED Platform Drivers
diff --git a/drivers/leds/led-class-flash.c b/drivers/leds/led-class-flash.c
new file mode 100644
index 000..bec99f6
--- /dev/null
+++ b/drivers/leds/led-class-flash.c
@@ -0,0 +1,511 @@
+/*
+ * LED Flash Class interface
+ *
+ * Copyright (C) 2014 Samsung Electronics Co., Ltd.
+ * Author: Jacek Anaszewski 
+ *
+ * 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 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "leds.h"
+
+#define has_flash_op(flash, op)\
+   (flash && flash->ops->op)
+
+#define call_flash_op(flash, op, args...)  \
+   ((has_flash_op(flash, op)) ?\
+   (flash->ops->op(flash, args)) : \
+   -EINVAL)
+
+static ssize_t flash_brightness_store(struct device *dev,
+   struct device_attribute *attr, const char *buf, size_t size)
+{
+   struct led_classdev *led_cdev = dev_get_drvdata(dev);
+   struct led_classdev_flash *flash = lcdev_to_flash(led_cdev);
+   unsigned long state;
+   ssize_t ret;
+
+   mutex_lock(&led_cdev->led_access);
+
+   if (led_sysfs_is_disabled(led_cdev)) {
+   ret = -EBUSY;
+   goto unlock;
+   }
+
+   ret = kstrtoul(buf, 10, &state);
+   if (ret)
+   goto unlock;
+
+   ret = led_set_flash_brightness(flash, state);
+   if (ret < 0)
+   goto unlock;
+
+   ret = size;
+unlock:
+   mutex_unlock(&led_cdev->led_access);
+   return ret;
+}
+
+static ssize_t flash_brightness_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct led_classdev *led_cdev = dev_get_drvdata(dev);
+   struct led_classdev_flash *flash = lcdev_to_flash(led_cdev);
+
+   /* no lock needed for this */
+   led_update_flash_brightness(flash);
+
+   return sprintf(buf, "%u\n", flash->brightness.val);
+}
+static DEVICE_ATTR_RW(flash_brightness);
+
+static ssize_t max_flash_brightness_show(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct led_classdev *led_cdev = dev_get_drvdata(dev);
+   struct led_classdev_flash *flash = lcdev_to_flash(

[PATCH/RFC v7 1/3] leds: Add support for setting brightness in a synchronous way

2014-11-12 Thread Jacek Anaszewski
There are use cases when setting a LED brightness has to
have immediate effect (e.g. setting a torch LED brightness).
This patch extends LED subsystem to support such operations.
The LED subsystem internal API __led_set_brightness is changed
to led_set_brightness_async and new led_set_brightness_sync API
is added.

Signed-off-by: Jacek Anaszewski 
Acked-by: Kyungmin Park 
Cc: Bryan Wu 
Cc: Richard Purdie 
---
 drivers/leds/led-class.c  |   10 ++
 drivers/leds/led-core.c   |   19 ---
 drivers/leds/leds.h   |   20 
 drivers/leds/trigger/ledtrig-backlight.c  |8 
 drivers/leds/trigger/ledtrig-default-on.c |2 +-
 drivers/leds/trigger/ledtrig-gpio.c   |6 +++---
 drivers/leds/trigger/ledtrig-heartbeat.c  |2 +-
 drivers/leds/trigger/ledtrig-oneshot.c|4 ++--
 drivers/leds/trigger/ledtrig-transient.c  |   10 ++
 include/linux/leds.h  |8 
 10 files changed, 63 insertions(+), 26 deletions(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 65722de..dbeebac 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -55,7 +55,7 @@ static ssize_t brightness_store(struct device *dev,
 
if (state == LED_OFF)
led_trigger_remove(led_cdev);
-   __led_set_brightness(led_cdev, state);
+   led_set_brightness(led_cdev, state);
 
ret = size;
 unlock:
@@ -109,7 +109,7 @@ static void led_timer_function(unsigned long data)
unsigned long delay;
 
if (!led_cdev->blink_delay_on || !led_cdev->blink_delay_off) {
-   __led_set_brightness(led_cdev, LED_OFF);
+   led_set_brightness_async(led_cdev, LED_OFF);
return;
}
 
@@ -132,7 +132,7 @@ static void led_timer_function(unsigned long data)
delay = led_cdev->blink_delay_off;
}
 
-   __led_set_brightness(led_cdev, brightness);
+   led_set_brightness_async(led_cdev, brightness);
 
/* Return in next iteration if led is in one-shot mode and we are in
 * the final blink state so that the led is toggled each delay_on +
@@ -158,7 +158,7 @@ static void set_brightness_delayed(struct work_struct *ws)
 
led_stop_software_blink(led_cdev);
 
-   __led_set_brightness(led_cdev, led_cdev->delayed_set_value);
+   led_set_brightness_async(led_cdev, led_cdev->delayed_set_value);
 }
 
 /**
@@ -233,6 +233,8 @@ int led_classdev_register(struct device *parent, struct 
led_classdev *led_cdev)
if (!led_cdev->max_brightness)
led_cdev->max_brightness = LED_FULL;
 
+   led_cdev->flags |= SET_BRIGHTNESS_ASYNC;
+
led_update_brightness(led_cdev);
 
INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed);
diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
index be6d9fa..a745e32 100644
--- a/drivers/leds/led-core.c
+++ b/drivers/leds/led-core.c
@@ -42,13 +42,13 @@ static void led_set_software_blink(struct led_classdev 
*led_cdev,
 
/* never on - just set to off */
if (!delay_on) {
-   __led_set_brightness(led_cdev, LED_OFF);
+   led_set_brightness_async(led_cdev, LED_OFF);
return;
}
 
/* never off - just set to brightness */
if (!delay_off) {
-   __led_set_brightness(led_cdev, led_cdev->blink_brightness);
+   led_set_brightness_async(led_cdev, led_cdev->blink_brightness);
return;
}
 
@@ -117,6 +117,8 @@ EXPORT_SYMBOL_GPL(led_stop_software_blink);
 void led_set_brightness(struct led_classdev *led_cdev,
enum led_brightness brightness)
 {
+   int ret = 0;
+
/* delay brightness setting if need to stop soft-blink timer */
if (led_cdev->blink_delay_on || led_cdev->blink_delay_off) {
led_cdev->delayed_set_value = brightness;
@@ -124,7 +126,18 @@ void led_set_brightness(struct led_classdev *led_cdev,
return;
}
 
-   __led_set_brightness(led_cdev, brightness);
+   if (led_cdev->flags & SET_BRIGHTNESS_ASYNC) {
+   led_set_brightness_async(led_cdev, brightness);
+   return;
+   } else if (led_cdev->flags & SET_BRIGHTNESS_SYNC) {
+   ret = led_set_brightness_sync(led_cdev, brightness);
+   } else {
+   ret = -EINVAL;
+   }
+
+   if (ret < 0)
+   dev_dbg(led_cdev->dev, "Setting LED brightness failed (%d)\n",
+   ret);
 }
 EXPORT_SYMBOL(led_set_brightness);
 
diff --git a/drivers/leds/leds.h b/drivers/leds/leds.h
index 4c50365..2348dbd 100644
--- a/drivers/leds/leds.h
+++ b/drivers/leds/leds.h
@@ -17,16 +17,28 @@
 #include 
 #include 
 
-static inline void __led_set_brightness(struct led_classdev *led_cdev,
+static inline void led_set_brightness_async(struct led_classdev *led_cdev,
  

[PATCH/RFC v7 0/3] LED / flash API integration - LED Flash Class

2014-11-12 Thread Jacek Anaszewski
This patch set is the follow-up of the LED / flash API integration
series [1].


Changes since version 6:


- removed addition of public LED subsystem API for setting
  torch brightness in favour of internal API for
  synchronous and asynchronous led brightness level setting
- fixed possible race condition upon creating LED Flash class
  related sysfs attributes


Changes since version 5:


- removed flash manager framework - its implementation needs
  further thorough discussion.
- removed external strobe facilities from the LED Flash Class
  and provided external_strobe_set op in v4l2-flash. LED subsystem
  should be strobe provider agnostic.

Thanks,
Jacek Anaszewski

[1] https://lkml.org/lkml/2014/7/11/914


Jacek Anaszewski (3):
  leds: Add support for setting brightness in a synchronous way
  leds: Add LED Flash Class wrapper to LED subsystem
  Documentation: leds: Add description of LED Flash Class extension

 Documentation/leds/leds-class-flash.txt   |   39 +++
 drivers/leds/Kconfig  |   11 +
 drivers/leds/Makefile |1 +
 drivers/leds/led-class-flash.c|  511 +
 drivers/leds/led-class.c  |   14 +-
 drivers/leds/led-core.c   |   19 +-
 drivers/leds/leds.h   |   20 +-
 drivers/leds/trigger/ledtrig-backlight.c  |8 +-
 drivers/leds/trigger/ledtrig-default-on.c |2 +-
 drivers/leds/trigger/ledtrig-gpio.c   |6 +-
 drivers/leds/trigger/ledtrig-heartbeat.c  |2 +-
 drivers/leds/trigger/ledtrig-oneshot.c|4 +-
 drivers/leds/trigger/ledtrig-transient.c  |   10 +-
 include/linux/led-class-flash.h   |  229 +
 include/linux/leds.h  |   11 +
 15 files changed, 861 insertions(+), 26 deletions(-)
 create mode 100644 Documentation/leds/leds-class-flash.txt
 create mode 100644 drivers/leds/led-class-flash.c
 create mode 100644 include/linux/led-class-flash.h

-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[ANNOUNCE] avatar icons on cgit

2014-11-12 Thread Mauro Carvalho Chehab
Hi,

Today I updated cgit to support icons. For those that have patches merged on
the git trees hosted at LinuxTV that want to add its own customized avatar,
all that it is need is to create/add an avatar associated to the email used
at the patches on:

https://www.libravatar.org

The icon will be displayed the next time the cgit cache gets refreshed
(typically, it may take up to 5 mins for dynamic pages, and 30 mins for
static ones).

Regards,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html