diff mbox series

[v2,063/106] ccs-pll: Document the structs in the header as well as the function

Message ID 20201007084557.25843-54-sakari.ailus@linux.intel.com
State Accepted
Commit 925e3e49730346a39ec718f30f0965c3785facbb
Headers show
Series None | expand

Commit Message

Sakari Ailus Oct. 7, 2020, 8:45 a.m. UTC
The CCS pll is used by the CCS driver at the moment, but documenting the
interface makes sense. It's non-trivial and the calculator could be used
elsewhere.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/i2c/ccs-pll.h | 88 +++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

Comments

Mauro Carvalho Chehab Nov. 5, 2020, 12:18 p.m. UTC | #1
Em Wed,  7 Oct 2020 11:45:14 +0300
Sakari Ailus <sakari.ailus@linux.intel.com> escreveu:

> The CCS pll is used by the CCS driver at the moment, but documenting the
> interface makes sense. It's non-trivial and the calculator could be used
> elsewhere.

LFTM.

It could make sense to add a .. kernel-doc:: markup at the documentation
somewhere.

Regards,
Mauro
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  drivers/media/i2c/ccs-pll.h | 88 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 88 insertions(+)
> 
> diff --git a/drivers/media/i2c/ccs-pll.h b/drivers/media/i2c/ccs-pll.h
> index 1d908b23c934..e01359f61476 100644
> --- a/drivers/media/i2c/ccs-pll.h
> +++ b/drivers/media/i2c/ccs-pll.h
> @@ -20,6 +20,16 @@
>  #define CCS_PLL_FLAG_OP_PIX_CLOCK_PER_LANE			(1 << 0)
>  #define CCS_PLL_FLAG_NO_OP_CLOCKS				(1 << 1)
>  
> +/**
> + * struct ccs_pll_branch_fr - CCS PLL configuration (front)
> + *
> + * A single branch front-end of the CCS PLL tree.
> + *
> + * @pre_pll_clk_div: Pre-PLL clock divisor
> + * @pll_multiplier: PLL multiplier
> + * @pll_ip_freq_hz: PLL input clock frequency
> + * @pll_op_freq_hz: PLL output clock frequency
> + */
>  struct ccs_pll_branch_fr {
>  	uint16_t pre_pll_clk_div;
>  	uint16_t pll_multiplier;
> @@ -27,6 +37,16 @@ struct ccs_pll_branch_fr {
>  	uint32_t pll_op_clk_freq_hz;
>  };
>  
> +/**
> + * struct ccs_pll_branch_bk - CCS PLL configuration (back)
> + *
> + * A single branch back-end of the CCS PLL tree.
> + *
> + * @sys_clk_div: System clock divider
> + * @pix_clk_div: Pixel clock divider
> + * @sys_clk_freq_hz: System clock frequency
> + * @pix_clk_freq_hz: Pixel clock frequency
> + */
>  struct ccs_pll_branch_bk {
>  	uint16_t sys_clk_div;
>  	uint16_t pix_clk_div;
> @@ -34,6 +54,29 @@ struct ccs_pll_branch_bk {
>  	uint32_t pix_clk_freq_hz;
>  };
>  
> +/**
> + * struct ccs_pll - Full CCS PLL configuration
> + *
> + * All information required to calculate CCS PLL configuration.
> + *
> + * @bus_type: Type of the data bus, CCS_PLL_BUS_TYPE_* (input)
> + * @csi2.lanes: The number of the CSI-2 data lanes (input)
> + * @binning_vertical: Vertical binning factor (input)
> + * @binning_horizontal: Horizontal binning factor (input)
> + * @scale_m: Downscaling factor, M component, [16, max] (input)
> + * @scale_n: Downscaling factor, N component, typically 16 (input)
> + * @bits_per_pixel: Bits per pixel on the output data bus (input)
> + * @flags: CCS_PLL_FLAG_* (input)
> + * @link_freq: Chosen link frequency (input)
> + * @ext_clk_freq_hz: External clock frequency, i.e. the sensor's input clock
> + *		     (input)
> + * @vt_fr: Video timing front-end configuration (output)
> + * @vt_bk: Video timing back-end configuration (output)
> + * @op_bk: Operational timing back-end configuration (output)
> + * @pixel_rate_csi: Pixel rate on the output data bus (output)
> + * @pixel_rate_pixel_array: Nominal pixel rate in the sensor's pixel array
> + *			    (output)
> + */
>  struct ccs_pll {
>  	/* input values */
>  	uint8_t bus_type;
> @@ -58,6 +101,18 @@ struct ccs_pll {
>  	uint32_t pixel_rate_pixel_array;
>  };
>  
> +/**
> + * struct ccs_pll_branch_limits_fr - CCS PLL front-end limits
> + *
> + * @min_pre_pll_clk_div: Minimum pre-PLL clock divider
> + * @max_pre_pll_clk_div: Maximum pre-PLL clock divider
> + * @min_pll_ip_freq_hz: Minimum PLL input clock frequency
> + * @max_pll_ip_freq_hz: Maximum PLL input clock frequency
> + * @min_pll_multiplier: Minimum PLL multiplier
> + * @max_pll_multiplier: Maximum PLL multiplier
> + * @min_pll_op_freq_hz: Minimum PLL output clock frequency
> + * @max_pll_op_freq_hz: Maximum PLL output clock frequency
> + */
>  struct ccs_pll_branch_limits_fr {
>  	uint16_t min_pre_pll_clk_div;
>  	uint16_t max_pre_pll_clk_div;
> @@ -69,6 +124,18 @@ struct ccs_pll_branch_limits_fr {
>  	uint32_t max_pll_op_clk_freq_hz;
>  };
>  
> +/**
> + * struct ccs_pll_branch_limits_bk - CCS PLL back-end limits
> + *
> + * @min_sys_clk_div: Minimum system clock divider
> + * @max_sys_clk_div: Maximum system clock divider
> + * @min_sys_clk_freq_hz: Minimum system clock frequency
> + * @max_sys_clk_freq_hz: Maximum system clock frequency
> + * @min_pix_clk_div: Minimum pixel clock divider
> + * @max_pix_clk_div: Maximum pixel clock divider
> + * @min_pix_clk_freq_hz: Minimum pixel clock frequency
> + * @max_pix_clk_freq_hz: Maximum pixel clock frequency
> + */
>  struct ccs_pll_branch_limits_bk {
>  	uint16_t min_sys_clk_div;
>  	uint16_t max_sys_clk_div;
> @@ -80,6 +147,17 @@ struct ccs_pll_branch_limits_bk {
>  	uint32_t max_pix_clk_freq_hz;
>  };
>  
> +/**
> + * struct ccs_pll_limits - CCS PLL limits
> + *
> + * @min_ext_clk_freq_hz: Minimum external clock frequency
> + * @max_ext_clk_freq_hz: Maximum external clock frequency
> + * @vt_fr: Video timing front-end limits
> + * @vt_bk: Video timing back-end limits
> + * @op_bk: Operational timing back-end limits
> + * @min_line_length_pck_bin: Minimum line length in pixels, with binning
> + * @min_line_length_pck: Minimum line length in pixels without binning
> + */
>  struct ccs_pll_limits {
>  	/* Strict PLL limits */
>  	uint32_t min_ext_clk_freq_hz;
> @@ -96,6 +174,16 @@ struct ccs_pll_limits {
>  
>  struct device;
>  
> +/**
> + * ccs_pll_calculate - Calculate CCS PLL configuration based on input parameters
> + *
> + * @dev: Device pointer, used for printing messages
> + * @limits: Limits specific to the sensor
> + * @pll: Given PLL configuration
> + *
> + * Calculate the CCS PLL configuration based on the limits as well as given
> + * device specific, system specific or user configured input data.
> + */
>  int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *limits,
>  		      struct ccs_pll *pll);
>  



Thanks,
Mauro
Sakari Ailus Dec. 2, 2020, 6:02 p.m. UTC | #2
Hi Mauro,

On Thu, Nov 05, 2020 at 01:18:45PM +0100, Mauro Carvalho Chehab wrote:
> Em Wed,  7 Oct 2020 11:45:14 +0300

> Sakari Ailus <sakari.ailus@linux.intel.com> escreveu:

> 

> > The CCS pll is used by the CCS driver at the moment, but documenting the

> > interface makes sense. It's non-trivial and the calculator could be used

> > elsewhere.

> 

> LFTM.

> 

> It could make sense to add a .. kernel-doc:: markup at the documentation

> somewhere.


Thanks for the comments.

I've added additional patch later in the set to add this to the
documentation build.

-- 
Sakari Ailus
diff mbox series

Patch

diff --git a/drivers/media/i2c/ccs-pll.h b/drivers/media/i2c/ccs-pll.h
index 1d908b23c934..e01359f61476 100644
--- a/drivers/media/i2c/ccs-pll.h
+++ b/drivers/media/i2c/ccs-pll.h
@@ -20,6 +20,16 @@ 
 #define CCS_PLL_FLAG_OP_PIX_CLOCK_PER_LANE			(1 << 0)
 #define CCS_PLL_FLAG_NO_OP_CLOCKS				(1 << 1)
 
+/**
+ * struct ccs_pll_branch_fr - CCS PLL configuration (front)
+ *
+ * A single branch front-end of the CCS PLL tree.
+ *
+ * @pre_pll_clk_div: Pre-PLL clock divisor
+ * @pll_multiplier: PLL multiplier
+ * @pll_ip_freq_hz: PLL input clock frequency
+ * @pll_op_freq_hz: PLL output clock frequency
+ */
 struct ccs_pll_branch_fr {
 	uint16_t pre_pll_clk_div;
 	uint16_t pll_multiplier;
@@ -27,6 +37,16 @@  struct ccs_pll_branch_fr {
 	uint32_t pll_op_clk_freq_hz;
 };
 
+/**
+ * struct ccs_pll_branch_bk - CCS PLL configuration (back)
+ *
+ * A single branch back-end of the CCS PLL tree.
+ *
+ * @sys_clk_div: System clock divider
+ * @pix_clk_div: Pixel clock divider
+ * @sys_clk_freq_hz: System clock frequency
+ * @pix_clk_freq_hz: Pixel clock frequency
+ */
 struct ccs_pll_branch_bk {
 	uint16_t sys_clk_div;
 	uint16_t pix_clk_div;
@@ -34,6 +54,29 @@  struct ccs_pll_branch_bk {
 	uint32_t pix_clk_freq_hz;
 };
 
+/**
+ * struct ccs_pll - Full CCS PLL configuration
+ *
+ * All information required to calculate CCS PLL configuration.
+ *
+ * @bus_type: Type of the data bus, CCS_PLL_BUS_TYPE_* (input)
+ * @csi2.lanes: The number of the CSI-2 data lanes (input)
+ * @binning_vertical: Vertical binning factor (input)
+ * @binning_horizontal: Horizontal binning factor (input)
+ * @scale_m: Downscaling factor, M component, [16, max] (input)
+ * @scale_n: Downscaling factor, N component, typically 16 (input)
+ * @bits_per_pixel: Bits per pixel on the output data bus (input)
+ * @flags: CCS_PLL_FLAG_* (input)
+ * @link_freq: Chosen link frequency (input)
+ * @ext_clk_freq_hz: External clock frequency, i.e. the sensor's input clock
+ *		     (input)
+ * @vt_fr: Video timing front-end configuration (output)
+ * @vt_bk: Video timing back-end configuration (output)
+ * @op_bk: Operational timing back-end configuration (output)
+ * @pixel_rate_csi: Pixel rate on the output data bus (output)
+ * @pixel_rate_pixel_array: Nominal pixel rate in the sensor's pixel array
+ *			    (output)
+ */
 struct ccs_pll {
 	/* input values */
 	uint8_t bus_type;
@@ -58,6 +101,18 @@  struct ccs_pll {
 	uint32_t pixel_rate_pixel_array;
 };
 
+/**
+ * struct ccs_pll_branch_limits_fr - CCS PLL front-end limits
+ *
+ * @min_pre_pll_clk_div: Minimum pre-PLL clock divider
+ * @max_pre_pll_clk_div: Maximum pre-PLL clock divider
+ * @min_pll_ip_freq_hz: Minimum PLL input clock frequency
+ * @max_pll_ip_freq_hz: Maximum PLL input clock frequency
+ * @min_pll_multiplier: Minimum PLL multiplier
+ * @max_pll_multiplier: Maximum PLL multiplier
+ * @min_pll_op_freq_hz: Minimum PLL output clock frequency
+ * @max_pll_op_freq_hz: Maximum PLL output clock frequency
+ */
 struct ccs_pll_branch_limits_fr {
 	uint16_t min_pre_pll_clk_div;
 	uint16_t max_pre_pll_clk_div;
@@ -69,6 +124,18 @@  struct ccs_pll_branch_limits_fr {
 	uint32_t max_pll_op_clk_freq_hz;
 };
 
+/**
+ * struct ccs_pll_branch_limits_bk - CCS PLL back-end limits
+ *
+ * @min_sys_clk_div: Minimum system clock divider
+ * @max_sys_clk_div: Maximum system clock divider
+ * @min_sys_clk_freq_hz: Minimum system clock frequency
+ * @max_sys_clk_freq_hz: Maximum system clock frequency
+ * @min_pix_clk_div: Minimum pixel clock divider
+ * @max_pix_clk_div: Maximum pixel clock divider
+ * @min_pix_clk_freq_hz: Minimum pixel clock frequency
+ * @max_pix_clk_freq_hz: Maximum pixel clock frequency
+ */
 struct ccs_pll_branch_limits_bk {
 	uint16_t min_sys_clk_div;
 	uint16_t max_sys_clk_div;
@@ -80,6 +147,17 @@  struct ccs_pll_branch_limits_bk {
 	uint32_t max_pix_clk_freq_hz;
 };
 
+/**
+ * struct ccs_pll_limits - CCS PLL limits
+ *
+ * @min_ext_clk_freq_hz: Minimum external clock frequency
+ * @max_ext_clk_freq_hz: Maximum external clock frequency
+ * @vt_fr: Video timing front-end limits
+ * @vt_bk: Video timing back-end limits
+ * @op_bk: Operational timing back-end limits
+ * @min_line_length_pck_bin: Minimum line length in pixels, with binning
+ * @min_line_length_pck: Minimum line length in pixels without binning
+ */
 struct ccs_pll_limits {
 	/* Strict PLL limits */
 	uint32_t min_ext_clk_freq_hz;
@@ -96,6 +174,16 @@  struct ccs_pll_limits {
 
 struct device;
 
+/**
+ * ccs_pll_calculate - Calculate CCS PLL configuration based on input parameters
+ *
+ * @dev: Device pointer, used for printing messages
+ * @limits: Limits specific to the sensor
+ * @pll: Given PLL configuration
+ *
+ * Calculate the CCS PLL configuration based on the limits as well as given
+ * device specific, system specific or user configured input data.
+ */
 int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *limits,
 		      struct ccs_pll *pll);