Lines Matching refs:cfg

154 static u32 read_hw_register(const struct ssd2828_config *cfg, u8 regnum)  in read_hw_register()  argument
156 soft_spi_xfer_24bit_3wire(cfg, 0x700000 | regnum); in read_hw_register()
157 return soft_spi_xfer_24bit_3wire(cfg, 0x730000); in read_hw_register()
163 static void write_hw_register(const struct ssd2828_config *cfg, u8 regnum, in write_hw_register() argument
166 soft_spi_xfer_24bit_3wire(cfg, 0x700000 | regnum); in write_hw_register()
167 soft_spi_xfer_24bit_3wire(cfg, 0x720000 | val); in write_hw_register()
173 static void send_mipi_dcs_command(const struct ssd2828_config *cfg, u8 cmdnum) in send_mipi_dcs_command() argument
176 write_hw_register(cfg, SSD2828_PSCR1, 1); in send_mipi_dcs_command()
178 write_hw_register(cfg, SSD2828_PDR, cmdnum); in send_mipi_dcs_command()
184 static void ssd2828_reset(const struct ssd2828_config *cfg) in ssd2828_reset() argument
187 gpio_set_value(cfg->reset_pin, 0); in ssd2828_reset()
189 gpio_set_value(cfg->reset_pin, 1); in ssd2828_reset()
193 static int ssd2828_enable_gpio(const struct ssd2828_config *cfg) in ssd2828_enable_gpio() argument
195 if (gpio_request(cfg->csx_pin, "ssd2828_csx")) { in ssd2828_enable_gpio()
199 if (gpio_request(cfg->sck_pin, "ssd2828_sck")) { in ssd2828_enable_gpio()
200 gpio_free(cfg->csx_pin); in ssd2828_enable_gpio()
204 if (gpio_request(cfg->sdi_pin, "ssd2828_sdi")) { in ssd2828_enable_gpio()
205 gpio_free(cfg->csx_pin); in ssd2828_enable_gpio()
206 gpio_free(cfg->sck_pin); in ssd2828_enable_gpio()
210 if (gpio_request(cfg->reset_pin, "ssd2828_reset")) { in ssd2828_enable_gpio()
211 gpio_free(cfg->csx_pin); in ssd2828_enable_gpio()
212 gpio_free(cfg->sck_pin); in ssd2828_enable_gpio()
213 gpio_free(cfg->sdi_pin); in ssd2828_enable_gpio()
217 if (cfg->sdo_pin != -1 && gpio_request(cfg->sdo_pin, "ssd2828_sdo")) { in ssd2828_enable_gpio()
218 gpio_free(cfg->csx_pin); in ssd2828_enable_gpio()
219 gpio_free(cfg->sck_pin); in ssd2828_enable_gpio()
220 gpio_free(cfg->sdi_pin); in ssd2828_enable_gpio()
221 gpio_free(cfg->reset_pin); in ssd2828_enable_gpio()
225 gpio_direction_output(cfg->reset_pin, 0); in ssd2828_enable_gpio()
226 gpio_direction_output(cfg->csx_pin, 1); in ssd2828_enable_gpio()
227 gpio_direction_output(cfg->sck_pin, 1); in ssd2828_enable_gpio()
228 gpio_direction_output(cfg->sdi_pin, 1); in ssd2828_enable_gpio()
229 if (cfg->sdo_pin != -1) in ssd2828_enable_gpio()
230 gpio_direction_input(cfg->sdo_pin); in ssd2828_enable_gpio()
235 static int ssd2828_free_gpio(const struct ssd2828_config *cfg) in ssd2828_free_gpio() argument
237 gpio_free(cfg->csx_pin); in ssd2828_free_gpio()
238 gpio_free(cfg->sck_pin); in ssd2828_free_gpio()
239 gpio_free(cfg->sdi_pin); in ssd2828_free_gpio()
240 gpio_free(cfg->reset_pin); in ssd2828_free_gpio()
241 if (cfg->sdo_pin != -1) in ssd2828_free_gpio()
242 gpio_free(cfg->sdo_pin); in ssd2828_free_gpio()
289 static int ssd2828_configure_video_interface(const struct ssd2828_config *cfg, in ssd2828_configure_video_interface() argument
295 write_hw_register(cfg, SSD2828_VICR1, (mode->vsync_len << 8) | in ssd2828_configure_video_interface()
301 write_hw_register(cfg, SSD2828_VICR2, (vbp << 8) | hbp); in ssd2828_configure_video_interface()
304 write_hw_register(cfg, SSD2828_VICR3, (mode->lower_margin << 8) | in ssd2828_configure_video_interface()
308 write_hw_register(cfg, SSD2828_VICR4, mode->xres); in ssd2828_configure_video_interface()
311 write_hw_register(cfg, SSD2828_VICR5, mode->yres); in ssd2828_configure_video_interface()
315 switch (cfg->ssd2828_color_depth) { in ssd2828_configure_video_interface()
320 val |= cfg->mipi_dsi_loosely_packed_pixel_format ? in ssd2828_configure_video_interface()
331 write_hw_register(cfg, SSD2828_VICR6, val); in ssd2828_configure_video_interface()
334 write_hw_register(cfg, SSD2828_LCFR, in ssd2828_configure_video_interface()
335 cfg->mipi_dsi_number_of_data_lanes - 1); in ssd2828_configure_video_interface()
340 int ssd2828_init(const struct ssd2828_config *cfg, in ssd2828_init() argument
356 if (ssd2828_enable_gpio(cfg) != 0) in ssd2828_init()
360 ssd2828_reset(cfg); in ssd2828_init()
367 if (cfg->sdo_pin != -1) { in ssd2828_init()
368 if (read_hw_register(cfg, SSD2828_DIR) != 0x2828 || in ssd2828_init()
369 read_hw_register(cfg, SSD2828_CFGR) != cfgr_reg) { in ssd2828_init()
371 ssd2828_free_gpio(cfg); in ssd2828_init()
383 reference_freq_khz = cfg->ssd2828_tx_clk_khz; in ssd2828_init()
393 if (ssd2828_configure_video_interface(cfg, mode) != 0) { in ssd2828_init()
394 ssd2828_free_gpio(cfg); in ssd2828_init()
402 write_hw_register(cfg, SSD2828_CFGR, cfgr_reg); in ssd2828_init()
406 cfg->mipi_dsi_bitrate_per_data_lane_mbps * 1000, in ssd2828_init()
408 write_hw_register(cfg, SSD2828_PLCR, pll_config); in ssd2828_init()
414 write_hw_register(cfg, SSD2828_VCR, 0); in ssd2828_init()
417 write_hw_register(cfg, SSD2828_CCR, SSD2828_LP_CLOCK_DIVIDER(lp_div)); in ssd2828_init()
420 write_hw_register(cfg, SSD2828_PCR, 1); /* Enable PLL */ in ssd2828_init()
425 send_mipi_dcs_command(cfg, MIPI_DCS_EXIT_SLEEP_MODE); in ssd2828_init()
426 mdelay(cfg->mipi_dsi_delay_after_exit_sleep_mode_ms); in ssd2828_init()
428 send_mipi_dcs_command(cfg, MIPI_DCS_SET_DISPLAY_ON); in ssd2828_init()
429 mdelay(cfg->mipi_dsi_delay_after_set_display_on_ms); in ssd2828_init()
433 write_hw_register(cfg, SSD2828_CFGR, cfgr_reg); in ssd2828_init()