[linux-yocto] [PATCH 13/29] i2c: designware-pcidrv: Option to set custom HCNT, LCNT and SDA value
Kamble, Nitin A
nitin.a.kamble at intel.com
Wed Apr 9 16:23:54 PDT 2014
On 4/7/2014 8:18 AM, rebecca.swee.fun.chang at intel.com wrote:
> From: "Chew, Chiau Ee" <chiau.ee.chew at intel.com>
>
> Provide option to set the HCNT, LCNT and SDA if the target values are known
> ahead. Instead of depends on formula to calculate the HCNT and LCNT.
If it is not already pushed upstream, I will reword this commit message too.
I will reword it to something like this:
Provide options to set the HCNT, LCNT and SDA values, if the target
values are known
ahead of time. This will make the boot process more efficient by
avoiding calculation
of the HCNT and LCNT values at runtime.
Nitin
> Signed-off-by: Chew, Chiau Ee <chiau.ee.chew at intel.com>
> Signed-off-by: Maurice Petallo <mauricex.r.petallo at intel.com>
> ---
> drivers/i2c/busses/i2c-designware-pcidrv.c | 55 ++++++++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
> index 3599a6b..4f4398f 100644
> --- a/drivers/i2c/busses/i2c-designware-pcidrv.c
> +++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
> @@ -70,6 +70,12 @@ struct dw_pci_controller {
> u32 tx_fifo_depth;
> u32 rx_fifo_depth;
> u32 clk_khz;
> + u32 ss_hcnt;
> + u32 ss_lcnt;
> + u32 fs_hcnt;
> + u32 fs_lcnt;
> + u32 ss_sda;
> + u32 fs_sda;
> };
>
> #define INTEL_MID_STD_CFG (DW_IC_CON_MASTER | \
> @@ -150,6 +156,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_1] = {
> .bus_num = 1,
> @@ -157,6 +169,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_2] = {
> .bus_num = 2,
> @@ -164,6 +182,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_3] = {
> .bus_num = 3,
> @@ -171,6 +195,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_4] = {
> .bus_num = 4,
> @@ -178,6 +208,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_5] = {
> .bus_num = 5,
> @@ -185,6 +221,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> [byt_6] = {
> .bus_num = 6,
> @@ -192,6 +234,12 @@ static struct dw_pci_controller dw_pci_controllers[] = {
> .tx_fifo_depth = 32,
> .rx_fifo_depth = 32,
> .clk_khz = 100000,
> + .ss_hcnt = 0x200,
> + .ss_lcnt = 0x200,
> + .fs_hcnt = 0x55,
> + .fs_lcnt = 0x99,
> + .ss_sda = 0x6,
> + .fs_sda = 0x6,
> },
> };
> static struct i2c_algorithm i2c_dw_algo = {
> @@ -315,7 +363,14 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
> I2C_FUNC_SMBUS_BYTE_DATA |
> I2C_FUNC_SMBUS_WORD_DATA |
> I2C_FUNC_SMBUS_I2C_BLOCK;
> +
> + dev->ss_hcnt = controller->ss_hcnt;
> + dev->ss_lcnt = controller->ss_lcnt;
> + dev->fs_hcnt = controller->fs_hcnt;
> + dev->fs_lcnt = controller->fs_lcnt;
> dev->master_cfg = controller->bus_cfg;
> + dev->sda_hold_time = (dev->master_cfg & DW_IC_CON_SPEED_FAST) ?
> + controller->fs_sda : controller->ss_sda;
> pci_set_drvdata(pdev, dev);
>
> dev->tx_fifo_depth = controller->tx_fifo_depth;
More information about the linux-yocto
mailing list