From: Robert Foss <robert.foss@linaro.org>
To: ben.kao@intel.com, mchehab@kernel.org, robh+dt@kernel.org,
mark.rutland@arm.com, matthias.bgg@gmail.com,
davem@davemloft.net, gregkh@linuxfoundation.org,
Jonathan.Cameron@huawei.com, andriy.shevchenko@linux.intel.com,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
Dongchun Zhu <dongchun.zhu@mediatek.com>
Cc: Robert Foss <robert.foss@linaro.org>, Tomasz Figa <tfiga@chromium.org>
Subject: [v1 2/3] media: ov8856: Add devicetree support
Date: Tue, 10 Mar 2020 14:46:02 +0100 [thread overview]
Message-ID: <20200310134603.30260-3-robert.foss@linaro.org> (raw)
In-Reply-To: <20200310134603.30260-1-robert.foss@linaro.org>
Add devicetree match table, and enable ov8856_probe()
to initialize power, clocks and reset pins.
Signed-off-by: Robert Foss <robert.foss@linaro.org>
---
drivers/media/i2c/ov8856.c | 105 ++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c
index 8655842af275..1769acdfaa44 100644
--- a/drivers/media/i2c/ov8856.c
+++ b/drivers/media/i2c/ov8856.c
@@ -3,10 +3,13 @@
#include <asm/unaligned.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
@@ -19,6 +22,8 @@
#define OV8856_LINK_FREQ_180MHZ 180000000ULL
#define OV8856_SCLK 144000000ULL
#define OV8856_MCLK 19200000
+#define OV8856_XVCLK_19_2 19200000
+#define OV8856_XVCLK_24 24000000
#define OV8856_DATA_LANES 4
#define OV8856_RGB_DEPTH 10
@@ -64,6 +69,14 @@
#define to_ov8856(_sd) container_of(_sd, struct ov8856, sd)
+static const char * const ov8856_supply_names[] = {
+ "dovdd", /* Digital I/O power */
+ "avdd", /* Analog power */
+ "dvdd", /* Digital core power */
+};
+
+#define OV8856_NUM_SUPPLIES ARRAY_SIZE(ov8856_supply_names)
+
enum {
OV8856_LINK_FREQ_720MBPS,
OV8856_LINK_FREQ_360MBPS,
@@ -566,6 +579,10 @@ struct ov8856 {
struct media_pad pad;
struct v4l2_ctrl_handler ctrl_handler;
+ struct clk *xvclk;
+ struct gpio_desc *n_shutdn_gpio;
+ struct regulator_bulk_data supplies[OV8856_NUM_SUPPLIES];
+
/* V4L2 Controls */
struct v4l2_ctrl *link_freq;
struct v4l2_ctrl *pixel_rate;
@@ -908,6 +925,45 @@ static int ov8856_set_stream(struct v4l2_subdev *sd, int enable)
return ret;
}
+static int __ov8856_power_on(struct ov8856 *ov8856)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(&ov8856->sd);
+ int ret;
+
+ ret = clk_prepare_enable(ov8856->xvclk);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable xvclk\n");
+ return ret;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+
+ ret = regulator_bulk_enable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable regulators\n");
+ goto disable_clk;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_HIGH);
+
+ usleep_range(1500, 1800);
+
+ return 0;
+
+disable_clk:
+ clk_disable_unprepare(ov8856->xvclk);
+
+ return ret;
+}
+
+static void __ov8856_power_off(struct ov8856 *ov8856)
+{
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+ regulator_bulk_disable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ clk_disable_unprepare(ov8856->xvclk);
+}
+
+
static int __maybe_unused ov8856_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
@@ -1175,7 +1231,7 @@ static int ov8856_remove(struct i2c_client *client)
static int ov8856_probe(struct i2c_client *client)
{
struct ov8856 *ov8856;
- int ret;
+ int i, ret;
ret = ov8856_check_hwcfg(&client->dev);
if (ret) {
@@ -1189,10 +1245,45 @@ static int ov8856_probe(struct i2c_client *client)
return -ENOMEM;
v4l2_i2c_subdev_init(&ov8856->sd, client, &ov8856_subdev_ops);
+ ov8856->xvclk = devm_clk_get(&client->dev, "xvclk");
+ if (IS_ERR(ov8856->xvclk)) {
+ dev_err(&client->dev, "failed to get xvclk\n");
+ return -EINVAL;
+ }
+
+ ret = clk_set_rate(ov8856->xvclk, OV8856_XVCLK_24);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to set xvclk rate (24MHz)\n");
+ return ret;
+ }
+
+ ov8856->n_shutdn_gpio = devm_gpiod_get(&client->dev, "reset",
+ GPIOD_OUT_LOW);
+ if (IS_ERR(ov8856->n_shutdn_gpio)) {
+ dev_err(&client->dev, "failed to get reset-gpios\n");
+ return -EINVAL;
+ }
+
+ for (i = 0; i < OV8856_NUM_SUPPLIES; i++)
+ ov8856->supplies[i].supply = ov8856_supply_names[i];
+
+ ret = devm_regulator_bulk_get(&client->dev, OV8856_NUM_SUPPLIES,
+ ov8856->supplies);
+ if (ret) {
+ dev_warn(&client->dev, "failed to get regulators\n");
+ return ret;
+ }
+
+ ret = __ov8856_power_on(ov8856);
+ if (ret) {
+ dev_warn(&client->dev, "failed to power on\n");
+ return ret;
+ }
+
ret = ov8856_identify_module(ov8856);
if (ret) {
dev_err(&client->dev, "failed to find sensor: %d", ret);
- return ret;
+ goto probe_power_off;
}
mutex_init(&ov8856->mutex);
@@ -1238,6 +1329,9 @@ static int ov8856_probe(struct i2c_client *client)
v4l2_ctrl_handler_free(ov8856->sd.ctrl_handler);
mutex_destroy(&ov8856->mutex);
+probe_power_off:
+ __ov8856_power_off(ov8856);
+
return ret;
}
@@ -1254,11 +1348,18 @@ static const struct acpi_device_id ov8856_acpi_ids[] = {
MODULE_DEVICE_TABLE(acpi, ov8856_acpi_ids);
#endif
+static const struct of_device_id ov8856_of_match[] = {
+ { .compatible = "ovti,ov8856" },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov8856_of_match);
+
static struct i2c_driver ov8856_i2c_driver = {
.driver = {
.name = "ov8856",
.pm = &ov8856_pm_ops,
.acpi_match_table = ACPI_PTR(ov8856_acpi_ids),
+ .of_match_table = ov8856_of_match,
},
.probe_new = ov8856_probe,
.remove = ov8856_remove,
--
2.20.1
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
WARNING: multiple messages have this Message-ID (diff)
From: Robert Foss <robert.foss@linaro.org>
To: ben.kao@intel.com, mchehab@kernel.org, robh+dt@kernel.org,
mark.rutland@arm.com, matthias.bgg@gmail.com,
davem@davemloft.net, gregkh@linuxfoundation.org,
Jonathan.Cameron@huawei.com, andriy.shevchenko@linux.intel.com,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
Dongchun Zhu <dongchun.zhu@mediatek.com>
Cc: Robert Foss <robert.foss@linaro.org>, Tomasz Figa <tfiga@chromium.org>
Subject: [v1 2/3] media: ov8856: Add devicetree support
Date: Tue, 10 Mar 2020 14:46:02 +0100 [thread overview]
Message-ID: <20200310134603.30260-3-robert.foss@linaro.org> (raw)
In-Reply-To: <20200310134603.30260-1-robert.foss@linaro.org>
Add devicetree match table, and enable ov8856_probe()
to initialize power, clocks and reset pins.
Signed-off-by: Robert Foss <robert.foss@linaro.org>
---
drivers/media/i2c/ov8856.c | 105 ++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c
index 8655842af275..1769acdfaa44 100644
--- a/drivers/media/i2c/ov8856.c
+++ b/drivers/media/i2c/ov8856.c
@@ -3,10 +3,13 @@
#include <asm/unaligned.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
@@ -19,6 +22,8 @@
#define OV8856_LINK_FREQ_180MHZ 180000000ULL
#define OV8856_SCLK 144000000ULL
#define OV8856_MCLK 19200000
+#define OV8856_XVCLK_19_2 19200000
+#define OV8856_XVCLK_24 24000000
#define OV8856_DATA_LANES 4
#define OV8856_RGB_DEPTH 10
@@ -64,6 +69,14 @@
#define to_ov8856(_sd) container_of(_sd, struct ov8856, sd)
+static const char * const ov8856_supply_names[] = {
+ "dovdd", /* Digital I/O power */
+ "avdd", /* Analog power */
+ "dvdd", /* Digital core power */
+};
+
+#define OV8856_NUM_SUPPLIES ARRAY_SIZE(ov8856_supply_names)
+
enum {
OV8856_LINK_FREQ_720MBPS,
OV8856_LINK_FREQ_360MBPS,
@@ -566,6 +579,10 @@ struct ov8856 {
struct media_pad pad;
struct v4l2_ctrl_handler ctrl_handler;
+ struct clk *xvclk;
+ struct gpio_desc *n_shutdn_gpio;
+ struct regulator_bulk_data supplies[OV8856_NUM_SUPPLIES];
+
/* V4L2 Controls */
struct v4l2_ctrl *link_freq;
struct v4l2_ctrl *pixel_rate;
@@ -908,6 +925,45 @@ static int ov8856_set_stream(struct v4l2_subdev *sd, int enable)
return ret;
}
+static int __ov8856_power_on(struct ov8856 *ov8856)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(&ov8856->sd);
+ int ret;
+
+ ret = clk_prepare_enable(ov8856->xvclk);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable xvclk\n");
+ return ret;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+
+ ret = regulator_bulk_enable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable regulators\n");
+ goto disable_clk;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_HIGH);
+
+ usleep_range(1500, 1800);
+
+ return 0;
+
+disable_clk:
+ clk_disable_unprepare(ov8856->xvclk);
+
+ return ret;
+}
+
+static void __ov8856_power_off(struct ov8856 *ov8856)
+{
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+ regulator_bulk_disable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ clk_disable_unprepare(ov8856->xvclk);
+}
+
+
static int __maybe_unused ov8856_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
@@ -1175,7 +1231,7 @@ static int ov8856_remove(struct i2c_client *client)
static int ov8856_probe(struct i2c_client *client)
{
struct ov8856 *ov8856;
- int ret;
+ int i, ret;
ret = ov8856_check_hwcfg(&client->dev);
if (ret) {
@@ -1189,10 +1245,45 @@ static int ov8856_probe(struct i2c_client *client)
return -ENOMEM;
v4l2_i2c_subdev_init(&ov8856->sd, client, &ov8856_subdev_ops);
+ ov8856->xvclk = devm_clk_get(&client->dev, "xvclk");
+ if (IS_ERR(ov8856->xvclk)) {
+ dev_err(&client->dev, "failed to get xvclk\n");
+ return -EINVAL;
+ }
+
+ ret = clk_set_rate(ov8856->xvclk, OV8856_XVCLK_24);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to set xvclk rate (24MHz)\n");
+ return ret;
+ }
+
+ ov8856->n_shutdn_gpio = devm_gpiod_get(&client->dev, "reset",
+ GPIOD_OUT_LOW);
+ if (IS_ERR(ov8856->n_shutdn_gpio)) {
+ dev_err(&client->dev, "failed to get reset-gpios\n");
+ return -EINVAL;
+ }
+
+ for (i = 0; i < OV8856_NUM_SUPPLIES; i++)
+ ov8856->supplies[i].supply = ov8856_supply_names[i];
+
+ ret = devm_regulator_bulk_get(&client->dev, OV8856_NUM_SUPPLIES,
+ ov8856->supplies);
+ if (ret) {
+ dev_warn(&client->dev, "failed to get regulators\n");
+ return ret;
+ }
+
+ ret = __ov8856_power_on(ov8856);
+ if (ret) {
+ dev_warn(&client->dev, "failed to power on\n");
+ return ret;
+ }
+
ret = ov8856_identify_module(ov8856);
if (ret) {
dev_err(&client->dev, "failed to find sensor: %d", ret);
- return ret;
+ goto probe_power_off;
}
mutex_init(&ov8856->mutex);
@@ -1238,6 +1329,9 @@ static int ov8856_probe(struct i2c_client *client)
v4l2_ctrl_handler_free(ov8856->sd.ctrl_handler);
mutex_destroy(&ov8856->mutex);
+probe_power_off:
+ __ov8856_power_off(ov8856);
+
return ret;
}
@@ -1254,11 +1348,18 @@ static const struct acpi_device_id ov8856_acpi_ids[] = {
MODULE_DEVICE_TABLE(acpi, ov8856_acpi_ids);
#endif
+static const struct of_device_id ov8856_of_match[] = {
+ { .compatible = "ovti,ov8856" },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov8856_of_match);
+
static struct i2c_driver ov8856_i2c_driver = {
.driver = {
.name = "ov8856",
.pm = &ov8856_pm_ops,
.acpi_match_table = ACPI_PTR(ov8856_acpi_ids),
+ .of_match_table = ov8856_of_match,
},
.probe_new = ov8856_probe,
.remove = ov8856_remove,
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Robert Foss <robert.foss@linaro.org>
To: ben.kao@intel.com, mchehab@kernel.org, robh+dt@kernel.org,
mark.rutland@arm.com, matthias.bgg@gmail.com,
davem@davemloft.net, gregkh@linuxfoundation.org,
Jonathan.Cameron@huawei.com, andriy.shevchenko@linux.intel.com,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
Dongchun Zhu <dongchun.zhu@mediatek.com>
Cc: Tomasz Figa <tfiga@chromium.org>, Robert Foss <robert.foss@linaro.org>
Subject: [v1 2/3] media: ov8856: Add devicetree support
Date: Tue, 10 Mar 2020 14:46:02 +0100 [thread overview]
Message-ID: <20200310134603.30260-3-robert.foss@linaro.org> (raw)
In-Reply-To: <20200310134603.30260-1-robert.foss@linaro.org>
Add devicetree match table, and enable ov8856_probe()
to initialize power, clocks and reset pins.
Signed-off-by: Robert Foss <robert.foss@linaro.org>
---
drivers/media/i2c/ov8856.c | 105 ++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c
index 8655842af275..1769acdfaa44 100644
--- a/drivers/media/i2c/ov8856.c
+++ b/drivers/media/i2c/ov8856.c
@@ -3,10 +3,13 @@
#include <asm/unaligned.h>
#include <linux/acpi.h>
+#include <linux/clk.h>
#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
@@ -19,6 +22,8 @@
#define OV8856_LINK_FREQ_180MHZ 180000000ULL
#define OV8856_SCLK 144000000ULL
#define OV8856_MCLK 19200000
+#define OV8856_XVCLK_19_2 19200000
+#define OV8856_XVCLK_24 24000000
#define OV8856_DATA_LANES 4
#define OV8856_RGB_DEPTH 10
@@ -64,6 +69,14 @@
#define to_ov8856(_sd) container_of(_sd, struct ov8856, sd)
+static const char * const ov8856_supply_names[] = {
+ "dovdd", /* Digital I/O power */
+ "avdd", /* Analog power */
+ "dvdd", /* Digital core power */
+};
+
+#define OV8856_NUM_SUPPLIES ARRAY_SIZE(ov8856_supply_names)
+
enum {
OV8856_LINK_FREQ_720MBPS,
OV8856_LINK_FREQ_360MBPS,
@@ -566,6 +579,10 @@ struct ov8856 {
struct media_pad pad;
struct v4l2_ctrl_handler ctrl_handler;
+ struct clk *xvclk;
+ struct gpio_desc *n_shutdn_gpio;
+ struct regulator_bulk_data supplies[OV8856_NUM_SUPPLIES];
+
/* V4L2 Controls */
struct v4l2_ctrl *link_freq;
struct v4l2_ctrl *pixel_rate;
@@ -908,6 +925,45 @@ static int ov8856_set_stream(struct v4l2_subdev *sd, int enable)
return ret;
}
+static int __ov8856_power_on(struct ov8856 *ov8856)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(&ov8856->sd);
+ int ret;
+
+ ret = clk_prepare_enable(ov8856->xvclk);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable xvclk\n");
+ return ret;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+
+ ret = regulator_bulk_enable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to enable regulators\n");
+ goto disable_clk;
+ }
+
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_HIGH);
+
+ usleep_range(1500, 1800);
+
+ return 0;
+
+disable_clk:
+ clk_disable_unprepare(ov8856->xvclk);
+
+ return ret;
+}
+
+static void __ov8856_power_off(struct ov8856 *ov8856)
+{
+ gpiod_set_value_cansleep(ov8856->n_shutdn_gpio, GPIOD_OUT_LOW);
+ regulator_bulk_disable(OV8856_NUM_SUPPLIES, ov8856->supplies);
+ clk_disable_unprepare(ov8856->xvclk);
+}
+
+
static int __maybe_unused ov8856_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
@@ -1175,7 +1231,7 @@ static int ov8856_remove(struct i2c_client *client)
static int ov8856_probe(struct i2c_client *client)
{
struct ov8856 *ov8856;
- int ret;
+ int i, ret;
ret = ov8856_check_hwcfg(&client->dev);
if (ret) {
@@ -1189,10 +1245,45 @@ static int ov8856_probe(struct i2c_client *client)
return -ENOMEM;
v4l2_i2c_subdev_init(&ov8856->sd, client, &ov8856_subdev_ops);
+ ov8856->xvclk = devm_clk_get(&client->dev, "xvclk");
+ if (IS_ERR(ov8856->xvclk)) {
+ dev_err(&client->dev, "failed to get xvclk\n");
+ return -EINVAL;
+ }
+
+ ret = clk_set_rate(ov8856->xvclk, OV8856_XVCLK_24);
+ if (ret < 0) {
+ dev_err(&client->dev, "failed to set xvclk rate (24MHz)\n");
+ return ret;
+ }
+
+ ov8856->n_shutdn_gpio = devm_gpiod_get(&client->dev, "reset",
+ GPIOD_OUT_LOW);
+ if (IS_ERR(ov8856->n_shutdn_gpio)) {
+ dev_err(&client->dev, "failed to get reset-gpios\n");
+ return -EINVAL;
+ }
+
+ for (i = 0; i < OV8856_NUM_SUPPLIES; i++)
+ ov8856->supplies[i].supply = ov8856_supply_names[i];
+
+ ret = devm_regulator_bulk_get(&client->dev, OV8856_NUM_SUPPLIES,
+ ov8856->supplies);
+ if (ret) {
+ dev_warn(&client->dev, "failed to get regulators\n");
+ return ret;
+ }
+
+ ret = __ov8856_power_on(ov8856);
+ if (ret) {
+ dev_warn(&client->dev, "failed to power on\n");
+ return ret;
+ }
+
ret = ov8856_identify_module(ov8856);
if (ret) {
dev_err(&client->dev, "failed to find sensor: %d", ret);
- return ret;
+ goto probe_power_off;
}
mutex_init(&ov8856->mutex);
@@ -1238,6 +1329,9 @@ static int ov8856_probe(struct i2c_client *client)
v4l2_ctrl_handler_free(ov8856->sd.ctrl_handler);
mutex_destroy(&ov8856->mutex);
+probe_power_off:
+ __ov8856_power_off(ov8856);
+
return ret;
}
@@ -1254,11 +1348,18 @@ static const struct acpi_device_id ov8856_acpi_ids[] = {
MODULE_DEVICE_TABLE(acpi, ov8856_acpi_ids);
#endif
+static const struct of_device_id ov8856_of_match[] = {
+ { .compatible = "ovti,ov8856" },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov8856_of_match);
+
static struct i2c_driver ov8856_i2c_driver = {
.driver = {
.name = "ov8856",
.pm = &ov8856_pm_ops,
.acpi_match_table = ACPI_PTR(ov8856_acpi_ids),
+ .of_match_table = ov8856_of_match,
},
.probe_new = ov8856_probe,
.remove = ov8856_remove,
--
2.20.1
next prev parent reply other threads:[~2020-03-10 13:46 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-10 13:46 [v1 0/3] media: ov8856: Add sensor modes & devicetree support Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 13:46 ` [v1 1/3] media: dt-bindings: ov8856: Document YAML bindings Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 13:57 ` Fabio Estevam
2020-03-10 13:57 ` Fabio Estevam
2020-03-10 13:57 ` Fabio Estevam
2020-03-10 15:51 ` Robert Foss
2020-03-10 15:51 ` Robert Foss
2020-03-10 15:51 ` Robert Foss
2020-03-12 10:13 ` Robert Foss
2020-03-12 10:13 ` Robert Foss
2020-03-12 10:13 ` Robert Foss
2020-03-10 18:38 ` Rob Herring
2020-03-10 18:38 ` Rob Herring
2020-03-10 18:38 ` Rob Herring
2020-03-10 13:46 ` Robert Foss [this message]
2020-03-10 13:46 ` [v1 2/3] media: ov8856: Add devicetree support Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 14:03 ` Fabio Estevam
2020-03-10 14:03 ` Fabio Estevam
2020-03-10 14:03 ` Fabio Estevam
2020-03-10 15:46 ` Robert Foss
2020-03-10 15:46 ` Robert Foss
2020-03-10 15:46 ` Robert Foss
2020-03-10 14:26 ` Andy Shevchenko
2020-03-10 14:26 ` Andy Shevchenko
2020-03-10 14:26 ` Andy Shevchenko
2020-03-10 15:55 ` Robert Foss
2020-03-10 15:55 ` Robert Foss
2020-03-10 15:55 ` Robert Foss
2020-03-11 9:05 ` Andy Shevchenko
2020-03-11 9:05 ` Andy Shevchenko
2020-03-11 9:05 ` Andy Shevchenko
2020-03-11 11:48 ` Sakari Ailus
2020-03-11 11:48 ` Sakari Ailus
2020-03-11 11:48 ` Sakari Ailus
2020-03-11 13:32 ` Robert Foss
2020-03-11 13:32 ` Robert Foss
2020-03-11 13:32 ` Robert Foss
2020-03-11 16:16 ` Sakari Ailus
2020-03-11 16:16 ` Sakari Ailus
2020-03-10 13:46 ` [v1 3/3] media: ov8856: Implement sensor module revision identification Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 13:46 ` Robert Foss
2020-03-10 14:30 ` Andy Shevchenko
2020-03-10 14:30 ` Andy Shevchenko
2020-03-10 14:30 ` Andy Shevchenko
2020-03-12 16:37 ` Robert Foss
2020-03-12 16:37 ` Robert Foss
2020-03-12 16:37 ` Robert Foss
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200310134603.30260-3-robert.foss@linaro.org \
--to=robert.foss@linaro.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=ben.kao@intel.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=dongchun.zhu@mediatek.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=matthias.bgg@gmail.com \
--cc=mchehab@kernel.org \
--cc=robh+dt@kernel.org \
--cc=tfiga@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.