尊敬的 TI 员工:
我们目前为 OV x05B 传感器提供了一个有效的驱动器、但只能调整 RGB 通道。 我们的目标是添加配置红外通道的曝光和增益的功能。
在对现有的驱动程序代码进行分析之后、我们的想法如下:
1.struct ox05b 应使用更多的 v4l2_ctrl 成员进行扩展,例如*ir_exposure。
struct ox05b {
struct device *dev;
struct clk *clk;
u32 clk_rate;
struct i2c_client *client;
struct regmap *regmap;
struct gpio_desc *reset_gpio;
struct v4l2_subdev sd;
struct media_pad pad;
struct v4l2_mbus_framefmt format;
struct v4l2_async_notifier notifier;
struct v4l2_ctrl_handler ctrls;
struct v4l2_ctrl *exposure;
struct v4l2_ctrl *again;
struct v4l2_ctrl *dgain;
struct v4l2_ctrl *h_flip;
struct v4l2_ctrl *v_flip;
struct v4l2_ctrl *pixel_rate;
u32 fps;
/*
* Mutex for serialized access:
* Protect sensor module set pad format and start/stop streaming safely.
*/
struct mutex lock;
bool streaming;
};
2.为 ir_exposure 等添加相应的控制。
/* Add new controls */ ox05b->exposure = v4l2_ctrl_new_std(ctrl_hdr, &ox05b_ctrl_ops, V4L2_CID_EXPOSURE, 1, OX05B_EXPOSURE_MAX, 1, OX05B_EXPOSURE_DEFAULT); ox05b->again = v4l2_ctrl_new_std(ctrl_hdr, &ox05b_ctrl_ops, V4L2_CID_ANALOGUE_GAIN, 0, OX05B_AGAIN_MAX, 1, OX05B_AGAIN_DEFAULT); ox05b->dgain = v4l2_ctrl_new_std(ctrl_hdr, &ox05b_ctrl_ops, V4L2_CID_DIGITAL_GAIN, 0, OX05B_DGAIN_MAX, 1, OX05B_DGAIN_DEFAULT);
3、采用低电平驱动器,将值传递到相应的寄存器中,并利用传感器的群保持和 AB 模式切换机制来控制其在 RGB 和红外帧中的曝光等。
这里的主要问题是 v4l2_ctrl_new_std ()中所需的可用控制操作似乎是不够的,例如对于暴露只有 V4L2_CID_曝光 在 v4l2_controls.h 中定义。 我们是否应该尝试添加更多控制运算定义来满足我们的要求?
由于我们不熟悉 V4L2框架、因此请针对此问题向我们提供一些建议。
顺便说一下、我们也读取了您的 ov2312驱动程序代码。 结构和方法与 ox05B 非常相似,但 ov2312的驱动程序只能配置 RGB 帧的参数。
感谢您提前提供的支持、期待您的回复。
黄敬杰