2  * Copyright (C) 2004 Texas Instruments, Inc.
 
   4  * Some parts based tps65010.c:
 
   5  * Copyright (C) 2004 Texas Instruments and
 
   6  * Copyright (C) 2004-2005 David Brownell
 
   8  * Some parts based on tlv320aic24.c:
 
   9  * Copyright (C) by Kai Svahn <kai.svahn@nokia.com>
 
  11  * Changes for interrupt handling and clean-up by
 
  12  * Tony Lindgren <tony@atomide.com> and Imre Deak <imre.deak@nokia.com>
 
  13  * Cleanup and generalized support for voltage setting by
 
  15  * Added support for controlling VCORE and regulator sleep states,
 
  16  * Amit Kucheria <amit.kucheria@nokia.com>
 
  17  * Copyright (C) 2005, 2006 Nokia Corporation
 
  19  * This program is free software; you can redistribute it and/or modify
 
  20  * it under the terms of the GNU General Public License as published by
 
  21  * the Free Software Foundation; either version 2 of the License, or
 
  22  * (at your option) any later version.
 
  24  * This program is distributed in the hope that it will be useful,
 
  25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
  27  * GNU General Public License for more details.
 
  29  * You should have received a copy of the GNU General Public License
 
  30  * along with this program; if not, write to the Free Software
 
  31  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
  34 #include <linux/module.h>
 
  35 #include <linux/i2c.h>
 
  36 #include <linux/interrupt.h>
 
  37 #include <linux/sched.h>
 
  38 #include <linux/mutex.h>
 
  39 #include <linux/workqueue.h>
 
  40 #include <linux/delay.h>
 
  41 #include <linux/rtc.h>
 
  42 #include <linux/bcd.h>
 
  44 #include <asm/mach-types.h>
 
  45 #include <asm/mach/irq.h>
 
  47 #include <asm/arch/gpio.h>
 
  48 #include <asm/arch/menelaus.h>
 
  50 #define DRIVER_NAME                     "menelaus"
 
  52 #define MENELAUS_I2C_ADDRESS            0x72
 
  54 #define MENELAUS_REV                    0x01
 
  55 #define MENELAUS_VCORE_CTRL1            0x02
 
  56 #define MENELAUS_VCORE_CTRL2            0x03
 
  57 #define MENELAUS_VCORE_CTRL3            0x04
 
  58 #define MENELAUS_VCORE_CTRL4            0x05
 
  59 #define MENELAUS_VCORE_CTRL5            0x06
 
  60 #define MENELAUS_DCDC_CTRL1             0x07
 
  61 #define MENELAUS_DCDC_CTRL2             0x08
 
  62 #define MENELAUS_DCDC_CTRL3             0x09
 
  63 #define MENELAUS_LDO_CTRL1              0x0A
 
  64 #define MENELAUS_LDO_CTRL2              0x0B
 
  65 #define MENELAUS_LDO_CTRL3              0x0C
 
  66 #define MENELAUS_LDO_CTRL4              0x0D
 
  67 #define MENELAUS_LDO_CTRL5              0x0E
 
  68 #define MENELAUS_LDO_CTRL6              0x0F
 
  69 #define MENELAUS_LDO_CTRL7              0x10
 
  70 #define MENELAUS_LDO_CTRL8              0x11
 
  71 #define MENELAUS_SLEEP_CTRL1            0x12
 
  72 #define MENELAUS_SLEEP_CTRL2            0x13
 
  73 #define MENELAUS_DEVICE_OFF             0x14
 
  74 #define MENELAUS_OSC_CTRL               0x15
 
  75 #define MENELAUS_DETECT_CTRL            0x16
 
  76 #define MENELAUS_INT_MASK1              0x17
 
  77 #define MENELAUS_INT_MASK2              0x18
 
  78 #define MENELAUS_INT_STATUS1            0x19
 
  79 #define MENELAUS_INT_STATUS2            0x1A
 
  80 #define MENELAUS_INT_ACK1               0x1B
 
  81 #define MENELAUS_INT_ACK2               0x1C
 
  82 #define MENELAUS_GPIO_CTRL              0x1D
 
  83 #define MENELAUS_GPIO_IN                0x1E
 
  84 #define MENELAUS_GPIO_OUT               0x1F
 
  85 #define MENELAUS_BBSMS                  0x20
 
  86 #define MENELAUS_RTC_CTRL               0x21
 
  87 #define MENELAUS_RTC_UPDATE             0x22
 
  88 #define MENELAUS_RTC_SEC                0x23
 
  89 #define MENELAUS_RTC_MIN                0x24
 
  90 #define MENELAUS_RTC_HR                 0x25
 
  91 #define MENELAUS_RTC_DAY                0x26
 
  92 #define MENELAUS_RTC_MON                0x27
 
  93 #define MENELAUS_RTC_YR                 0x28
 
  94 #define MENELAUS_RTC_WKDAY              0x29
 
  95 #define MENELAUS_RTC_AL_SEC             0x2A
 
  96 #define MENELAUS_RTC_AL_MIN             0x2B
 
  97 #define MENELAUS_RTC_AL_HR              0x2C
 
  98 #define MENELAUS_RTC_AL_DAY             0x2D
 
  99 #define MENELAUS_RTC_AL_MON             0x2E
 
 100 #define MENELAUS_RTC_AL_YR              0x2F
 
 101 #define MENELAUS_RTC_COMP_MSB           0x30
 
 102 #define MENELAUS_RTC_COMP_LSB           0x31
 
 103 #define MENELAUS_S1_PULL_EN             0x32
 
 104 #define MENELAUS_S1_PULL_DIR            0x33
 
 105 #define MENELAUS_S2_PULL_EN             0x34
 
 106 #define MENELAUS_S2_PULL_DIR            0x35
 
 107 #define MENELAUS_MCT_CTRL1              0x36
 
 108 #define MENELAUS_MCT_CTRL2              0x37
 
 109 #define MENELAUS_MCT_CTRL3              0x38
 
 110 #define MENELAUS_MCT_PIN_ST             0x39
 
 111 #define MENELAUS_DEBOUNCE1              0x3A
 
 113 #define IH_MENELAUS_IRQS                12
 
 114 #define MENELAUS_MMC_S1CD_IRQ           0       /* MMC slot 1 card change */
 
 115 #define MENELAUS_MMC_S2CD_IRQ           1       /* MMC slot 2 card change */
 
 116 #define MENELAUS_MMC_S1D1_IRQ           2       /* MMC DAT1 low in slot 1 */
 
 117 #define MENELAUS_MMC_S2D1_IRQ           3       /* MMC DAT1 low in slot 2 */
 
 118 #define MENELAUS_LOWBAT_IRQ             4       /* Low battery */
 
 119 #define MENELAUS_HOTDIE_IRQ             5       /* Hot die detect */
 
 120 #define MENELAUS_UVLO_IRQ               6       /* UVLO detect */
 
 121 #define MENELAUS_TSHUT_IRQ              7       /* Thermal shutdown */
 
 122 #define MENELAUS_RTCTMR_IRQ             8       /* RTC timer */
 
 123 #define MENELAUS_RTCALM_IRQ             9       /* RTC alarm */
 
 124 #define MENELAUS_RTCERR_IRQ             10      /* RTC error */
 
 125 #define MENELAUS_PSHBTN_IRQ             11      /* Push button */
 
 126 #define MENELAUS_RESERVED12_IRQ         12      /* Reserved */
 
 127 #define MENELAUS_RESERVED13_IRQ         13      /* Reserved */
 
 128 #define MENELAUS_RESERVED14_IRQ         14      /* Reserved */
 
 129 #define MENELAUS_RESERVED15_IRQ         15      /* Reserved */
 
 131 static void menelaus_work(struct work_struct *_menelaus);
 
 133 struct menelaus_chip {
 
 135         struct i2c_client       *client;
 
 136         struct work_struct      work;
 
 137 #ifdef CONFIG_RTC_DRV_TWL92330
 
 138         struct rtc_device       *rtc;
 
 142         unsigned                vcore_hw_mode:1;
 
 144         void                    (*handlers[16])(struct menelaus_chip *);
 
 145         void                    (*mmc_callback)(void *data, u8 mask);
 
 146         void                    *mmc_callback_data;
 
 149 static struct menelaus_chip *the_menelaus;
 
 151 static int menelaus_write_reg(int reg, u8 value)
 
 153         int val = i2c_smbus_write_byte_data(the_menelaus->client, reg, value);
 
 156                 pr_err(DRIVER_NAME ": write error");
 
 163 static int menelaus_read_reg(int reg)
 
 165         int val = i2c_smbus_read_byte_data(the_menelaus->client, reg);
 
 168                 pr_err(DRIVER_NAME ": read error");
 
 173 static int menelaus_enable_irq(int irq)
 
 177                 the_menelaus->mask2 &= ~(1 << irq);
 
 178                 return menelaus_write_reg(MENELAUS_INT_MASK2,
 
 179                                 the_menelaus->mask2);
 
 181                 the_menelaus->mask1 &= ~(1 << irq);
 
 182                 return menelaus_write_reg(MENELAUS_INT_MASK1,
 
 183                                 the_menelaus->mask1);
 
 187 static int menelaus_disable_irq(int irq)
 
 191                 the_menelaus->mask2 |= (1 << irq);
 
 192                 return menelaus_write_reg(MENELAUS_INT_MASK2,
 
 193                                 the_menelaus->mask2);
 
 195                 the_menelaus->mask1 |= (1 << irq);
 
 196                 return menelaus_write_reg(MENELAUS_INT_MASK1,
 
 197                                 the_menelaus->mask1);
 
 201 static int menelaus_ack_irq(int irq)
 
 204                 return menelaus_write_reg(MENELAUS_INT_ACK2, 1 << (irq - 8));
 
 206                 return menelaus_write_reg(MENELAUS_INT_ACK1, 1 << irq);
 
 209 /* Adds a handler for an interrupt. Does not run in interrupt context */
 
 210 static int menelaus_add_irq_work(int irq,
 
 211                 void (*handler)(struct menelaus_chip *))
 
 215         mutex_lock(&the_menelaus->lock);
 
 216         the_menelaus->handlers[irq] = handler;
 
 217         ret = menelaus_enable_irq(irq);
 
 218         mutex_unlock(&the_menelaus->lock);
 
 223 /* Removes handler for an interrupt */
 
 224 static int menelaus_remove_irq_work(int irq)
 
 228         mutex_lock(&the_menelaus->lock);
 
 229         ret = menelaus_disable_irq(irq);
 
 230         the_menelaus->handlers[irq] = NULL;
 
 231         mutex_unlock(&the_menelaus->lock);
 
 237  * Gets scheduled when a card detect interrupt happens. Note that in some cases
 
 238  * this line is wired to card cover switch rather than the card detect switch
 
 239  * in each slot. In this case the cards are not seen by menelaus.
 
 240  * FIXME: Add handling for D1 too
 
 242 static void menelaus_mmc_cd_work(struct menelaus_chip *menelaus_hw)
 
 245         unsigned char card_mask = 0;
 
 247         reg = menelaus_read_reg(MENELAUS_MCT_PIN_ST);
 
 252                 card_mask |= (1 << 0);
 
 255                 card_mask |= (1 << 1);
 
 257         if (menelaus_hw->mmc_callback)
 
 258                 menelaus_hw->mmc_callback(menelaus_hw->mmc_callback_data,
 
 263  * Toggles the MMC slots between open-drain and push-pull mode.
 
 265 int menelaus_set_mmc_opendrain(int slot, int enable)
 
 269         if (slot != 1 && slot != 2)
 
 271         mutex_lock(&the_menelaus->lock);
 
 272         ret = menelaus_read_reg(MENELAUS_MCT_CTRL1);
 
 274                 mutex_unlock(&the_menelaus->lock);
 
 289         ret = menelaus_write_reg(MENELAUS_MCT_CTRL1, val);
 
 290         mutex_unlock(&the_menelaus->lock);
 
 294 EXPORT_SYMBOL(menelaus_set_mmc_opendrain);
 
 296 int menelaus_set_slot_sel(int enable)
 
 300         mutex_lock(&the_menelaus->lock);
 
 301         ret = menelaus_read_reg(MENELAUS_GPIO_CTRL);
 
 309         ret = menelaus_write_reg(MENELAUS_GPIO_CTRL, ret);
 
 311         mutex_unlock(&the_menelaus->lock);
 
 314 EXPORT_SYMBOL(menelaus_set_slot_sel);
 
 316 int menelaus_set_mmc_slot(int slot, int enable, int power, int cd_en)
 
 320         if (slot != 1 && slot != 2)
 
 325         mutex_lock(&the_menelaus->lock);
 
 327         ret = menelaus_read_reg(MENELAUS_MCT_CTRL2);
 
 333                         val |= (1 << 4) | (1 << 6);
 
 335                         val &= ~((1 << 4) | (1 << 6));
 
 338                         val |= (1 << 5) | (1 << 7);
 
 340                         val &= ~((1 << 5) | (1 << 7));
 
 342         ret = menelaus_write_reg(MENELAUS_MCT_CTRL2, val);
 
 346         ret = menelaus_read_reg(MENELAUS_MCT_CTRL3);
 
 362                 b = menelaus_read_reg(MENELAUS_MCT_CTRL2);
 
 365                 ret = menelaus_write_reg(MENELAUS_MCT_CTRL2, b);
 
 369         /* Disable autonomous shutdown */
 
 371         ret = menelaus_write_reg(MENELAUS_MCT_CTRL3, val);
 
 373         mutex_unlock(&the_menelaus->lock);
 
 376 EXPORT_SYMBOL(menelaus_set_mmc_slot);
 
 378 int menelaus_register_mmc_callback(void (*callback)(void *data, u8 card_mask),
 
 383         the_menelaus->mmc_callback_data = data;
 
 384         the_menelaus->mmc_callback = callback;
 
 385         ret = menelaus_add_irq_work(MENELAUS_MMC_S1CD_IRQ,
 
 386                                     menelaus_mmc_cd_work);
 
 389         ret = menelaus_add_irq_work(MENELAUS_MMC_S2CD_IRQ,
 
 390                                     menelaus_mmc_cd_work);
 
 393         ret = menelaus_add_irq_work(MENELAUS_MMC_S1D1_IRQ,
 
 394                                     menelaus_mmc_cd_work);
 
 397         ret = menelaus_add_irq_work(MENELAUS_MMC_S2D1_IRQ,
 
 398                                     menelaus_mmc_cd_work);
 
 402 EXPORT_SYMBOL(menelaus_register_mmc_callback);
 
 404 void menelaus_unregister_mmc_callback(void)
 
 406         menelaus_remove_irq_work(MENELAUS_MMC_S1CD_IRQ);
 
 407         menelaus_remove_irq_work(MENELAUS_MMC_S2CD_IRQ);
 
 408         menelaus_remove_irq_work(MENELAUS_MMC_S1D1_IRQ);
 
 409         menelaus_remove_irq_work(MENELAUS_MMC_S2D1_IRQ);
 
 411         the_menelaus->mmc_callback = NULL;
 
 412         the_menelaus->mmc_callback_data = 0;
 
 414 EXPORT_SYMBOL(menelaus_unregister_mmc_callback);
 
 416 struct menelaus_vtg {
 
 424 struct menelaus_vtg_value {
 
 429 static int menelaus_set_voltage(const struct menelaus_vtg *vtg, int mV,
 
 430                                 int vtg_val, int mode)
 
 433         struct i2c_client *c = the_menelaus->client;
 
 435         mutex_lock(&the_menelaus->lock);
 
 439         ret = menelaus_read_reg(vtg->vtg_reg);
 
 442         val = ret & ~(((1 << vtg->vtg_bits) - 1) << vtg->vtg_shift);
 
 443         val |= vtg_val << vtg->vtg_shift;
 
 445         dev_dbg(&c->dev, "Setting voltage '%s'"
 
 446                          "to %d mV (reg 0x%02x, val 0x%02x)\n",
 
 447                         vtg->name, mV, vtg->vtg_reg, val);
 
 449         ret = menelaus_write_reg(vtg->vtg_reg, val);
 
 453         ret = menelaus_write_reg(vtg->mode_reg, mode);
 
 455         mutex_unlock(&the_menelaus->lock);
 
 457                 /* Wait for voltage to stabilize */
 
 463 static int menelaus_get_vtg_value(int vtg, const struct menelaus_vtg_value *tbl,
 
 468         for (i = 0; i < n; i++, tbl++)
 
 475  * Vcore can be programmed in two ways:
 
 476  * SW-controlled: Required voltage is programmed into VCORE_CTRL1
 
 477  * HW-controlled: Required range (roof-floor) is programmed into VCORE_CTRL3
 
 480  * Call correct 'set' function accordingly
 
 483 static const struct menelaus_vtg_value vcore_values[] = {
 
 505 int menelaus_set_vcore_sw(unsigned int mV)
 
 508         struct i2c_client *c = the_menelaus->client;
 
 510         val = menelaus_get_vtg_value(mV, vcore_values,
 
 511                                      ARRAY_SIZE(vcore_values));
 
 515         dev_dbg(&c->dev, "Setting VCORE to %d mV (val 0x%02x)\n", mV, val);
 
 517         /* Set SW mode and the voltage in one go. */
 
 518         mutex_lock(&the_menelaus->lock);
 
 519         ret = menelaus_write_reg(MENELAUS_VCORE_CTRL1, val);
 
 521                 the_menelaus->vcore_hw_mode = 0;
 
 522         mutex_unlock(&the_menelaus->lock);
 
 528 int menelaus_set_vcore_hw(unsigned int roof_mV, unsigned int floor_mV)
 
 530         int fval, rval, val, ret;
 
 531         struct i2c_client *c = the_menelaus->client;
 
 533         rval = menelaus_get_vtg_value(roof_mV, vcore_values,
 
 534                                       ARRAY_SIZE(vcore_values));
 
 537         fval = menelaus_get_vtg_value(floor_mV, vcore_values,
 
 538                                       ARRAY_SIZE(vcore_values));
 
 542         dev_dbg(&c->dev, "Setting VCORE FLOOR to %d mV and ROOF to %d mV\n",
 
 545         mutex_lock(&the_menelaus->lock);
 
 546         ret = menelaus_write_reg(MENELAUS_VCORE_CTRL3, fval);
 
 549         ret = menelaus_write_reg(MENELAUS_VCORE_CTRL4, rval);
 
 552         if (!the_menelaus->vcore_hw_mode) {
 
 553                 val = menelaus_read_reg(MENELAUS_VCORE_CTRL1);
 
 554                 /* HW mode, turn OFF byte comparator */
 
 555                 val |= ((1 << 7) | (1 << 5));
 
 556                 ret = menelaus_write_reg(MENELAUS_VCORE_CTRL1, val);
 
 557                 the_menelaus->vcore_hw_mode = 1;
 
 561         mutex_unlock(&the_menelaus->lock);
 
 565 static const struct menelaus_vtg vmem_vtg = {
 
 567         .vtg_reg = MENELAUS_LDO_CTRL1,
 
 570         .mode_reg = MENELAUS_LDO_CTRL3,
 
 573 static const struct menelaus_vtg_value vmem_values[] = {
 
 580 int menelaus_set_vmem(unsigned int mV)
 
 585                 return menelaus_set_voltage(&vmem_vtg, 0, 0, 0);
 
 587         val = menelaus_get_vtg_value(mV, vmem_values, ARRAY_SIZE(vmem_values));
 
 590         return menelaus_set_voltage(&vmem_vtg, mV, val, 0x02);
 
 592 EXPORT_SYMBOL(menelaus_set_vmem);
 
 594 static const struct menelaus_vtg vio_vtg = {
 
 596         .vtg_reg = MENELAUS_LDO_CTRL1,
 
 599         .mode_reg = MENELAUS_LDO_CTRL4,
 
 602 static const struct menelaus_vtg_value vio_values[] = {
 
 609 int menelaus_set_vio(unsigned int mV)
 
 614                 return menelaus_set_voltage(&vio_vtg, 0, 0, 0);
 
 616         val = menelaus_get_vtg_value(mV, vio_values, ARRAY_SIZE(vio_values));
 
 619         return menelaus_set_voltage(&vio_vtg, mV, val, 0x02);
 
 621 EXPORT_SYMBOL(menelaus_set_vio);
 
 623 static const struct menelaus_vtg_value vdcdc_values[] = {
 
 634 static const struct menelaus_vtg vdcdc2_vtg = {
 
 636         .vtg_reg = MENELAUS_DCDC_CTRL1,
 
 639         .mode_reg = MENELAUS_DCDC_CTRL2,
 
 642 static const struct menelaus_vtg vdcdc3_vtg = {
 
 644         .vtg_reg = MENELAUS_DCDC_CTRL1,
 
 647         .mode_reg = MENELAUS_DCDC_CTRL3,
 
 650 int menelaus_set_vdcdc(int dcdc, unsigned int mV)
 
 652         const struct menelaus_vtg *vtg;
 
 655         if (dcdc != 2 && dcdc != 3)
 
 663                 return menelaus_set_voltage(vtg, 0, 0, 0);
 
 665         val = menelaus_get_vtg_value(mV, vdcdc_values,
 
 666                                      ARRAY_SIZE(vdcdc_values));
 
 669         return menelaus_set_voltage(vtg, mV, val, 0x03);
 
 672 static const struct menelaus_vtg_value vmmc_values[] = {
 
 679 static const struct menelaus_vtg vmmc_vtg = {
 
 681         .vtg_reg = MENELAUS_LDO_CTRL1,
 
 684         .mode_reg = MENELAUS_LDO_CTRL7,
 
 687 int menelaus_set_vmmc(unsigned int mV)
 
 692                 return menelaus_set_voltage(&vmmc_vtg, 0, 0, 0);
 
 694         val = menelaus_get_vtg_value(mV, vmmc_values, ARRAY_SIZE(vmmc_values));
 
 697         return menelaus_set_voltage(&vmmc_vtg, mV, val, 0x02);
 
 699 EXPORT_SYMBOL(menelaus_set_vmmc);
 
 702 static const struct menelaus_vtg_value vaux_values[] = {
 
 709 static const struct menelaus_vtg vaux_vtg = {
 
 711         .vtg_reg = MENELAUS_LDO_CTRL1,
 
 714         .mode_reg = MENELAUS_LDO_CTRL6,
 
 717 int menelaus_set_vaux(unsigned int mV)
 
 722                 return menelaus_set_voltage(&vaux_vtg, 0, 0, 0);
 
 724         val = menelaus_get_vtg_value(mV, vaux_values, ARRAY_SIZE(vaux_values));
 
 727         return menelaus_set_voltage(&vaux_vtg, mV, val, 0x02);
 
 729 EXPORT_SYMBOL(menelaus_set_vaux);
 
 731 int menelaus_get_slot_pin_states(void)
 
 733         return menelaus_read_reg(MENELAUS_MCT_PIN_ST);
 
 735 EXPORT_SYMBOL(menelaus_get_slot_pin_states);
 
 737 int menelaus_set_regulator_sleep(int enable, u32 val)
 
 740         struct i2c_client *c = the_menelaus->client;
 
 742         mutex_lock(&the_menelaus->lock);
 
 743         ret = menelaus_write_reg(MENELAUS_SLEEP_CTRL2, val);
 
 747         dev_dbg(&c->dev, "regulator sleep configuration: %02x\n", val);
 
 749         ret = menelaus_read_reg(MENELAUS_GPIO_CTRL);
 
 752         t = ((1 << 6) | 0x04);
 
 757         ret = menelaus_write_reg(MENELAUS_GPIO_CTRL, ret);
 
 759         mutex_unlock(&the_menelaus->lock);
 
 763 /*-----------------------------------------------------------------------*/
 
 765 /* Handles Menelaus interrupts. Does not run in interrupt context */
 
 766 static void menelaus_work(struct work_struct *_menelaus)
 
 768         struct menelaus_chip *menelaus =
 
 769                         container_of(_menelaus, struct menelaus_chip, work);
 
 770         void (*handler)(struct menelaus_chip *menelaus);
 
 775                 isr = (menelaus_read_reg(MENELAUS_INT_STATUS2)
 
 776                                 & ~menelaus->mask2) << 8;
 
 777                 isr |= menelaus_read_reg(MENELAUS_INT_STATUS1)
 
 783                         int irq = fls(isr) - 1;
 
 786                         mutex_lock(&menelaus->lock);
 
 787                         menelaus_disable_irq(irq);
 
 788                         menelaus_ack_irq(irq);
 
 789                         handler = menelaus->handlers[irq];
 
 792                         menelaus_enable_irq(irq);
 
 793                         mutex_unlock(&menelaus->lock);
 
 796         enable_irq(menelaus->client->irq);
 
 800  * We cannot use I2C in interrupt context, so we just schedule work.
 
 802 static irqreturn_t menelaus_irq(int irq, void *_menelaus)
 
 804         struct menelaus_chip *menelaus = _menelaus;
 
 806         disable_irq_nosync(irq);
 
 807         (void)schedule_work(&menelaus->work);
 
 812 /*-----------------------------------------------------------------------*/
 
 815  * The RTC needs to be set once, then it runs on backup battery power.
 
 816  * It supports alarms, including system wake alarms (from some modes);
 
 817  * and 1/second IRQs if requested.
 
 819 #ifdef CONFIG_RTC_DRV_TWL92330
 
 821 #define RTC_CTRL_RTC_EN         (1 << 0)
 
 822 #define RTC_CTRL_AL_EN          (1 << 1)
 
 823 #define RTC_CTRL_MODE12         (1 << 2)
 
 824 #define RTC_CTRL_EVERY_MASK     (3 << 3)
 
 825 #define RTC_CTRL_EVERY_SEC      (0 << 3)
 
 826 #define RTC_CTRL_EVERY_MIN      (1 << 3)
 
 827 #define RTC_CTRL_EVERY_HR       (2 << 3)
 
 828 #define RTC_CTRL_EVERY_DAY      (3 << 3)
 
 830 #define RTC_UPDATE_EVERY        0x08
 
 832 #define RTC_HR_PM               (1 << 7)
 
 834 static void menelaus_to_time(char *regs, struct rtc_time *t)
 
 836         t->tm_sec = BCD2BIN(regs[0]);
 
 837         t->tm_min = BCD2BIN(regs[1]);
 
 838         if (the_menelaus->rtc_control & RTC_CTRL_MODE12) {
 
 839                 t->tm_hour = BCD2BIN(regs[2] & 0x1f) - 1;
 
 840                 if (regs[2] & RTC_HR_PM)
 
 843                 t->tm_hour = BCD2BIN(regs[2] & 0x3f);
 
 844         t->tm_mday = BCD2BIN(regs[3]);
 
 845         t->tm_mon = BCD2BIN(regs[4]) - 1;
 
 846         t->tm_year = BCD2BIN(regs[5]) + 100;
 
 849 static int time_to_menelaus(struct rtc_time *t, int regnum)
 
 853         status = menelaus_write_reg(regnum++, BIN2BCD(t->tm_sec));
 
 857         status = menelaus_write_reg(regnum++, BIN2BCD(t->tm_min));
 
 861         if (the_menelaus->rtc_control & RTC_CTRL_MODE12) {
 
 862                 hour = t->tm_hour + 1;
 
 864                         hour = RTC_HR_PM | BIN2BCD(hour - 12);
 
 866                         hour = BIN2BCD(hour);
 
 868                 hour = BIN2BCD(t->tm_hour);
 
 869         status = menelaus_write_reg(regnum++, hour);
 
 873         status = menelaus_write_reg(regnum++, BIN2BCD(t->tm_mday));
 
 877         status = menelaus_write_reg(regnum++, BIN2BCD(t->tm_mon + 1));
 
 881         status = menelaus_write_reg(regnum++, BIN2BCD(t->tm_year - 100));
 
 887         dev_err(&the_menelaus->client->dev, "rtc write reg %02x, err %d\n",
 
 892 static int menelaus_read_time(struct device *dev, struct rtc_time *t)
 
 894         struct i2c_msg  msg[2];
 
 898         /* block read date and time registers */
 
 899         regs[0] = MENELAUS_RTC_SEC;
 
 901         msg[0].addr = MENELAUS_I2C_ADDRESS;
 
 906         msg[1].addr = MENELAUS_I2C_ADDRESS;
 
 907         msg[1].flags = I2C_M_RD;
 
 908         msg[1].len = sizeof(regs);
 
 911         status = i2c_transfer(the_menelaus->client->adapter, msg, 2);
 
 913                 dev_err(dev, "%s error %d\n", "read", status);
 
 917         menelaus_to_time(regs, t);
 
 918         t->tm_wday = BCD2BIN(regs[6]);
 
 923 static int menelaus_set_time(struct device *dev, struct rtc_time *t)
 
 927         /* write date and time registers */
 
 928         status = time_to_menelaus(t, MENELAUS_RTC_SEC);
 
 931         status = menelaus_write_reg(MENELAUS_RTC_WKDAY, BIN2BCD(t->tm_wday));
 
 933                 dev_err(&the_menelaus->client->dev, "rtc write reg %02x "
 
 934                                 "err %d\n", MENELAUS_RTC_WKDAY, status);
 
 938         /* now commit the write */
 
 939         status = menelaus_write_reg(MENELAUS_RTC_UPDATE, RTC_UPDATE_EVERY);
 
 941                 dev_err(&the_menelaus->client->dev, "rtc commit time, err %d\n",
 
 947 static int menelaus_read_alarm(struct device *dev, struct rtc_wkalrm *w)
 
 949         struct i2c_msg  msg[2];
 
 953         /* block read alarm registers */
 
 954         regs[0] = MENELAUS_RTC_AL_SEC;
 
 956         msg[0].addr = MENELAUS_I2C_ADDRESS;
 
 961         msg[1].addr = MENELAUS_I2C_ADDRESS;
 
 962         msg[1].flags = I2C_M_RD;
 
 963         msg[1].len = sizeof(regs);
 
 966         status = i2c_transfer(the_menelaus->client->adapter, msg, 2);
 
 968                 dev_err(dev, "%s error %d\n", "alarm read", status);
 
 972         menelaus_to_time(regs, &w->time);
 
 974         w->enabled = !!(the_menelaus->rtc_control & RTC_CTRL_AL_EN);
 
 976         /* NOTE we *could* check if actually pending... */
 
 982 static int menelaus_set_alarm(struct device *dev, struct rtc_wkalrm *w)
 
 986         if (the_menelaus->client->irq <= 0 && w->enabled)
 
 989         /* clear previous alarm enable */
 
 990         if (the_menelaus->rtc_control & RTC_CTRL_AL_EN) {
 
 991                 the_menelaus->rtc_control &= ~RTC_CTRL_AL_EN;
 
 992                 status = menelaus_write_reg(MENELAUS_RTC_CTRL,
 
 993                                 the_menelaus->rtc_control);
 
 998         /* write alarm registers */
 
 999         status = time_to_menelaus(&w->time, MENELAUS_RTC_AL_SEC);
 
1003         /* enable alarm if requested */
 
1005                 the_menelaus->rtc_control |= RTC_CTRL_AL_EN;
 
1006                 status = menelaus_write_reg(MENELAUS_RTC_CTRL,
 
1007                                 the_menelaus->rtc_control);
 
1013 #ifdef CONFIG_RTC_INTF_DEV
 
1015 static void menelaus_rtc_update_work(struct menelaus_chip *m)
 
1017         /* report 1/sec update */
 
1018         local_irq_disable();
 
1019         rtc_update_irq(m->rtc, 1, RTC_IRQF | RTC_UF);
 
1023 static int menelaus_ioctl(struct device *dev, unsigned cmd, unsigned long arg)
 
1027         if (the_menelaus->client->irq <= 0)
 
1028                 return -ENOIOCTLCMD;
 
1033                 if (the_menelaus->rtc_control & RTC_CTRL_AL_EN)
 
1035                 the_menelaus->rtc_control |= RTC_CTRL_AL_EN;
 
1038                 if (!(the_menelaus->rtc_control & RTC_CTRL_AL_EN))
 
1040                 the_menelaus->rtc_control &= ~RTC_CTRL_AL_EN;
 
1042         /* 1/second "update" IRQ */
 
1044                 if (the_menelaus->uie)
 
1046                 status = menelaus_remove_irq_work(MENELAUS_RTCTMR_IRQ);
 
1047                 status = menelaus_add_irq_work(MENELAUS_RTCTMR_IRQ,
 
1048                                 menelaus_rtc_update_work);
 
1050                         the_menelaus->uie = 1;
 
1053                 if (!the_menelaus->uie)
 
1055                 status = menelaus_remove_irq_work(MENELAUS_RTCTMR_IRQ);
 
1057                         the_menelaus->uie = 0;
 
1060                 return -ENOIOCTLCMD;
 
1062         return menelaus_write_reg(MENELAUS_RTC_CTRL, the_menelaus->rtc_control);
 
1066 #define menelaus_ioctl  NULL
 
1069 /* REVISIT no compensation register support ... */
 
1071 static const struct rtc_class_ops menelaus_rtc_ops = {
 
1072         .ioctl                  = menelaus_ioctl,
 
1073         .read_time              = menelaus_read_time,
 
1074         .set_time               = menelaus_set_time,
 
1075         .read_alarm             = menelaus_read_alarm,
 
1076         .set_alarm              = menelaus_set_alarm,
 
1079 static void menelaus_rtc_alarm_work(struct menelaus_chip *m)
 
1082         local_irq_disable();
 
1083         rtc_update_irq(m->rtc, 1, RTC_IRQF | RTC_AF);
 
1086         /* then disable it; alarms are oneshot */
 
1087         the_menelaus->rtc_control &= ~RTC_CTRL_AL_EN;
 
1088         menelaus_write_reg(MENELAUS_RTC_CTRL, the_menelaus->rtc_control);
 
1091 static inline void menelaus_rtc_init(struct menelaus_chip *m)
 
1093         int     alarm = (m->client->irq > 0);
 
1095         /* assume 32KDETEN pin is pulled high */
 
1096         if (!(menelaus_read_reg(MENELAUS_OSC_CTRL) & 0x80)) {
 
1097                 dev_dbg(&m->client->dev, "no 32k oscillator\n");
 
1101         /* support RTC alarm; it can issue wakeups */
 
1103                 if (menelaus_add_irq_work(MENELAUS_RTCALM_IRQ,
 
1104                                 menelaus_rtc_alarm_work) < 0) {
 
1105                         dev_err(&m->client->dev, "can't handle RTC alarm\n");
 
1108                 device_init_wakeup(&m->client->dev, 1);
 
1111         /* be sure RTC is enabled; allow 1/sec irqs; leave 12hr mode alone */
 
1112         m->rtc_control = menelaus_read_reg(MENELAUS_RTC_CTRL);
 
1113         if (!(m->rtc_control & RTC_CTRL_RTC_EN)
 
1114                         || (m->rtc_control & RTC_CTRL_AL_EN)
 
1115                         || (m->rtc_control & RTC_CTRL_EVERY_MASK)) {
 
1116                 if (!(m->rtc_control & RTC_CTRL_RTC_EN)) {
 
1117                         dev_warn(&m->client->dev, "rtc clock needs setting\n");
 
1118                         m->rtc_control |= RTC_CTRL_RTC_EN;
 
1120                 m->rtc_control &= ~RTC_CTRL_EVERY_MASK;
 
1121                 m->rtc_control &= ~RTC_CTRL_AL_EN;
 
1122                 menelaus_write_reg(MENELAUS_RTC_CTRL, m->rtc_control);
 
1125         m->rtc = rtc_device_register(DRIVER_NAME,
 
1127                         &menelaus_rtc_ops, THIS_MODULE);
 
1128         if (IS_ERR(m->rtc)) {
 
1130                         menelaus_remove_irq_work(MENELAUS_RTCALM_IRQ);
 
1131                         device_init_wakeup(&m->client->dev, 0);
 
1133                 dev_err(&m->client->dev, "can't register RTC: %d\n",
 
1134                                 (int) PTR_ERR(m->rtc));
 
1135                 the_menelaus->rtc = NULL;
 
1141 static inline void menelaus_rtc_init(struct menelaus_chip *m)
 
1148 /*-----------------------------------------------------------------------*/
 
1150 static struct i2c_driver menelaus_i2c_driver;
 
1152 static int menelaus_probe(struct i2c_client *client)
 
1154         struct menelaus_chip    *menelaus;
 
1157         struct menelaus_platform_data *menelaus_pdata =
 
1158                                         client->dev.platform_data;
 
1161                 dev_dbg(&client->dev, "only one %s for now\n",
 
1166         menelaus = kzalloc(sizeof *menelaus, GFP_KERNEL);
 
1170         i2c_set_clientdata(client, menelaus);
 
1172         the_menelaus = menelaus;
 
1173         menelaus->client = client;
 
1175         /* If a true probe check the device */
 
1176         rev = menelaus_read_reg(MENELAUS_REV);
 
1178                 pr_err(DRIVER_NAME ": device not found");
 
1183         /* Ack and disable all Menelaus interrupts */
 
1184         menelaus_write_reg(MENELAUS_INT_ACK1, 0xff);
 
1185         menelaus_write_reg(MENELAUS_INT_ACK2, 0xff);
 
1186         menelaus_write_reg(MENELAUS_INT_MASK1, 0xff);
 
1187         menelaus_write_reg(MENELAUS_INT_MASK2, 0xff);
 
1188         menelaus->mask1 = 0xff;
 
1189         menelaus->mask2 = 0xff;
 
1191         /* Set output buffer strengths */
 
1192         menelaus_write_reg(MENELAUS_MCT_CTRL1, 0x73);
 
1194         if (client->irq > 0) {
 
1195                 err = request_irq(client->irq, menelaus_irq, IRQF_DISABLED,
 
1196                                   DRIVER_NAME, menelaus);
 
1198                         dev_dbg(&client->dev,  "can't get IRQ %d, err %d\n",
 
1204         mutex_init(&menelaus->lock);
 
1205         INIT_WORK(&menelaus->work, menelaus_work);
 
1207         pr_info("Menelaus rev %d.%d\n", rev >> 4, rev & 0x0f);
 
1209         val = menelaus_read_reg(MENELAUS_VCORE_CTRL1);
 
1213                 menelaus->vcore_hw_mode = 1;
 
1215                 menelaus->vcore_hw_mode = 0;
 
1217         if (menelaus_pdata != NULL && menelaus_pdata->late_init != NULL) {
 
1218                 err = menelaus_pdata->late_init(&client->dev);
 
1223         menelaus_rtc_init(menelaus);
 
1227         free_irq(client->irq, menelaus);
 
1228         flush_scheduled_work();
 
1234 static int __exit menelaus_remove(struct i2c_client *client)
 
1236         struct menelaus_chip    *menelaus = i2c_get_clientdata(client);
 
1238         free_irq(client->irq, menelaus);
 
1240         i2c_set_clientdata(client, NULL);
 
1241         the_menelaus = NULL;
 
1245 static struct i2c_driver menelaus_i2c_driver = {
 
1247                 .name           = DRIVER_NAME,
 
1249         .probe          = menelaus_probe,
 
1250         .remove         = __exit_p(menelaus_remove),
 
1253 static int __init menelaus_init(void)
 
1257         res = i2c_add_driver(&menelaus_i2c_driver);
 
1259                 pr_err(DRIVER_NAME ": driver registration failed\n");
 
1266 static void __exit menelaus_exit(void)
 
1268         i2c_del_driver(&menelaus_i2c_driver);
 
1270         /* FIXME: Shutdown menelaus parts that can be shut down */
 
1273 MODULE_AUTHOR("Texas Instruments, Inc. (and others)");
 
1274 MODULE_DESCRIPTION("I2C interface for Menelaus.");
 
1275 MODULE_LICENSE("GPL");
 
1277 module_init(menelaus_init);
 
1278 module_exit(menelaus_exit);