Author: nick Date: 2012-05-04 10:14:09 +0100 (Fri, 04 May 2012) New Revision: 1869 Added: balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/rtc-ds1390.patch Modified: balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/series-balloon3-bubble-tt Log: add rtc patch for ds1390 to enable osc config and trickle charge mode setting Added: balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/rtc-ds1390.patch =================================================================== --- balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/rtc-ds1390.patch (rev 0) +++ balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/rtc-ds1390.patch 2012-05-04 09:14:09 UTC (rev 1869) @@ -0,0 +1,76 @@ +Index: linux-2.6.39.4/drivers/rtc/rtc-ds1390.c +=================================================================== +--- linux-2.6.39.4.orig/drivers/rtc/rtc-ds1390.c 2012-05-04 09:29:23.000000000 +0100 ++++ linux-2.6.39.4/drivers/rtc/rtc-ds1390.c 2012-05-04 09:34:54.000000000 +0100 +@@ -40,6 +40,24 @@ + #define DS1390_REG_STATUS 0x0E + #define DS1390_REG_TRICKLE 0x0F + ++/*Trickle Charge Register States */ ++#define DS1390_TRICKLE_NO_DIODE_250R 0xA5 ++#define DS1390_TRICKLE_ONE_DIODE_250R 0xA9 ++#define DS1390_TRICKLE_NO_DIODE_2KR 0xA6 ++#define DS1390_TRICKLE_ONE_DIODE_2KR 0xAA ++#define DS1390_TRICKLE_NO_DIODE_4KR 0xA7 ++#define DS1390_TRICKLE_ONE_DIODE_4KR 0xAB ++#define DS1390_TRICKLE_DISABLE 0x00 ++ ++/*Register bits specific to DS1392 Control Register */ ++#define DS1392_CONTROL_REG_NEOSC_BIT (1 << 7) ++#define DS1392_CONTROL_REG_BBSQI_BIT (1 << 5) ++#define DS1392_CONTROL_REG_RS2_BIT (1 << 4) ++#define DS1392_CONTROL_REG_RS1_BIT (1 << 3) ++#define DS1392_CONTROL_REG_NESQW (1 << 2) ++#define DS1392_CONTROL_REG_AIE (1 << 0) ++ ++ + struct ds1390 { + struct rtc_device *rtc; + u8 txrx_buf[9]; /* cmd + 8 registers */ +@@ -67,6 +85,27 @@ + return 0; + } + ++static int ds1390_put_reg(struct device *dev, unsigned char address, ++ unsigned char data) ++{ ++ struct spi_device *spi = to_spi_device(dev); ++ struct ds1390 *chip = dev_get_drvdata(dev); ++ int status; ++ ++ if (!data) ++ return -EINVAL; ++ ++ /* Set MSB to indicate write (note datasheet waveform for DS1392 wrong here)*/ ++ chip->txrx_buf[0] = address | 0x80; ++ chip->txrx_buf[1] = data; ++ /* do the i/o */ ++ status = spi_write_then_read(spi, chip->txrx_buf, 2, chip->txrx_buf, 0); ++ if (status != 0) ++ return status; ++ ++ return 0; ++} ++ + static int ds1390_read_time(struct device *dev, struct rtc_time *dt) + { + struct spi_device *spi = to_spi_device(dev); +@@ -152,6 +191,18 @@ + res = PTR_ERR(chip->rtc); + kfree(chip); + } ++ /*FIXME should provide the means to set the osc config in reg 0x0D */ ++ pr_info("%s : Setting control register to %d\n", __func__, 0); ++ res = ds1390_put_reg(&spi->dev, DS1390_REG_CONTROL, 0); ++ if (res != 0) ++ pr_err("%s : unable to set control reg\n", __func__); ++ ++ /*Set up Trickle Charge Reg*/ ++ /*FIXME the trickle charge setting ought to be a configuration parameter */ ++ pr_info("%s : Setting trickle charge register to %d\n", __func__, DS1390_TRICKLE_ONE_DIODE_4KR); ++ res = ds1390_put_reg(&spi->dev, DS1390_REG_TRICKLE, DS1390_TRICKLE_ONE_DIODE_4KR); ++ if (res != 0) ++ pr_err("%s : unable to set trickle charge reg\n", __func__); + + return res; + } Modified: balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/series-balloon3-bubble-tt =================================================================== --- balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/series-balloon3-bubble-tt 2012-05-04 09:12:23 UTC (rev 1868) +++ balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/series-balloon3-bubble-tt 2012-05-04 09:14:09 UTC (rev 1869) @@ -24,3 +24,4 @@ spi_tt.patch usb_gadget_vbus.patch wm8960.patch +rtc-ds1390.patch