On 24 September 2014 23:53, Jagan Teki <jagannadh.t...@gmail.com> wrote: > On 1 September 2014 14:16, Markus Niebel <list-09_u-b...@tqsc.de> wrote: >> From: Markus Niebel <markus.nie...@tq-group.com> >> >> it is not correct to init for a specific slave in spi_setup_slave. >> instead buffer the values and delay init until spi_claim_bus. >> >> Signed-off-by: Markus Niebel <markus.nie...@tq-group.com> >> --- >> drivers/spi/mxc_spi.c | 37 +++++++++++++++++++++---------------- >> 1 file changed, 21 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c >> index 6a05d15..c741738 100644 >> --- a/drivers/spi/mxc_spi.c >> +++ b/drivers/spi/mxc_spi.c >> @@ -43,6 +43,8 @@ struct mxc_spi_slave { >> #endif >> int gpio; >> int ss_pol; >> + unsigned int max_hz; >> + unsigned int mode; >> }; >> >> static inline struct mxc_spi_slave *to_mxc_spi_slave(struct spi_slave >> *slave) >> @@ -77,12 +79,13 @@ u32 get_cspi_div(u32 div) >> } >> >> #ifdef MXC_CSPI >> -static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs, >> - unsigned int max_hz, unsigned int mode) >> +static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs) >> { >> unsigned int ctrl_reg; >> u32 clk_src; >> u32 div; >> + unsigned int max_hz = mxcs->max_hz; >> + unsigned int mode = mxcs->mode; >> >> clk_src = mxc_get_clock(MXC_CSPI_CLK); >> >> @@ -114,19 +117,15 @@ static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, >> unsigned int cs, >> #endif >> >> #ifdef MXC_ECSPI >> -static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs, >> - unsigned int max_hz, unsigned int mode) >> +static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs) >> { >> u32 clk_src = mxc_get_clock(MXC_CSPI_CLK); >> s32 reg_ctrl, reg_config; >> u32 ss_pol = 0, sclkpol = 0, sclkpha = 0, sclkctl = 0; >> u32 pre_div = 0, post_div = 0; >> struct cspi_regs *regs = (struct cspi_regs *)mxcs->base; >> - >> - if (max_hz == 0) { >> - printf("Error: desired clock is 0\n"); >> - return -1; >> - } >> + unsigned int max_hz = mxcs->max_hz; >> + unsigned int mode = mxcs->mode; >> >> /* >> * Reset SPI and set all CSs to master mode, if toggling >> @@ -404,6 +403,11 @@ struct spi_slave *spi_setup_slave(unsigned int bus, >> unsigned int cs, >> if (bus >= ARRAY_SIZE(spi_bases)) >> return NULL; >> >> + if (max_hz == 0) { >> + printf("Error: desired clock is 0\n"); >> + return NULL; >> + } >> + >> mxcs = spi_alloc_slave(struct mxc_spi_slave, bus, cs); >> if (!mxcs) { >> puts("mxc_spi: SPI Slave not allocated !\n"); >> @@ -421,13 +425,9 @@ struct spi_slave *spi_setup_slave(unsigned int bus, >> unsigned int cs, >> cs = ret; >> >> mxcs->base = spi_bases[bus]; >> + mxcs->max_hz = max_hz; >> + mxcs->mode = mode; >> >> - ret = spi_cfg_mxc(mxcs, cs, max_hz, mode); >> - if (ret) { >> - printf("mxc_spi: cannot setup SPI controller\n"); >> - free(mxcs); >> - return NULL; >> - } >> return &mxcs->slave; >> } >> >> @@ -440,12 +440,17 @@ void spi_free_slave(struct spi_slave *slave) >> >> int spi_claim_bus(struct spi_slave *slave) >> { >> + int ret; >> struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave); >> struct cspi_regs *regs = (struct cspi_regs *)mxcs->base; >> >> reg_write(®s->rxdata, 1); >> udelay(1); >> - reg_write(®s->ctrl, mxcs->ctrl_reg); >> + ret = spi_cfg_mxc(mxcs, slave->cs); >> + if (ret) { >> + printf("mxc_spi: cannot setup SPI controller\n"); >> + return ret; >> + } >> reg_write(®s->period, MXC_CSPIPERIOD_32KHZ); >> reg_write(®s->intr, 0); >> >> -- >> 2.1.0 >> > > In fact this driver is using spi_cfg_mxc() for configuring SPI > clock,polarities and frequency > in spi_setup_slave() time, but usually spi_setup_slave() will require > only basic controller reg > initialization. So while in spi_claim_bus() clock, polarities and > frequencies will handle. > > Please think on that direction and will be good if you fix those and > send the patches for next time.
I think you did the same, what I mentioned above, could you rebase this patch on master, I have seen patch failed error while applying. thanks! -- Jagan. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot