* [v5 0/2] DW9807 DT binding and driver patches @ 2018-02-23 16:13 Andy Yeh 2018-02-23 16:13 ` [v5 1/2] media: dw9807: Add dw9807 vcm driver Andy Yeh 2018-02-23 16:13 ` [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil Andy Yeh 0 siblings, 2 replies; 10+ messages in thread From: Andy Yeh @ 2018-02-23 16:13 UTC (permalink / raw) To: linux-media; +Cc: andy.yeh, sakari.ailus, tfiga, devicetree Hi Sakari and Tomasz, The two patches are the DT binding and driver for DW9807 VCM controller. Alan Chiang (2): media: dw9807: Add dw9807 vcm driver media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil .../bindings/media/i2c/dongwoon,dw9807.txt | 9 + MAINTAINERS | 7 + drivers/media/i2c/Kconfig | 10 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/dw9807.c | 320 +++++++++++++++++++++ 5 files changed, 347 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt create mode 100644 drivers/media/i2c/dw9807.c -- 2.7.4 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [v5 1/2] media: dw9807: Add dw9807 vcm driver 2018-02-23 16:13 [v5 0/2] DW9807 DT binding and driver patches Andy Yeh @ 2018-02-23 16:13 ` Andy Yeh 2018-02-23 16:13 ` [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil Andy Yeh 1 sibling, 0 replies; 10+ messages in thread From: Andy Yeh @ 2018-02-23 16:13 UTC (permalink / raw) To: linux-media; +Cc: andy.yeh, sakari.ailus, tfiga, devicetree, Alan Chiang From: Alan Chiang <alanx.chiang@intel.com> DW9807 is a 10 bit DAC from Dongwoon, designed for linear control of voice coil motor. This driver creates a V4L2 subdevice and provides control to set the desired focus. Signed-off-by: Andy Yeh <andy.yeh@intel.com> --- since v1: - changed author. since v2: - addressed outstanding comments. - enabled sequential write to update 2 registers in a single transaction. since v3: - addressed comments for v3. - Remove redundant codes and declare some variables as constant variable. - separate DT binding to another patch sicne v4: - sent patchset included DT binding with cover page MAINTAINERS | 7 + drivers/media/i2c/Kconfig | 10 ++ drivers/media/i2c/Makefile | 1 + drivers/media/i2c/dw9807.c | 320 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 338 insertions(+) create mode 100644 drivers/media/i2c/dw9807.c diff --git a/MAINTAINERS b/MAINTAINERS index 845fc25..a339bb5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4385,6 +4385,13 @@ T: git git://linuxtv.org/media_tree.git S: Maintained F: drivers/media/i2c/dw9714.c +DONGWOON DW9807 LENS VOICE COIL DRIVER +M: Sakari Ailus <sakari.ailus@linux.intel.com> +L: linux-media@vger.kernel.org +T: git git://linuxtv.org/media_tree.git +S: Maintained +F: drivers/media/i2c/dw9807.c + DOUBLETALK DRIVER M: "James R. Van Zandt" <jrv@vanzandt.mv.com> L: blinux-list@redhat.com diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index cb5d7ff..fd01842 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -325,6 +325,16 @@ config VIDEO_DW9714 capability. This is designed for linear control of voice coil motors, controlled via I2C serial interface. +config VIDEO_DW9807 + tristate "DW9807 lens voice coil support" + depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on VIDEO_V4L2_SUBDEV_API + ---help--- + This is a driver for the DW9807 camera lens voice coil. + DW9807 is a 10 bit DAC with 100mA output current sink + capability. This is designed for linear control of + voice coil motors, controlled via I2C serial interface. + config VIDEO_SAA7110 tristate "Philips SAA7110 video decoder" depends on VIDEO_V4L2 && I2C diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 548a9ef..1b62639 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_VIDEO_SAA7185) += saa7185.o obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o obj-$(CONFIG_VIDEO_AD5820) += ad5820.o obj-$(CONFIG_VIDEO_DW9714) += dw9714.o +obj-$(CONFIG_VIDEO_DW9807) += dw9807.o obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o obj-$(CONFIG_VIDEO_ADV7180) += adv7180.o diff --git a/drivers/media/i2c/dw9807.c b/drivers/media/i2c/dw9807.c new file mode 100644 index 0000000..95626e9 --- /dev/null +++ b/drivers/media/i2c/dw9807.c @@ -0,0 +1,320 @@ +// Copyright (C) 2018 Intel Corporation +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/acpi.h> +#include <linux/delay.h> +#include <linux/i2c.h> +#include <linux/module.h> +#include <linux/pm_runtime.h> +#include <media/v4l2-ctrls.h> +#include <media/v4l2-device.h> + +#define DW9807_NAME "dw9807" +#define DW9807_MAX_FOCUS_POS 1023 +/* + * This sets the minimum granularity for the focus positions. + * A value of 1 gives maximum accuracy for a desired focus position + */ +#define DW9807_FOCUS_STEPS 1 +/* + * This acts as the minimum granularity of lens movement. + * Keep this value power of 2, so the control steps can be + * uniformly adjusted for gradual lens movement, with desired + * number of control steps. + */ +#define DW9807_CTRL_STEPS 16 +#define DW9807_CTRL_DELAY_US 1000 + +#define DW9807_CTL_ADDR 0x02 +/* + * DW9807 separates two registers to control the VCM position. + * One for MSB value, another is LSB value. + */ +#define DW9807_MSB_ADDR 0x03 +#define DW9807_LSB_ADDR 0x04 +#define DW9807_STATUS_ADDR 0x05 +#define DW9807_MODE_ADDR 0x06 +#define DW9807_RESONANCE_ADDR 0x07 + +#define MAX_RETRY 10 + +struct dw9807_device { + struct v4l2_ctrl_handler ctrls_vcm; + struct v4l2_subdev sd; + u16 current_val; +}; + +static inline struct dw9807_device *sd_to_dw9807_vcm(struct v4l2_subdev *subdev) +{ + return container_of(subdev, struct dw9807_device, sd); +} + +static int dw9807_i2c_check(struct i2c_client *client) +{ + const char status_addr = DW9807_STATUS_ADDR; + char status_result = 0x1; + int ret; + + ret = i2c_master_send(client, (const char *)&status_addr, sizeof(status_addr)); + if (ret != sizeof(status_addr)) { + dev_err(&client->dev, "I2C write STATUS address fail ret = %d\n", + ret); + return -EIO; + } + + ret = i2c_master_recv(client, (char *)&status_result, sizeof(status_result)); + if (ret != sizeof(status_result)) { + dev_err(&client->dev, "I2C read STATUS value fail ret=%d\n", + ret); + return -EIO; + } + + return status_result; +} + +static int dw9807_set_dac(struct i2c_client *client, u16 data) +{ + const char tx_data[3] = { + DW9807_MSB_ADDR, ((data >> 8) & 0x03), (data & 0xFF) }; + int ret, retry = 0; + + /* + * According to the datasheet, need to check the bus status before we + * write VCM position. This ensure that we really write the value + * into the register + */ + while (dw9807_i2c_check(client) != 0) { + if (MAX_RETRY == ++retry) { + dev_err(&client->dev, "Cannot do the write operation because VCM is busy\n"); + return -EIO; + } + usleep_range(DW9807_CTRL_DELAY_US, DW9807_CTRL_DELAY_US + 10); + } + + /* Write VCM position to registers */ + ret = i2c_master_send(client, tx_data, sizeof(tx_data)); + if (ret != sizeof(tx_data)) { + dev_err(&client->dev, "I2C write MSB fail\n"); + return -EIO; + } + + return 0; +} + +static int dw9807_set_ctrl(struct v4l2_ctrl *ctrl) +{ + struct dw9807_device *dev_vcm = container_of(ctrl->handler, struct dw9807_device, ctrls_vcm); + + if (ctrl->id == V4L2_CID_FOCUS_ABSOLUTE) { + struct i2c_client *client = v4l2_get_subdevdata(&dev_vcm->sd); + + dev_vcm->current_val = ctrl->val; + return dw9807_set_dac(client, ctrl->val); + } + + return -EINVAL; +} + +static const struct v4l2_ctrl_ops dw9807_vcm_ctrl_ops = { + .s_ctrl = dw9807_set_ctrl, +}; + +static int dw9807_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + int rval; + + rval = pm_runtime_get_sync(sd->dev); + if (rval < 0) { + pm_runtime_put_noidle(sd->dev); + return rval; + } + + return 0; +} + +static int dw9807_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + pm_runtime_put(sd->dev); + + return 0; +} + +static const struct v4l2_subdev_internal_ops dw9807_int_ops = { + .open = dw9807_open, + .close = dw9807_close, +}; + +static const struct v4l2_subdev_ops dw9807_ops = { }; + +static void dw9807_subdev_cleanup(struct dw9807_device *dw9807_dev) +{ + v4l2_async_unregister_subdev(&dw9807_dev->sd); + v4l2_ctrl_handler_free(&dw9807_dev->ctrls_vcm); + media_entity_cleanup(&dw9807_dev->sd.entity); +} + +static int dw9807_init_controls(struct dw9807_device *dev_vcm) +{ + struct v4l2_ctrl_handler *hdl = &dev_vcm->ctrls_vcm; + const struct v4l2_ctrl_ops *ops = &dw9807_vcm_ctrl_ops; + struct i2c_client *client = v4l2_get_subdevdata(&dev_vcm->sd); + + v4l2_ctrl_handler_init(hdl, 1); + + v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE, + 0, DW9807_MAX_FOCUS_POS, DW9807_FOCUS_STEPS, 0); + + dev_vcm->sd.ctrl_handler = hdl; + if (hdl->error) { + dev_err(&client->dev, "%s fail error: 0x%x\n", + __func__, hdl->error); + return hdl->error; + } + + return 0; +} + +static int dw9807_probe(struct i2c_client *client) +{ + struct dw9807_device *dw9807_dev; + int rval; + + dw9807_dev = devm_kzalloc(&client->dev, sizeof(*dw9807_dev), + GFP_KERNEL); + if (dw9807_dev == NULL) + return -ENOMEM; + + v4l2_i2c_subdev_init(&dw9807_dev->sd, client, &dw9807_ops); + dw9807_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; + dw9807_dev->sd.internal_ops = &dw9807_int_ops; + + rval = dw9807_init_controls(dw9807_dev); + if (rval) + goto err_cleanup; + + rval = media_entity_pads_init(&dw9807_dev->sd.entity, 0, NULL); + if (rval < 0) + goto err_cleanup; + + dw9807_dev->sd.entity.function = MEDIA_ENT_F_LENS; + + rval = v4l2_async_register_subdev(&dw9807_dev->sd); + if (rval < 0) + goto err_cleanup; + + pm_runtime_set_active(&client->dev); + pm_runtime_enable(&client->dev); + pm_runtime_idle(&client->dev); + + return 0; + +err_cleanup: + dw9807_subdev_cleanup(dw9807_dev); + return rval; +} + +static int dw9807_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct dw9807_device *dw9807_dev = sd_to_dw9807_vcm(sd); + + pm_runtime_disable(&client->dev); + pm_runtime_set_suspended(&client->dev); + + dw9807_subdev_cleanup(dw9807_dev); + + return 0; +} + +/* + * This function sets the vcm position, so it consumes least current + * The lens position is gradually moved in units of DW9807_CTRL_STEPS, + * to make the movements smoothly. + */ +static int __maybe_unused dw9807_vcm_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct dw9807_device *dw9807_dev = sd_to_dw9807_vcm(sd); + const char tx_data[2] = { DW9807_CTL_ADDR, 0x01 }; + int ret, val; + + for (val = dw9807_dev->current_val & ~(DW9807_CTRL_STEPS - 1); + val >= 0; val -= DW9807_CTRL_STEPS) { + ret = dw9807_set_dac(client, val); + if (ret) + dev_err_once(dev, "%s I2C failure: %d", __func__, ret); + usleep_range(DW9807_CTRL_DELAY_US, DW9807_CTRL_DELAY_US + 10); + } + + /* Power down */ + ret = i2c_master_send(client, tx_data, sizeof(tx_data)); + + if (ret != sizeof(tx_data)) { + dev_err(&client->dev, "I2C write CTL fail\n"); + return -EIO; + } + + return 0; +} + +/* + * This function sets the vcm position to the value set by the user + * through v4l2_ctrl_ops s_ctrl handler + * The lens position is gradually moved in units of DW9807_CTRL_STEPS, + * to make the movements smoothly. + */ +static int __maybe_unused dw9807_vcm_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct dw9807_device *dw9807_dev = sd_to_dw9807_vcm(sd); + const char tx_data[2] = { DW9807_CTL_ADDR, 0x00 }; + int ret, val; + + /* Power on */ + ret = i2c_master_send(client, tx_data, sizeof(tx_data)); + if (ret != sizeof(tx_data)) { + dev_err(&client->dev, "I2C write CTL fail\n"); + return -EIO; + } + + for (val = dw9807_dev->current_val % DW9807_CTRL_STEPS; + val < dw9807_dev->current_val + DW9807_CTRL_STEPS - 1; + val += DW9807_CTRL_STEPS) { + ret = dw9807_set_dac(client, val); + if (ret) + dev_err_ratelimited(dev, "%s I2C failure: %d", + __func__, ret); + usleep_range(DW9807_CTRL_DELAY_US, DW9807_CTRL_DELAY_US + 10); + } + + return 0; +} + +static const struct of_device_id dw9807_of_table[] = { + { .compatible = "dongwoon,dw9807" }, + { { 0 } } +}; +MODULE_DEVICE_TABLE(of, dw9807_of_table); + +static const struct dev_pm_ops dw9807_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(dw9807_vcm_suspend, dw9807_vcm_resume) + SET_RUNTIME_PM_OPS(dw9807_vcm_suspend, dw9807_vcm_resume, NULL) +}; + +static struct i2c_driver dw9807_i2c_driver = { + .driver = { + .name = DW9807_NAME, + .pm = &dw9807_pm_ops, + .of_match_table = dw9807_of_table, + }, + .probe_new = dw9807_probe, + .remove = dw9807_remove, +}; + +module_i2c_driver(dw9807_i2c_driver); + +MODULE_AUTHOR("Chiang, Alan <alanx.chiang@intel.com>"); +MODULE_DESCRIPTION("DW9807 VCM driver"); +MODULE_LICENSE("GPL v2"); -- 2.7.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-02-23 16:13 [v5 0/2] DW9807 DT binding and driver patches Andy Yeh 2018-02-23 16:13 ` [v5 1/2] media: dw9807: Add dw9807 vcm driver Andy Yeh @ 2018-02-23 16:13 ` Andy Yeh 2018-02-27 22:10 ` Rob Herring 1 sibling, 1 reply; 10+ messages in thread From: Andy Yeh @ 2018-02-23 16:13 UTC (permalink / raw) To: linux-media; +Cc: andy.yeh, sakari.ailus, tfiga, devicetree, Alan Chiang From: Alan Chiang <alanx.chiang@intel.com> Dongwoon DW9807 is a voice coil lens driver. Also add a vendor prefix for Dongwoon for one did not exist previously. Signed-off-by: Andy Yeh <andy.yeh@intel.com> --- Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt diff --git a/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt new file mode 100644 index 0000000..0a1a860 --- /dev/null +++ b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt @@ -0,0 +1,9 @@ +Dongwoon Anatech DW9807 voice coil lens driver + +DW9807 is a 10-bit DAC with current sink capability. It is intended for +controlling voice coil lenses. + +Mandatory properties: + +- compatible: "dongwoon,dw9807" +- reg: I2C slave address -- 2.7.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-02-23 16:13 ` [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil Andy Yeh @ 2018-02-27 22:10 ` Rob Herring 2018-02-28 13:31 ` Sakari Ailus 0 siblings, 1 reply; 10+ messages in thread From: Rob Herring @ 2018-02-27 22:10 UTC (permalink / raw) To: Andy Yeh; +Cc: linux-media, Sakari Ailus, Tomasz Figa, devicetree, Alan Chiang On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> wrote: > From: Alan Chiang <alanx.chiang@intel.com> > > Dongwoon DW9807 is a voice coil lens driver. > > Also add a vendor prefix for Dongwoon for one did not exist previously. Where's that? > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > --- > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ DACs generally go in bindings/iio/dac/ > 1 file changed, 9 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt > > diff --git a/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt > new file mode 100644 > index 0000000..0a1a860 > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt > @@ -0,0 +1,9 @@ > +Dongwoon Anatech DW9807 voice coil lens driver > + > +DW9807 is a 10-bit DAC with current sink capability. It is intended for > +controlling voice coil lenses. > + > +Mandatory properties: > + > +- compatible: "dongwoon,dw9807" > +- reg: I2C slave address > -- > 2.7.4 > > -- > To unsubscribe from this list: send the line "unsubscribe devicetree" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-02-27 22:10 ` Rob Herring @ 2018-02-28 13:31 ` Sakari Ailus 2018-03-02 18:59 ` Rob Herring 0 siblings, 1 reply; 10+ messages in thread From: Sakari Ailus @ 2018-02-28 13:31 UTC (permalink / raw) To: Rob Herring; +Cc: Andy Yeh, linux-media, Tomasz Figa, devicetree, Alan Chiang Hi Rob, Thanks for the review. On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> wrote: > > From: Alan Chiang <alanx.chiang@intel.com> > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > Also add a vendor prefix for Dongwoon for one did not exist previously. > > Where's that? Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't relevant indeed and should be removed. > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > --- > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ > > DACs generally go in bindings/iio/dac/ We have quite a few lens voice coil drivers under bindings/media/i2c now. I don't really object to putting this one to bindings/iio/dac but then the rest should be moved as well. The camera LED flash drivers are under bindings/leds so this would actually be analoguous to that. The lens voice coil drivers are perhaps still a bit more bound to the domain (camera) than the LED flash drivers. I can send a patch if you think the existing bindings should be moved; let me know. -- Kind regards, Sakari Ailus sakari.ailus@linux.intel.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-02-28 13:31 ` Sakari Ailus @ 2018-03-02 18:59 ` Rob Herring 2018-03-02 20:14 ` Sakari Ailus 0 siblings, 1 reply; 10+ messages in thread From: Rob Herring @ 2018-03-02 18:59 UTC (permalink / raw) To: Sakari Ailus; +Cc: Andy Yeh, linux-media, Tomasz Figa, devicetree, Alan Chiang On Wed, Feb 28, 2018 at 03:31:26PM +0200, Sakari Ailus wrote: > Hi Rob, > > Thanks for the review. > > On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> wrote: > > > From: Alan Chiang <alanx.chiang@intel.com> > > > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > > > Also add a vendor prefix for Dongwoon for one did not exist previously. > > > > Where's that? > > Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't > relevant indeed and should be removed. > > > > > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > > --- > > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ > > > > DACs generally go in bindings/iio/dac/ > > We have quite a few lens voice coil drivers under bindings/media/i2c now. I > don't really object to putting this one to bindings/iio/dac but then the > rest should be moved as well. > > The camera LED flash drivers are under bindings/leds so this would actually > be analoguous to that. The lens voice coil drivers are perhaps still a bit > more bound to the domain (camera) than the LED flash drivers. The h/w is bound to that function or just the s/w? > I can send a patch if you think the existing bindings should be moved; let > me know. I'm okay if they are separate as long as we're not going to see the same device show up in both places. However, "i2c" is not the best directory choice. It should be by function, so we can find common properties. Rob ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-03-02 18:59 ` Rob Herring @ 2018-03-02 20:14 ` Sakari Ailus 2018-04-05 8:21 ` Tomasz Figa 0 siblings, 1 reply; 10+ messages in thread From: Sakari Ailus @ 2018-03-02 20:14 UTC (permalink / raw) To: Rob Herring Cc: Andy Yeh, linux-media, Tomasz Figa, devicetree, Alan Chiang, hverkuil On Fri, Mar 02, 2018 at 12:59:00PM -0600, Rob Herring wrote: > On Wed, Feb 28, 2018 at 03:31:26PM +0200, Sakari Ailus wrote: > > Hi Rob, > > > > Thanks for the review. > > > > On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > > > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> wrote: > > > > From: Alan Chiang <alanx.chiang@intel.com> > > > > > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > > > > > Also add a vendor prefix for Dongwoon for one did not exist previously. > > > > > > Where's that? > > > > Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't > > relevant indeed and should be removed. > > > > > > > > > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > > > --- > > > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ > > > > > > DACs generally go in bindings/iio/dac/ > > > > We have quite a few lens voice coil drivers under bindings/media/i2c now. I > > don't really object to putting this one to bindings/iio/dac but then the > > rest should be moved as well. > > > > The camera LED flash drivers are under bindings/leds so this would actually > > be analoguous to that. The lens voice coil drivers are perhaps still a bit > > more bound to the domain (camera) than the LED flash drivers. > > The h/w is bound to that function or just the s/w? The hardware. I guess in principle you could use them for other purposes --- most devices seem to be current sinks with configurable current --- but I've never seen that. The datasheet (dw9714) is here: <URL:http://www.datasheetspdf.com/datasheet/download.php?id=840322> > > > I can send a patch if you think the existing bindings should be moved; let > > me know. > > I'm okay if they are separate as long as we're not going to see the > same device show up in both places. However, "i2c" is not the best Ack. I wouldn't expect that. The datasheets of such devices clearly label the devices voice coil module drivers. > directory choice. It should be by function, so we can find common > properties. I2c devices in the media subsystem tend to be peripherals that are always used with another device with access to some system bus. Camera sensors, lens devices and tuners can be found there currently. I don't know the original reasoning but it most likely is related to that. In terms of different kinds of devices we have currently at least the following: Camera ISPs and CSI-2 receivers Video muxes Video codecs Camera sensors Camera lens drivers (right now only voice coil modules?) Tuners (DVB, radio, analogue TV, whatever) Radio transmitters HDMI CEC Remote controllers JPEG codecs Cc Hans, too. -- Sakari Ailus sakari.ailus@linux.intel.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-03-02 20:14 ` Sakari Ailus @ 2018-04-05 8:21 ` Tomasz Figa 2018-04-05 9:25 ` Sakari Ailus 0 siblings, 1 reply; 10+ messages in thread From: Tomasz Figa @ 2018-04-05 8:21 UTC (permalink / raw) To: Sakari Ailus Cc: Rob Herring, Yeh, Andy, Linux Media Mailing List, devicetree, Alan Chiang, Hans Verkuil On Sat, Mar 3, 2018 at 5:15 AM Sakari Ailus <sakari.ailus@linux.intel.com> wrote: > On Fri, Mar 02, 2018 at 12:59:00PM -0600, Rob Herring wrote: > > On Wed, Feb 28, 2018 at 03:31:26PM +0200, Sakari Ailus wrote: > > > Hi Rob, > > > > > > Thanks for the review. > > > > > > On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > > > > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> wrote: > > > > > From: Alan Chiang <alanx.chiang@intel.com> > > > > > > > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > > > > > > > Also add a vendor prefix for Dongwoon for one did not exist previously. > > > > > > > > Where's that? > > > > > > Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't > > > relevant indeed and should be removed. > > > > > > > > > > > > > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > > > > --- > > > > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt | 9 +++++++++ > > > > > > > > DACs generally go in bindings/iio/dac/ > > > > > > We have quite a few lens voice coil drivers under bindings/media/i2c now. I > > > don't really object to putting this one to bindings/iio/dac but then the > > > rest should be moved as well. > > > > > > The camera LED flash drivers are under bindings/leds so this would actually > > > be analoguous to that. The lens voice coil drivers are perhaps still a bit > > > more bound to the domain (camera) than the LED flash drivers. > > > > The h/w is bound to that function or just the s/w? > The hardware. I guess in principle you could use them for other purposes > --- most devices seem to be current sinks with configurable current --- but > I've never seen that. > The datasheet (dw9714) is here: > <URL:http://www.datasheetspdf.com/datasheet/download.php?id=840322> > > > > > I can send a patch if you think the existing bindings should be moved; let > > > me know. > > > > I'm okay if they are separate as long as we're not going to see the > > same device show up in both places. However, "i2c" is not the best > Ack. I wouldn't expect that. The datasheets of such devices clearly label > the devices voice coil module drivers. > > directory choice. It should be by function, so we can find common > > properties. > I2c devices in the media subsystem tend to be peripherals that are always > used with another device with access to some system bus. Camera sensors, lens > devices and tuners can be found there currently. I don't know the original > reasoning but it most likely is related to that. > In terms of different kinds of devices we have currently at least the > following: > Camera ISPs and CSI-2 receivers > Video muxes > Video codecs > Camera sensors > Camera lens drivers (right now only voice coil modules?) > Tuners (DVB, radio, analogue TV, whatever) > Radio transmitters > HDMI CEC > Remote controllers > JPEG codecs > Cc Hans, too. Any updates here? To be honest, I'm not sure there is too much to be thinking about here. This particular hardware block is a lens driver, specifically designed to be used with cameras. Quoting maker's website [1]: "Driver ICs for automatically focus on images of mobile cameras. Dongwoon Anatech's AF driver ICs are optimized mobile cameras with low power, low noise, smallest package, as well as include various lens position control methodology." IMHO putting its bindings under the more general purpose iio/ directory doesn't make much sense and would be actually confusing. [1] http://www.dwanatech.com/eng/sub/sub02_01.php?cat_no=6 Best regards, Tomasz ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-04-05 8:21 ` Tomasz Figa @ 2018-04-05 9:25 ` Sakari Ailus 2018-04-05 10:14 ` Tomasz Figa 0 siblings, 1 reply; 10+ messages in thread From: Sakari Ailus @ 2018-04-05 9:25 UTC (permalink / raw) To: Tomasz Figa Cc: Rob Herring, Yeh, Andy, Linux Media Mailing List, devicetree, Alan Chiang, Hans Verkuil Hi Tomasz, On Thu, Apr 05, 2018 at 08:21:56AM +0000, Tomasz Figa wrote: > On Sat, Mar 3, 2018 at 5:15 AM Sakari Ailus <sakari.ailus@linux.intel.com> > wrote: > > > On Fri, Mar 02, 2018 at 12:59:00PM -0600, Rob Herring wrote: > > > On Wed, Feb 28, 2018 at 03:31:26PM +0200, Sakari Ailus wrote: > > > > Hi Rob, > > > > > > > > Thanks for the review. > > > > > > > > On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > > > > > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> > wrote: > > > > > > From: Alan Chiang <alanx.chiang@intel.com> > > > > > > > > > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > > > > > > > > > Also add a vendor prefix for Dongwoon for one did not exist > previously. > > > > > > > > > > Where's that? > > > > > > > > Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't > > > > relevant indeed and should be removed. > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > > > > > --- > > > > > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt > | 9 +++++++++ > > > > > > > > > > DACs generally go in bindings/iio/dac/ > > > > > > > > We have quite a few lens voice coil drivers under bindings/media/i2c > now. I > > > > don't really object to putting this one to bindings/iio/dac but then > the > > > > rest should be moved as well. > > > > > > > > The camera LED flash drivers are under bindings/leds so this would > actually > > > > be analoguous to that. The lens voice coil drivers are perhaps still > a bit > > > > more bound to the domain (camera) than the LED flash drivers. > > > > > > The h/w is bound to that function or just the s/w? > > > The hardware. I guess in principle you could use them for other purposes > > --- most devices seem to be current sinks with configurable current --- > but > > I've never seen that. > > > The datasheet (dw9714) is here: > > > <URL:http://www.datasheetspdf.com/datasheet/download.php?id=840322> > > > > > > > > I can send a patch if you think the existing bindings should be > moved; let > > > > me know. > > > > > > I'm okay if they are separate as long as we're not going to see the > > > same device show up in both places. However, "i2c" is not the best > > > Ack. I wouldn't expect that. The datasheets of such devices clearly label > > the devices voice coil module drivers. > > > > directory choice. It should be by function, so we can find common > > > properties. > > > I2c devices in the media subsystem tend to be peripherals that are always > > used with another device with access to some system bus. Camera sensors, > lens > > devices and tuners can be found there currently. I don't know the original > > reasoning but it most likely is related to that. > > > In terms of different kinds of devices we have currently at least the > > following: > > > Camera ISPs and CSI-2 receivers > > Video muxes > > Video codecs > > Camera sensors > > Camera lens drivers (right now only voice coil modules?) > > Tuners (DVB, radio, analogue TV, whatever) > > Radio transmitters > > HDMI CEC > > Remote controllers > > JPEG codecs > > > Cc Hans, too. > > Any updates here? > > To be honest, I'm not sure there is too much to be thinking about here. > This particular hardware block is a lens driver, specifically designed to > be used with cameras. Quoting maker's website [1]: > > "Driver ICs for automatically focus on images of mobile cameras. > Dongwoon Anatech's AF driver ICs are optimized mobile cameras > with low power, low noise, smallest package, as well as include > various lens position control methodology." > > IMHO putting its bindings under the more general purpose iio/ directory > doesn't make much sense and would be actually confusing. > > [1] http://www.dwanatech.com/eng/sub/sub02_01.php?cat_no=6 Rob has acked v6 Andy sent some time ago while the driver patch has unaddressed comments from Jacopo. I think Andy (unintentionally) missed you from cc list: <URL:https://www.spinics.net/lists/linux-media/msg130709.html> -- Regards, Sakari Ailus sakari.ailus@linux.intel.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil 2018-04-05 9:25 ` Sakari Ailus @ 2018-04-05 10:14 ` Tomasz Figa 0 siblings, 0 replies; 10+ messages in thread From: Tomasz Figa @ 2018-04-05 10:14 UTC (permalink / raw) To: Sakari Ailus Cc: Rob Herring, Yeh, Andy, Linux Media Mailing List, devicetree, Alan Chiang, Hans Verkuil Hi Sakari, On Thu, Apr 5, 2018 at 6:26 PM Sakari Ailus <sakari.ailus@linux.intel.com> wrote: > Hi Tomasz, > On Thu, Apr 05, 2018 at 08:21:56AM +0000, Tomasz Figa wrote: > > On Sat, Mar 3, 2018 at 5:15 AM Sakari Ailus < sakari.ailus@linux.intel.com> > > wrote: > > > > > On Fri, Mar 02, 2018 at 12:59:00PM -0600, Rob Herring wrote: > > > > On Wed, Feb 28, 2018 at 03:31:26PM +0200, Sakari Ailus wrote: > > > > > Hi Rob, > > > > > > > > > > Thanks for the review. > > > > > > > > > > On Tue, Feb 27, 2018 at 04:10:31PM -0600, Rob Herring wrote: > > > > > > On Fri, Feb 23, 2018 at 10:13 AM, Andy Yeh <andy.yeh@intel.com> > > wrote: > > > > > > > From: Alan Chiang <alanx.chiang@intel.com> > > > > > > > > > > > > > > Dongwoon DW9807 is a voice coil lens driver. > > > > > > > > > > > > > > Also add a vendor prefix for Dongwoon for one did not exist > > previously. > > > > > > > > > > > > Where's that? > > > > > > > > > > Added by aece98a912d92444ea9da03b04269407d1308f1f . So that line isn't > > > > > relevant indeed and should be removed. > > > > > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Andy Yeh <andy.yeh@intel.com> > > > > > > > --- > > > > > > > Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807.txt > > | 9 +++++++++ > > > > > > > > > > > > DACs generally go in bindings/iio/dac/ > > > > > > > > > > We have quite a few lens voice coil drivers under bindings/media/i2c > > now. I > > > > > don't really object to putting this one to bindings/iio/dac but then > > the > > > > > rest should be moved as well. > > > > > > > > > > The camera LED flash drivers are under bindings/leds so this would > > actually > > > > > be analoguous to that. The lens voice coil drivers are perhaps still > > a bit > > > > > more bound to the domain (camera) than the LED flash drivers. > > > > > > > > The h/w is bound to that function or just the s/w? > > > > > The hardware. I guess in principle you could use them for other purposes > > > --- most devices seem to be current sinks with configurable current --- > > but > > > I've never seen that. > > > > > The datasheet (dw9714) is here: > > > > > <URL:http://www.datasheetspdf.com/datasheet/download.php?id=840322> > > > > > > > > > > > I can send a patch if you think the existing bindings should be > > moved; let > > > > > me know. > > > > > > > > I'm okay if they are separate as long as we're not going to see the > > > > same device show up in both places. However, "i2c" is not the best > > > > > Ack. I wouldn't expect that. The datasheets of such devices clearly label > > > the devices voice coil module drivers. > > > > > > directory choice. It should be by function, so we can find common > > > > properties. > > > > > I2c devices in the media subsystem tend to be peripherals that are always > > > used with another device with access to some system bus. Camera sensors, > > lens > > > devices and tuners can be found there currently. I don't know the original > > > reasoning but it most likely is related to that. > > > > > In terms of different kinds of devices we have currently at least the > > > following: > > > > > Camera ISPs and CSI-2 receivers > > > Video muxes > > > Video codecs > > > Camera sensors > > > Camera lens drivers (right now only voice coil modules?) > > > Tuners (DVB, radio, analogue TV, whatever) > > > Radio transmitters > > > HDMI CEC > > > Remote controllers > > > JPEG codecs > > > > > Cc Hans, too. > > > > Any updates here? > > > > To be honest, I'm not sure there is too much to be thinking about here. > > This particular hardware block is a lens driver, specifically designed to > > be used with cameras. Quoting maker's website [1]: > > > > "Driver ICs for automatically focus on images of mobile cameras. > > Dongwoon Anatech's AF driver ICs are optimized mobile cameras > > with low power, low noise, smallest package, as well as include > > various lens position control methodology." > > > > IMHO putting its bindings under the more general purpose iio/ directory > > doesn't make much sense and would be actually confusing. > > > > [1] http://www.dwanatech.com/eng/sub/sub02_01.php?cat_no=6 > Rob has acked v6 Andy sent some time ago while the driver patch has > unaddressed comments from Jacopo. I think Andy (unintentionally) missed > you from cc list: > <URL:https://www.spinics.net/lists/linux-media/msg130709.html> That's good to hear. Thanks for the pointer. Best regards, Tomasz ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-04-05 10:14 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-02-23 16:13 [v5 0/2] DW9807 DT binding and driver patches Andy Yeh 2018-02-23 16:13 ` [v5 1/2] media: dw9807: Add dw9807 vcm driver Andy Yeh 2018-02-23 16:13 ` [v5 2/2] media: dt-bindings: Add bindings for Dongwoon DW9807 voice coil Andy Yeh 2018-02-27 22:10 ` Rob Herring 2018-02-28 13:31 ` Sakari Ailus 2018-03-02 18:59 ` Rob Herring 2018-03-02 20:14 ` Sakari Ailus 2018-04-05 8:21 ` Tomasz Figa 2018-04-05 9:25 ` Sakari Ailus 2018-04-05 10:14 ` Tomasz Figa
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).