2 * linux/arch/mips/tx4938/toshiba_rbtx4938/spi_eeprom.c
3 * Copyright (C) 2000-2001 Toshiba Corporation
5 * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the
6 * terms of the GNU General Public License version 2. This program is
7 * licensed "as is" without any warranty of any kind, whether express
10 * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com)
12 #include <linux/init.h>
13 #include <linux/device.h>
14 #include <linux/spi/spi.h>
15 #include <linux/spi/eeprom.h>
16 #include <asm/tx4938/spi.h>
18 #define AT250X0_PAGE_SIZE 8
20 /* register board information for at25 driver */
21 int __init
spi_eeprom_register(int chipid
)
23 static struct spi_eeprom eeprom
= {
26 .page_size
= AT250X0_PAGE_SIZE
,
29 struct spi_board_info info
= {
31 .max_speed_hz
= 1500000, /* 1.5Mbps */
33 .chip_select
= chipid
,
34 .platform_data
= &eeprom
,
35 /* Mode 0: High-Active, Sample-Then-Shift */
38 return spi_register_board_info(&info
, 1);
41 /* simple temporary spi driver to provide early access to seeprom. */
43 static struct read_param
{
50 static int __init
early_seeprom_probe(struct spi_device
*spi
)
54 int len
= read_param
->len
;
55 char *buf
= read_param
->buf
;
56 int address
= read_param
->address
;
58 dev_info(&spi
->dev
, "spiclk %u KHz.\n",
59 (spi
->max_speed_hz
+ 500) / 1000);
60 if (read_param
->chipid
!= spi
->chip_select
)
63 /* spi_write_then_read can only work with small chunk */
64 int c
= len
< AT250X0_PAGE_SIZE
? len
: AT250X0_PAGE_SIZE
;
65 cmd
[0] = 0x03; /* AT25_READ */
67 stat
= spi_write_then_read(spi
, cmd
, sizeof(cmd
), buf
, c
);
75 static struct spi_driver early_seeprom_driver __initdata
= {
80 .probe
= early_seeprom_probe
,
83 int __init
spi_eeprom_read(int chipid
, int address
,
84 unsigned char *buf
, int len
)
87 struct read_param param
= {
95 ret
= spi_register_driver(&early_seeprom_driver
);
97 spi_unregister_driver(&early_seeprom_driver
);