아래의 SPI clock 질문에 대해서,
Datasheet에 SPI clock은...CMU에서 공급받아서 DIV를 2번인가 하고,
SPI내부에서 1/2를 한번 더 합니다.
그리고, 제기억으로 User단에서 speed값을 받으면 지원되는 값으로 세팅되게 했었거든요.
if (sdd->port_conf->clk_from_cmu) {
/* Configure Clock */
/* There is half-multiplier before the SPI */
clk_set_rate(sdd->src_clk, sdd->cur_speed * 2);
/* Enable Clock */
clk_prepare_enable(sdd->src_clk);
} else {
/* Configure Clock */
val = readl(regs + S3C64XX_SPI_CLK_CFG);
val &= ~S3C64XX_SPI_PSR_MASK;
val |= ((clk_get_rate(sdd->src_clk) / sdd->cur_speed / 2 - 1)
& S3C64XX_SPI_PSR_MASK);
writel(val, regs + S3C64XX_SPI_CLK_CFG);
/* Enable Clock */
val = readl(regs + S3C64XX_SPI_CLK_CFG);
val |= S3C64XX_SPI_ENCLK_ENABLE;
writel(val, regs + S3C64XX_SPI_CLK_CFG);
}
이 코드가 그것입니다.
일단 저기에서 val값을 printk해서 보세요.
그러면 검토해볼수 있을겁니다.