Path: blob/master/arch/arm/mach-kirkwood/lacie_v2-common.c
10817 views
/*1* arch/arm/mach-kirkwood/lacie_v2-common.c2*3* This file is licensed under the terms of the GNU General Public4* License version 2. This program is licensed "as is" without any5* warranty of any kind, whether express or implied.6*/78#include <linux/kernel.h>9#include <linux/init.h>10#include <linux/mtd/physmap.h>11#include <linux/spi/flash.h>12#include <linux/spi/spi.h>13#include <linux/i2c.h>14#include <linux/i2c/at24.h>15#include <linux/gpio.h>16#include <asm/mach/time.h>17#include <mach/kirkwood.h>18#include <mach/irqs.h>19#include <plat/time.h>20#include "common.h"2122/*****************************************************************************23* 512KB SPI Flash on Boot Device (MACRONIX MX25L4005)24****************************************************************************/2526static struct mtd_partition lacie_v2_flash_parts[] = {27{28.name = "u-boot",29.size = MTDPART_SIZ_FULL,30.offset = 0,31.mask_flags = MTD_WRITEABLE, /* force read-only */32},33};3435static const struct flash_platform_data lacie_v2_flash = {36.type = "mx25l4005a",37.name = "spi_flash",38.parts = lacie_v2_flash_parts,39.nr_parts = ARRAY_SIZE(lacie_v2_flash_parts),40};4142static struct spi_board_info __initdata lacie_v2_spi_slave_info[] = {43{44.modalias = "m25p80",45.platform_data = &lacie_v2_flash,46.irq = -1,47.max_speed_hz = 20000000,48.bus_num = 0,49.chip_select = 0,50},51};5253void __init lacie_v2_register_flash(void)54{55spi_register_board_info(lacie_v2_spi_slave_info,56ARRAY_SIZE(lacie_v2_spi_slave_info));57kirkwood_spi_init();58}5960/*****************************************************************************61* I2C devices62****************************************************************************/6364static struct at24_platform_data at24c04 = {65.byte_len = SZ_4K / 8,66.page_size = 16,67};6869/*70* i2c addr | chip | description71* 0x50 | HT24LC04 | eeprom (512B)72*/7374static struct i2c_board_info __initdata lacie_v2_i2c_info[] = {75{76I2C_BOARD_INFO("24c04", 0x50),77.platform_data = &at24c04,78}79};8081void __init lacie_v2_register_i2c_devices(void)82{83kirkwood_i2c_init();84i2c_register_board_info(0, lacie_v2_i2c_info,85ARRAY_SIZE(lacie_v2_i2c_info));86}8788/*****************************************************************************89* Hard Disk power90****************************************************************************/9192static int __initdata lacie_v2_gpio_hdd_power[] = { 16, 17, 41, 42, 43 };9394void __init lacie_v2_hdd_power_init(int hdd_num)95{96int i;97int err;9899/* Power up all hard disks. */100for (i = 0; i < hdd_num; i++) {101err = gpio_request(lacie_v2_gpio_hdd_power[i], NULL);102if (err == 0) {103err = gpio_direction_output(104lacie_v2_gpio_hdd_power[i], 1);105/* Free the HDD power GPIOs. This allow user-space to106* configure them via the gpiolib sysfs interface. */107gpio_free(lacie_v2_gpio_hdd_power[i]);108}109if (err)110pr_err("Failed to power up HDD%d\n", i + 1);111}112}113114115