Merge branch 'next/board-samsung' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorOlof Johansson <olof@lixom.net>
Tue, 13 Mar 2012 23:10:35 +0000 (16:10 -0700)
committerOlof Johansson <olof@lixom.net>
Tue, 13 Mar 2012 23:10:35 +0000 (16:10 -0700)
* 'next/board-samsung' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: (32 commits)
  ARM: EXYNOS: support Exynos4210-bus Devfreq driver on Nuri board
  ARM: EXYNOS: Register JPEG on nuri
  ARM: EXYNOS: Register JPEG on universal_c210
  ARM: S5PV210: Enable JPEG on SMDKV210
  ARM: S5PV210: Add JPEG board definition
  ARM: EXYNOS: Enable JPEG on Origen
  ARM: EXYNOS: Enable JPEG on SMDKV310
  ARM: EXYNOS: Add __init attribute to universal_camera_init()
  ARM: EXYNOS: Add __init attribute to nuri_camera_init()
  ARM: S5PV210: Enable FIMC on SMDKC110
  ARM: S5PV210: Enable FIMC on SMDKV210
  ARM: S5PV210: Enable MFC on SMDKC110
  ARM: S5PV210: Enable MFC on SMDKV210
  ARM: EXYNOS: Enable G2D on SMDKV310
  ARM: S3C64XX: Supply platform data for SPI on Cragganmore
  ARM: S3C64XX: Add some more Cragganmore module IDs to the table
  ARM: EXYNOS: Add missing FIMC media device to Origen
  ARM: EXYNOS: Add missing FIMC media device to SMDKV310
  ARM: S5PV210: Add missing FIMC media device to Aquila
  ARM: SAMSUNG: Add support for S5K6AAFX camera on Nuri board
  ...

1  2 
arch/arm/mach-exynos/mach-nuri.c
arch/arm/mach-exynos/mach-universal_c210.c
arch/arm/mach-s5pv210/clock.c

@@@ -28,6 -28,7 +28,7 @@@
  
  #include <video/platform_lcd.h>
  #include <media/m5mols.h>
+ #include <media/s5k6aa.h>
  #include <media/s5p_fimc.h>
  #include <media/v4l2-mediabus.h>
  
@@@ -75,6 -76,7 +76,7 @@@ enum fixed_regulator_id 
        FIXED_REG_ID_MAX8903,
        FIXED_REG_ID_CAM_A28V,
        FIXED_REG_ID_CAM_12V,
+       FIXED_REG_ID_CAM_VT_15V,
  };
  
  static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
@@@ -220,14 -222,14 +222,14 @@@ static struct s3c_fb_pd_win nuri_fb_win
                .lower_margin   = 1,
                .hsync_len      = 48,
                .vsync_len      = 3,
 -              .xres           = 1280,
 -              .yres           = 800,
 +              .xres           = 1024,
 +              .yres           = 600,
                .refresh        = 60,
        },
        .max_bpp        = 24,
        .default_bpp    = 16,
 -      .virtual_x      = 1280,
 -      .virtual_y      = 800,
 +      .virtual_x      = 1024,
 +      .virtual_y      = 2 * 600,
  };
  
  static struct s3c_fb_platdata nuri_fb_pdata __initdata = {
@@@ -399,6 -401,9 +401,9 @@@ static struct regulator_consumer_suppl
  static struct regulator_consumer_supply __initdata max8997_ldo5_[] = {
        REGULATOR_SUPPLY("vhsic", "modemctl"), /* MODEM */
  };
+ static struct regulator_consumer_supply nuri_max8997_ldo6_consumer[] = {
+       REGULATOR_SUPPLY("vdd_reg", "6-003c"), /* S5K6AA camera */
+ };
  static struct regulator_consumer_supply __initdata max8997_ldo7_[] = {
        REGULATOR_SUPPLY("dig_18", "0-001f"), /* HCD803 */
  };
@@@ -431,7 -436,7 +436,7 @@@ static struct regulator_consumer_suppl
        REGULATOR_SUPPLY("vdd_arm", NULL), /* CPUFREQ */
  };
  static struct regulator_consumer_supply __initdata max8997_buck2_[] = {
-       REGULATOR_SUPPLY("vdd_int", NULL), /* CPUFREQ */
+       REGULATOR_SUPPLY("vdd_int", "exynos4210-busfreq.0"), /* CPUFREQ */
  };
  static struct regulator_consumer_supply __initdata max8997_buck3_[] = {
        REGULATOR_SUPPLY("vdd", "mali_dev.0"), /* G3D of Exynos 4 */
@@@ -546,6 -551,8 +551,8 @@@ static struct regulator_init_data __ini
                        .enabled        = 1,
                },
        },
+       .num_consumer_supplies  = ARRAY_SIZE(nuri_max8997_ldo6_consumer),
+       .consumer_supplies      = nuri_max8997_ldo6_consumer,
  };
  
  static struct regulator_init_data __initdata max8997_ldo7_data = {
@@@ -742,7 -749,7 +749,7 @@@ static struct regulator_init_data __ini
        .constraints    = {
                .name           = "VINT_1.1V_C210",
                .min_uV         = 900000,
-               .max_uV         = 1100000,
+               .max_uV         = 1200000,
                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
                .always_on      = 1,
                .state_mem      = {
@@@ -957,7 -964,6 +964,6 @@@ static struct max8997_platform_data __i
        .regulators             = nuri_max8997_regulators,
  
        .buck125_gpios = { EXYNOS4_GPX0(5), EXYNOS4_GPX0(6), EXYNOS4_GPL0(0) },
-       .buck2_gpiodvs = true,
  
        .buck1_voltage[0] = 1350000, /* 1.35V */
        .buck1_voltage[1] = 1300000, /* 1.3V */
@@@ -1116,7 -1122,30 +1122,30 @@@ static void __init nuri_ehci_init(void
  }
  
  /* CAMERA */
+ static struct regulator_consumer_supply cam_vt_cam15_supply =
+       REGULATOR_SUPPLY("vdd_core", "6-003c");
+ static struct regulator_init_data cam_vt_cam15_reg_init_data = {
+       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &cam_vt_cam15_supply,
+ };
+ static struct fixed_voltage_config cam_vt_cam15_fixed_voltage_cfg = {
+       .supply_name    = "VT_CAM_1.5V",
+       .microvolts     = 1500000,
+       .gpio           = EXYNOS4_GPE2(2), /* VT_CAM_1.5V_EN */
+       .enable_high    = 1,
+       .init_data      = &cam_vt_cam15_reg_init_data,
+ };
+ static struct platform_device cam_vt_cam15_fixed_rdev = {
+       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_15V,
+       .dev = { .platform_data = &cam_vt_cam15_fixed_voltage_cfg },
+ };
  static struct regulator_consumer_supply cam_vdda_supply[] = {
+       REGULATOR_SUPPLY("vdda", "6-003c"),
        REGULATOR_SUPPLY("a_sensor", "0-001f"),
  };
  
@@@ -1173,6 -1202,21 +1202,21 @@@ static struct s5p_platform_mipi_csis mi
  
  #define GPIO_CAM_MEGA_RST     EXYNOS4_GPY3(7) /* ISP_RESET */
  #define GPIO_CAM_8M_ISP_INT   EXYNOS4_GPL2(5)
+ #define GPIO_CAM_VT_NSTBY     EXYNOS4_GPL2(0)
+ #define GPIO_CAM_VT_NRST      EXYNOS4_GPL2(1)
+ static struct s5k6aa_platform_data s5k6aa_pldata = {
+       .mclk_frequency = 24000000UL,
+       .gpio_reset     = { GPIO_CAM_VT_NRST, 0 },
+       .gpio_stby      = { GPIO_CAM_VT_NSTBY, 0 },
+       .bus_type       = V4L2_MBUS_PARALLEL,
+       .horiz_flip     = 1,
+ };
+ static struct i2c_board_info s5k6aa_board_info = {
+       I2C_BOARD_INFO("S5K6AA", 0x3c),
+       .platform_data = &s5k6aa_pldata,
+ };
  
  static struct m5mols_platform_data m5mols_platdata = {
        .gpio_reset = GPIO_CAM_MEGA_RST,
@@@ -1185,6 -1229,13 +1229,13 @@@ static struct i2c_board_info m5mols_boa
  
  static struct s5p_fimc_isp_info nuri_camera_sensors[] = {
        {
+               .flags          = V4L2_MBUS_PCLK_SAMPLE_RISING |
+                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
+               .bus_type       = FIMC_ITU_601,
+               .board_info     = &s5k6aa_board_info,
+               .clk_frequency  = 24000000UL,
+               .i2c_bus_num    = 6,
+       }, {
                .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
                                  V4L2_MBUS_VSYNC_ACTIVE_LOW,
                .bus_type       = FIMC_MIPI_CSI2,
@@@ -1200,11 -1251,13 +1251,13 @@@ static struct s5p_platform_fimc fimc_md
  };
  
  static struct gpio nuri_camera_gpios[] = {
+       { GPIO_CAM_VT_NSTBY,    GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" },
+       { GPIO_CAM_VT_NRST,     GPIOF_OUT_INIT_LOW, "CAM_VGA_NRST"  },
        { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,           "8M_ISP_INT"  },
        { GPIO_CAM_MEGA_RST,    GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" },
  };
  
- static void nuri_camera_init(void)
+ static void __init nuri_camera_init(void)
  {
        s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
                         &s5p_device_mipi_csis0);
                pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);
  
        /* Free GPIOs controlled directly by the sensor drivers. */
+       gpio_free(GPIO_CAM_VT_NRST);
+       gpio_free(GPIO_CAM_VT_NSTBY);
        gpio_free(GPIO_CAM_MEGA_RST);
  
        if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
        s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4);
  }
  
+ static struct s3c2410_platform_i2c nuri_i2c6_platdata __initdata = {
+       .frequency      = 400000U,
+       .sda_delay      = 200,
+       .bus_num        = 6,
+ };
  static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
        .frequency      = 400000U,
        .sda_delay      = 200,
  };
  
+ /* DEVFREQ controlling memory/bus */
+ static struct platform_device exynos4_bus_devfreq = {
+       .name                   = "exynos4210-busfreq",
+ };
  static struct platform_device *nuri_devices[] __initdata = {
        /* Samsung Platform Devices */
        &s3c_device_i2c5, /* PMIC should initialize first */
        &s3c_device_i2c0,
+       &s3c_device_i2c6,
        &emmc_fixed_voltage,
        &s5p_device_mipi_csis0,
        &s5p_device_fimc0,
        &s3c_device_i2c3,
        &i2c9_gpio,
        &s3c_device_adc,
+       &s5p_device_g2d,
+       &s5p_device_jpeg,
        &s3c_device_rtc,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &nuri_backlight_device,
        &max8903_fixed_reg_dev,
        &nuri_max8903_device,
+       &cam_vt_cam15_fixed_rdev,
        &cam_vdda_fixed_rdev,
        &cam_8m_12v_fixed_rdev,
+       &exynos4_bus_devfreq,
  };
  
  static void __init nuri_map_io(void)
@@@ -1305,6 -1376,7 +1376,7 @@@ static void __init nuri_machine_init(vo
        i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
        i2c9_devs[I2C9_MAX17042].irq = gpio_to_irq(EXYNOS4_GPX2(3));
        i2c_register_board_info(9, i2c9_devs, ARRAY_SIZE(i2c9_devs));
+       s3c_i2c6_set_platdata(&nuri_i2c6_platdata);
  
        s5p_fimd0_set_platdata(&nuri_fb_pdata);
  
@@@ -46,6 -46,7 +46,7 @@@
  #include <media/v4l2-mediabus.h>
  #include <media/s5p_fimc.h>
  #include <media/m5mols.h>
+ #include <media/s5k6aa.h>
  
  #include "common.h"
  
@@@ -122,8 -123,10 +123,10 @@@ static struct regulator_consumer_suppl
  static struct regulator_consumer_supply lp3974_buck2_consumer =
        REGULATOR_SUPPLY("vddg3d", NULL);
  
- static struct regulator_consumer_supply lp3974_buck3_consumer =
-       REGULATOR_SUPPLY("vdet", "s5p-sdo");
+ static struct regulator_consumer_supply lp3974_buck3_consumer[] = {
+       REGULATOR_SUPPLY("vdet", "s5p-sdo"),
+       REGULATOR_SUPPLY("vdd_reg", "0-003c"),
+ };
  
  static struct regulator_init_data lp3974_buck1_data = {
        .constraints    = {
@@@ -168,8 -171,8 +171,8 @@@ static struct regulator_init_data lp397
                        .enabled        = 1,
                },
        },
-       .num_consumer_supplies = 1,
-       .consumer_supplies = &lp3974_buck3_consumer,
+       .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer),
+       .consumer_supplies = lp3974_buck3_consumer,
  };
  
  static struct regulator_init_data lp3974_buck4_data = {
@@@ -302,6 -305,9 +305,9 @@@ static struct regulator_init_data lp397
        .consumer_supplies = lp3974_ldo8_consumer,
  };
  
+ static struct regulator_consumer_supply lp3974_ldo9_consumer =
+       REGULATOR_SUPPLY("vddio", "0-003c");
  static struct regulator_init_data lp3974_ldo9_data = {
        .constraints    = {
                .name           = "VCC_2.8V",
                        .enabled        = 1,
                },
        },
+       .num_consumer_supplies  = 1,
+       .consumer_supplies      = &lp3974_ldo9_consumer,
  };
  
  static struct regulator_init_data lp3974_ldo10_data = {
@@@ -411,6 -419,7 +419,7 @@@ static struct regulator_init_data lp397
  };
  
  static struct regulator_consumer_supply lp3974_ldo16_consumer[] = {
+       REGULATOR_SUPPLY("vdda", "0-003c"),
        REGULATOR_SUPPLY("a_sensor", "0-001f"),
  };
  
@@@ -817,6 -826,8 +826,8 @@@ static struct s3c_fb_pd_win universal_f
        },
        .max_bpp        = 32,
        .default_bpp    = 16,
+       .virtual_x      = 480,
+       .virtual_y      = 2 * 800,
  };
  
  static struct s3c_fb_platdata universal_lcd_pdata __initdata = {
        .setup_gpio     = exynos4_fimd0_gpio_setup_24bpp,
  };
  
+ static struct regulator_consumer_supply cam_vt_dio_supply =
+       REGULATOR_SUPPLY("vdd_core", "0-003c");
+ static struct regulator_init_data cam_vt_dio_reg_init_data = {
+       .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
+       .num_consumer_supplies = 1,
+       .consumer_supplies = &cam_vt_dio_supply,
+ };
+ static struct fixed_voltage_config cam_vt_dio_fixed_voltage_cfg = {
+       .supply_name    = "CAM_VT_D_IO",
+       .microvolts     = 2800000,
+       .gpio           = EXYNOS4_GPE2(1), /* CAM_PWR_EN2 */
+       .enable_high    = 1,
+       .init_data      = &cam_vt_dio_reg_init_data,
+ };
+ static struct platform_device cam_vt_dio_fixed_reg_dev = {
+       .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_DIO,
+       .dev = { .platform_data = &cam_vt_dio_fixed_voltage_cfg },
+ };
  static struct regulator_consumer_supply cam_i_core_supply =
        REGULATOR_SUPPLY("core", "0-001f");
  
@@@ -883,6 -916,28 +916,28 @@@ static struct s5p_platform_mipi_csis mi
  #define GPIO_CAM_LEVEL_EN(n)  EXYNOS4_GPE4(n + 3)
  #define GPIO_CAM_8M_ISP_INT   EXYNOS4_GPX1(5) /* XEINT_13 */
  #define GPIO_CAM_MEGA_nRST    EXYNOS4_GPE2(5)
+ #define GPIO_CAM_VGA_NRST     EXYNOS4_GPE4(7)
+ #define GPIO_CAM_VGA_NSTBY    EXYNOS4_GPE4(6)
+ static int s5k6aa_set_power(int on)
+ {
+       gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on);
+       return 0;
+ }
+ static struct s5k6aa_platform_data s5k6aa_platdata = {
+       .mclk_frequency = 21600000UL,
+       .gpio_reset     = { GPIO_CAM_VGA_NRST, 0 },
+       .gpio_stby      = { GPIO_CAM_VGA_NSTBY, 0 },
+       .bus_type       = V4L2_MBUS_PARALLEL,
+       .horiz_flip     = 1,
+       .set_power      = s5k6aa_set_power,
+ };
+ static struct i2c_board_info s5k6aa_board_info = {
+       I2C_BOARD_INFO("S5K6AA", 0x3C),
+       .platform_data = &s5k6aa_platdata,
+ };
  
  static int m5mols_set_power(struct device *dev, int on)
  {
@@@ -904,13 -959,21 +959,21 @@@ static struct i2c_board_info m5mols_boa
  
  static struct s5p_fimc_isp_info universal_camera_sensors[] = {
        {
+               .mux_id         = 0,
+               .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
+                                 V4L2_MBUS_VSYNC_ACTIVE_LOW,
+               .bus_type       = FIMC_ITU_601,
+               .board_info     = &s5k6aa_board_info,
+               .i2c_bus_num    = 0,
+               .clk_frequency  = 24000000UL,
+       }, {
                .mux_id         = 0,
                .flags          = V4L2_MBUS_PCLK_SAMPLE_FALLING |
                                  V4L2_MBUS_VSYNC_ACTIVE_LOW,
                .bus_type       = FIMC_MIPI_CSI2,
                .board_info     = &m5mols_board_info,
                .i2c_bus_num    = 0,
 -              .clk_frequency  = 21600000UL,
 +              .clk_frequency  = 24000000UL,
                .csi_data_align = 32,
        },
  };
@@@ -925,9 -988,11 +988,11 @@@ static struct gpio universal_camera_gpi
        { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW,  "CAM_LVL_EN2" },
        { GPIO_CAM_8M_ISP_INT,  GPIOF_IN,            "8M_ISP_INT"  },
        { GPIO_CAM_MEGA_nRST,   GPIOF_OUT_INIT_LOW,  "CAM_8M_NRST" },
+       { GPIO_CAM_VGA_NRST,    GPIOF_OUT_INIT_LOW,  "CAM_VGA_NRST"  },
+       { GPIO_CAM_VGA_NSTBY,   GPIOF_OUT_INIT_LOW,  "CAM_VGA_NSTBY" },
  };
  
- static void universal_camera_init(void)
+ static void __init universal_camera_init(void)
  {
        s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
                         &s5p_device_mipi_csis0);
        /* Free GPIOs controlled directly by the sensor drivers. */
        gpio_free(GPIO_CAM_MEGA_nRST);
        gpio_free(GPIO_CAM_8M_ISP_INT);
+       gpio_free(GPIO_CAM_VGA_NRST);
+       gpio_free(GPIO_CAM_VGA_NSTBY);
  
        if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A))
                pr_err("Camera port A setup failed\n");
@@@ -960,6 -1027,7 +1027,7 @@@ static struct platform_device *universa
        &s5p_device_fimc1,
        &s5p_device_fimc2,
        &s5p_device_fimc3,
+       &s5p_device_g2d,
        &mmc0_fixed_voltage,
        &s3c_device_hsmmc0,
        &s3c_device_hsmmc2,
        &universal_gpio_keys,
        &s5p_device_onenand,
        &s5p_device_fimd0,
+       &s5p_device_jpeg,
        &s5p_device_mfc,
        &s5p_device_mfc_l,
        &s5p_device_mfc_r,
        &exynos4_device_pd[PD_MFC],
        &exynos4_device_pd[PD_LCD0],
        &exynos4_device_pd[PD_CAM],
+       &cam_vt_dio_fixed_reg_dev,
        &cam_i_core_fixed_reg_dev,
        &cam_s_if_fixed_reg_dev,
        &s5p_device_fimc_md,
@@@ -175,7 -175,7 +175,7 @@@ static int s5pv210_clk_mask1_ctrl(struc
        return s5p_gatectrl(S5P_CLK_SRC_MASK1, clk, enable);
  }
  
 -static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
 +static int s5pv210_clk_hdmiphy_ctrl(struct clk *clk, int enable)
  {
        return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
  }
@@@ -339,6 -339,11 +339,11 @@@ static struct clk init_clocks_off[] = 
                .parent         = &clk_hclk_dsys.clk,
                .enable         = s5pv210_clk_ip0_ctrl,
                .ctrlbit        = (1 << 26),
+       }, {
+               .name           = "jpeg",
+               .parent         = &clk_hclk_dsys.clk,
+               .enable         = s5pv210_clk_ip0_ctrl,
+               .ctrlbit        = (1 << 28),
        }, {
                .name           = "mfc",
                .devname        = "s5p-mfc",
        }, {
                .name           = "hdmiphy",
                .devname        = "s5pv210-hdmi",
 -              .enable         = exynos4_clk_hdmiphy_ctrl,
 +              .enable         = s5pv210_clk_hdmiphy_ctrl,
                .ctrlbit        = (1 << 0),
        }, {
                .name           = "dacphy",