Lines Matching refs:mxcs
61 static void mxc_spi_cs_activate(struct mxc_spi_slave *mxcs) in mxc_spi_cs_activate() argument
64 dm_gpio_set_value(&mxcs->ss, mxcs->ss_pol); in mxc_spi_cs_activate()
66 if (mxcs->gpio > 0) in mxc_spi_cs_activate()
67 gpio_set_value(mxcs->gpio, mxcs->ss_pol); in mxc_spi_cs_activate()
71 static void mxc_spi_cs_deactivate(struct mxc_spi_slave *mxcs) in mxc_spi_cs_deactivate() argument
74 dm_gpio_set_value(&mxcs->ss, !(mxcs->ss_pol)); in mxc_spi_cs_deactivate()
76 if (mxcs->gpio > 0) in mxc_spi_cs_deactivate()
77 gpio_set_value(mxcs->gpio, !(mxcs->ss_pol)); in mxc_spi_cs_deactivate()
93 static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs) in spi_cfg_mxc() argument
98 unsigned int max_hz = mxcs->max_hz; in spi_cfg_mxc()
99 unsigned int mode = mxcs->mode; in spi_cfg_mxc()
124 mxcs->ctrl_reg = ctrl_reg; in spi_cfg_mxc()
131 static s32 spi_cfg_mxc(struct mxc_spi_slave *mxcs, unsigned int cs) in spi_cfg_mxc() argument
137 struct cspi_regs *regs = (struct cspi_regs *)mxcs->base; in spi_cfg_mxc()
138 unsigned int max_hz = mxcs->max_hz; in spi_cfg_mxc()
139 unsigned int mode = mxcs->mode; in spi_cfg_mxc()
208 mxcs->ctrl_reg = reg_ctrl; in spi_cfg_mxc()
209 mxcs->cfg_reg = reg_config; in spi_cfg_mxc()
219 int spi_xchg_single(struct mxc_spi_slave *mxcs, unsigned int bitlen, in spi_xchg_single() argument
224 struct cspi_regs *regs = (struct cspi_regs *)mxcs->base; in spi_xchg_single()
231 mxcs->ctrl_reg = (mxcs->ctrl_reg & in spi_xchg_single()
235 reg_write(®s->ctrl, mxcs->ctrl_reg | MXC_CSPICTRL_EN); in spi_xchg_single()
237 reg_write(®s->cfg, mxcs->cfg_reg); in spi_xchg_single()
284 reg_write(®s->ctrl, mxcs->ctrl_reg | in spi_xchg_single()
334 static int mxc_spi_xfer_internal(struct mxc_spi_slave *mxcs, in mxc_spi_xfer_internal() argument
345 if (!mxcs) in mxc_spi_xfer_internal()
349 mxc_spi_cs_activate(mxcs); in mxc_spi_xfer_internal()
359 ret = spi_xchg_single(mxcs, n_bits, p_outbuf, p_inbuf, 0); in mxc_spi_xfer_internal()
371 mxc_spi_cs_deactivate(mxcs); in mxc_spi_xfer_internal()
377 static int mxc_spi_claim_bus_internal(struct mxc_spi_slave *mxcs, int cs) in mxc_spi_claim_bus_internal() argument
379 struct cspi_regs *regs = (struct cspi_regs *)mxcs->base; in mxc_spi_claim_bus_internal()
384 ret = spi_cfg_mxc(mxcs, cs); in mxc_spi_claim_bus_internal()
399 struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave); in spi_xfer() local
401 return mxc_spi_xfer_internal(mxcs, bitlen, dout, din, flags); in spi_xfer()
416 static int setup_cs_gpio(struct mxc_spi_slave *mxcs, in setup_cs_gpio() argument
421 mxcs->gpio = board_spi_cs_gpio(bus, cs); in setup_cs_gpio()
422 if (mxcs->gpio == -1) in setup_cs_gpio()
425 gpio_request(mxcs->gpio, "spi-cs"); in setup_cs_gpio()
426 ret = gpio_direction_output(mxcs->gpio, !(mxcs->ss_pol)); in setup_cs_gpio()
428 printf("mxc_spi: cannot setup gpio %d\n", mxcs->gpio); in setup_cs_gpio()
442 struct mxc_spi_slave *mxcs; in spi_setup_slave() local
453 mxcs = spi_alloc_slave(struct mxc_spi_slave, bus, cs); in spi_setup_slave()
454 if (!mxcs) { in spi_setup_slave()
459 mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0; in spi_setup_slave()
461 ret = setup_cs_gpio(mxcs, bus, cs); in spi_setup_slave()
463 free(mxcs); in spi_setup_slave()
467 mxcs->base = spi_bases[bus]; in spi_setup_slave()
468 mxcs->max_hz = max_hz; in spi_setup_slave()
469 mxcs->mode = mode; in spi_setup_slave()
471 return &mxcs->slave; in spi_setup_slave()
476 struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave); in spi_free_slave() local
478 free(mxcs); in spi_free_slave()
483 struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave); in spi_claim_bus() local
485 return mxc_spi_claim_bus_internal(mxcs, slave->cs); in spi_claim_bus()
497 struct mxc_spi_slave *mxcs = dev_get_platdata(bus); in mxc_spi_probe() local
512 ret = dm_gpio_set_value(&plat->ss, !(mxcs->ss_pol)); in mxc_spi_probe()
518 mxcs->max_hz = fdtdec_get_int(blob, node, "spi-max-frequency", in mxc_spi_probe()
527 struct mxc_spi_slave *mxcs = dev_get_platdata(dev->parent); in mxc_spi_xfer() local
530 return mxc_spi_xfer_internal(mxcs, bitlen, dout, din, flags); in mxc_spi_xfer()
535 struct mxc_spi_slave *mxcs = dev_get_platdata(dev->parent); in mxc_spi_claim_bus() local
538 return mxc_spi_claim_bus_internal(mxcs, slave_plat->cs); in mxc_spi_claim_bus()
554 struct mxc_spi_slave *mxcs = dev_get_platdata(bus); in mxc_spi_set_mode() local
556 mxcs->mode = mode; in mxc_spi_set_mode()
557 mxcs->ss_pol = (mode & SPI_CS_HIGH) ? 1 : 0; in mxc_spi_set_mode()