Merge git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6: avr32: Fix oops on unaligned user access avr32: Add support for Mediama RMTx add-on board for ATNGW100 avr32: Change Atmel ATNGW100 config to add choice of add-on board Fix MIMC200 board LCD init avr32: Fix clash in ATMEL_USART_ flags avr32: remove obsolete hw_interrupt_type avr32: Solves problem with inverted MCI detect pin on Merisc board atmel-mci: Add support for inverted detect pin
This commit is contained in:
@@ -177,6 +177,7 @@ struct atmel_mci {
|
||||
* available.
|
||||
* @wp_pin: GPIO pin used for card write protect sending, or negative
|
||||
* if not available.
|
||||
* @detect_is_active_high: The state of the detect pin when it is active.
|
||||
* @detect_timer: Timer used for debouncing @detect_pin interrupts.
|
||||
*/
|
||||
struct atmel_mci_slot {
|
||||
@@ -196,6 +197,7 @@ struct atmel_mci_slot {
|
||||
|
||||
int detect_pin;
|
||||
int wp_pin;
|
||||
bool detect_is_active_high;
|
||||
|
||||
struct timer_list detect_timer;
|
||||
};
|
||||
@@ -924,7 +926,8 @@ static int atmci_get_cd(struct mmc_host *mmc)
|
||||
struct atmel_mci_slot *slot = mmc_priv(mmc);
|
||||
|
||||
if (gpio_is_valid(slot->detect_pin)) {
|
||||
present = !gpio_get_value(slot->detect_pin);
|
||||
present = !(gpio_get_value(slot->detect_pin) ^
|
||||
slot->detect_is_active_high);
|
||||
dev_dbg(&mmc->class_dev, "card is %spresent\n",
|
||||
present ? "" : "not ");
|
||||
}
|
||||
@@ -1028,7 +1031,8 @@ static void atmci_detect_change(unsigned long data)
|
||||
return;
|
||||
|
||||
enable_irq(gpio_to_irq(slot->detect_pin));
|
||||
present = !gpio_get_value(slot->detect_pin);
|
||||
present = !(gpio_get_value(slot->detect_pin) ^
|
||||
slot->detect_is_active_high);
|
||||
present_old = test_bit(ATMCI_CARD_PRESENT, &slot->flags);
|
||||
|
||||
dev_vdbg(&slot->mmc->class_dev, "detect change: %d (was %d)\n",
|
||||
@@ -1456,6 +1460,7 @@ static int __init atmci_init_slot(struct atmel_mci *host,
|
||||
slot->host = host;
|
||||
slot->detect_pin = slot_data->detect_pin;
|
||||
slot->wp_pin = slot_data->wp_pin;
|
||||
slot->detect_is_active_high = slot_data->detect_is_active_high;
|
||||
slot->sdc_reg = sdc_reg;
|
||||
|
||||
mmc->ops = &atmci_ops;
|
||||
@@ -1477,7 +1482,8 @@ static int __init atmci_init_slot(struct atmel_mci *host,
|
||||
if (gpio_request(slot->detect_pin, "mmc_detect")) {
|
||||
dev_dbg(&mmc->class_dev, "no detect pin available\n");
|
||||
slot->detect_pin = -EBUSY;
|
||||
} else if (gpio_get_value(slot->detect_pin)) {
|
||||
} else if (gpio_get_value(slot->detect_pin) ^
|
||||
slot->detect_is_active_high) {
|
||||
clear_bit(ATMCI_CARD_PRESENT, &slot->flags);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user