lkml.org 
[lkml]   [2018]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 3/9] phy: Add MIPI D-PHY configuration options
    Hi Maxime,

    On Tue, Nov 06, 2018 at 03:54:15PM +0100, Maxime Ripard wrote:
    > Now that we have some infrastructure for it, allow the MIPI D-PHY phy's to
    > be configured through the generic functions through a custom structure
    > added to the generic union.
    >
    > The parameters added here are the ones defined in the MIPI D-PHY spec, plus
    > the number of lanes in use. The current set of parameters should cover all
    > the potential users.
    >
    > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
    > ---
    > include/linux/phy/phy-mipi-dphy.h | 232 +++++++++++++++++++++++++++++++-
    > include/linux/phy/phy.h | 6 +-
    > 2 files changed, 238 insertions(+)
    > create mode 100644 include/linux/phy/phy-mipi-dphy.h
    >
    > diff --git a/include/linux/phy/phy-mipi-dphy.h b/include/linux/phy/phy-mipi-dphy.h
    > new file mode 100644
    > index 000000000000..0b05932916af
    > --- /dev/null
    > +++ b/include/linux/phy/phy-mipi-dphy.h
    > @@ -0,0 +1,232 @@
    > +/* SPDX-License-Identifier: GPL-2.0 */
    > +/*
    > + * Copyright (C) 2018 Cadence Design Systems Inc.
    > + */
    > +
    > +#ifndef __PHY_MIPI_DPHY_H_
    > +#define __PHY_MIPI_DPHY_H_
    > +
    > +#include <video/videomode.h>
    > +
    > +/**
    > + * struct phy_configure_opts_mipi_dphy - MIPI D-PHY configuration set
    > + *
    > + * This structure is used to represent the configuration state of a
    > + * MIPI D-PHY phy.
    > + */
    > +struct phy_configure_opts_mipi_dphy {
    > + /**
    > + * @clk_miss:
    > + *
    > + * Timeout, in nanoseconds, for receiver to detect absence of
    > + * Clock transitions and disable the Clock Lane HS-RX.
    > + */
    > + unsigned int clk_miss;
    > +
    > + /**
    > + * @clk_post:
    > + *
    > + * Time, in nanoseconds, that the transmitter continues to
    > + * send HS clock after the last associated Data Lane has
    > + * transitioned to LP Mode. Interval is defined as the period
    > + * from the end of @hs_trail to the beginning of @clk_trail.
    > + */
    > + unsigned int clk_post;
    > +
    > + /**
    > + * @clk_pre:
    > + *
    > + * Time, in nanoseconds, that the HS clock shall be driven by
    > + * the transmitter prior to any associated Data Lane beginning
    > + * the transition from LP to HS mode.
    > + */
    > + unsigned int clk_pre;

    Is the unit of clk_pre intended to be UI or ns?

    How about adding information on the limits of these values as well?

    > +
    > + /**
    > + * @clk_prepare:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the Clock
    > + * Lane LP-00 Line state immediately before the HS-0 Line
    > + * state starting the HS transmission.
    > + */
    > + unsigned int clk_prepare;
    > +
    > + /**
    > + * @clk_settle:
    > + *
    > + * Time interval, in nanoseconds, during which the HS receiver
    > + * should ignore any Clock Lane HS transitions, starting from
    > + * the beginning of @clk_prepare.
    > + */
    > + unsigned int clk_settle;
    > +
    > + /**
    > + * @clk_term_en:
    > + *
    > + * Time, in nanoseconds, for the Clock Lane receiver to enable
    > + * the HS line termination.
    > + */
    > + unsigned int clk_term_en;
    > +
    > + /**
    > + * @clk_trail:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the HS-0
    > + * state after the last payload clock bit of a HS transmission
    > + * burst.
    > + */
    > + unsigned int clk_trail;
    > +
    > + /**
    > + * @clk_zero:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the HS-0
    > + * state prior to starting the Clock.
    > + */
    > + unsigned int clk_zero;
    > +
    > + /**
    > + * @d_term_en:
    > + *
    > + * Time, in nanoseconds, for the Data Lane receiver to enable
    > + * the HS line termination.
    > + */
    > + unsigned int d_term_en;
    > +
    > + /**
    > + * @eot:
    > + *
    > + * Transmitted time interval, in nanoseconds, from the start
    > + * of @hs_trail or @clk_trail, to the start of the LP- 11
    > + * state following a HS burst.
    > + */
    > + unsigned int eot;
    > +
    > + /**
    > + * @hs_exit:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives LP-11
    > + * following a HS burst.
    > + */
    > + unsigned int hs_exit;
    > +
    > + /**
    > + * @hs_prepare:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the Data
    > + * Lane LP-00 Line state immediately before the HS-0 Line
    > + * state starting the HS transmission
    > + */
    > + unsigned int hs_prepare;
    > +
    > + /**
    > + * @hs_settle:
    > + *
    > + * Time interval, in nanoseconds, during which the HS receiver
    > + * shall ignore any Data Lane HS transitions, starting from
    > + * the beginning of @hs_prepare.
    > + */
    > + unsigned int hs_settle;
    > +
    > + /**
    > + * @hs_skip:
    > + *
    > + * Time interval, in nanoseconds, during which the HS-RX
    > + * should ignore any transitions on the Data Lane, following a
    > + * HS burst. The end point of the interval is defined as the
    > + * beginning of the LP-11 state following the HS burst.
    > + */
    > + unsigned int hs_skip;
    > +
    > + /**
    > + * @hs_trail:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the
    > + * flipped differential state after last payload data bit of a
    > + * HS transmission burst
    > + */
    > + unsigned int hs_trail;
    > +
    > + /**
    > + * @hs_zero:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the HS-0
    > + * state prior to transmitting the Sync sequence.
    > + */
    > + unsigned int hs_zero;
    > +
    > + /**
    > + * @init:
    > + *
    > + * Time, in nanoseconds for the initialization period to
    > + * complete.
    > + */
    > + unsigned int init;
    > +
    > + /**
    > + * @lpx:
    > + *
    > + * Transmitted length, in nanoseconds, of any Low-Power state
    > + * period.
    > + */
    > + unsigned int lpx;
    > +
    > + /**
    > + * @ta_get:
    > + *
    > + * Time, in nanoseconds, that the new transmitter drives the
    > + * Bridge state (LP-00) after accepting control during a Link
    > + * Turnaround.
    > + */
    > + unsigned int ta_get;
    > +
    > + /**
    > + * @ta_go:
    > + *
    > + * Time, in nanoseconds, that the transmitter drives the
    > + * Bridge state (LP-00) before releasing control during a Link
    > + * Turnaround.
    > + */
    > + unsigned int ta_go;
    > +
    > + /**
    > + * @ta_sure:
    > + *
    > + * Time, in nanoseconds, that the new transmitter waits after
    > + * the LP-10 state before transmitting the Bridge state
    > + * (LP-00) during a Link Turnaround.
    > + */
    > + unsigned int ta_sure;
    > +
    > + /**
    > + * @wakeup:
    > + *
    > + * Time, in nanoseconds, that a transmitter drives a Mark-1
    > + * state prior to a Stop state in order to initiate an exit
    > + * from ULPS.
    > + */
    > + unsigned int wakeup;
    > +
    > + /**
    > + * @hs_clk_rate:
    > + *
    > + * Clock rate, in Hertz, of the high-speed clock.
    > + */
    > + unsigned long hs_clk_rate;
    > +
    > + /**
    > + * @lp_clk_rate:
    > + *
    > + * Clock rate, in Hertz, of the low-power clock.
    > + */
    > + unsigned long lp_clk_rate;
    > +
    > + /**
    > + * @lanes:
    > + *
    > + * Number of lanes used for the transmissions.
    > + */
    > + unsigned char lanes;

    This is related to the data_lanes DT property. I assume this is intended to
    be the number of active lanes. And presumably the first "lanes" number of
    lanes would be used in that case?

    > +};
    > +
    > +#endif /* __PHY_MIPI_DPHY_H_ */
    > diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
    > index 89cf8b685546..d7ea2dc4e2be 100644
    > --- a/include/linux/phy/phy.h
    > +++ b/include/linux/phy/phy.h
    > @@ -20,6 +20,8 @@
    > #include <linux/pm_runtime.h>
    > #include <linux/regulator/consumer.h>
    >
    > +#include <linux/phy/phy-mipi-dphy.h>
    > +
    > struct phy;
    >
    > enum phy_mode {
    > @@ -47,8 +49,12 @@ enum phy_mode {
    >
    > /**
    > * union phy_configure_opts - Opaque generic phy configuration
    > + *
    > + * @mipi_dphy: Configuration set applicable for phys supporting
    > + * the MIPI_DPHY phy mode.
    > */
    > union phy_configure_opts {
    > + struct phy_configure_opts_mipi_dphy mipi_dphy;
    > };
    >
    > /**

    --
    Kind regards,

    Sakari Ailus
    e-mail: sakari.ailus@iki.fi

    \
     
     \ /
      Last update: 2018-11-19 14:59    [W:2.526 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site