aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/gpmi-nand
Commit message (Expand)AuthorAge
* Merge tag 'for-linus-20150422' of git://git.infradead.org/linux-mtdLinus Torvalds2015-04-22
|\
| * mtd: nand: gpmi: Check for scan_bbt() errorFabio Estevam2015-03-30
| * mtd: nand: gpmi: fixup return type of wait_for_completion_timeoutNicholas Mc Guire2015-03-30
* | Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jik...Linus Torvalds2015-04-14
|\ \ | |/ |/|
| * treewide: Fix typo in printk messagesMasanari Iida2015-03-06
* | mtd: nand: gpmi: remove deprecated commentBoris BREZILLON2014-12-22
* | mtd: gpmi: Remove noisy error messageFabio Estevam2014-12-22
* | mtd: nand: gpmi: add raw oob access functionsBoris BREZILLON2014-12-01
* | mtd: nand: gpmi: add proper raw access supportBoris BREZILLON2014-12-01
* | mtd: nand: gpmi: add gpmi_copy_bits functionBoris BREZILLON2014-12-01
|/
* mtd: gpmi: make blockmark swapping optionalLothar Waßmann2014-07-28
* mtd: gpmi: remove line breaks from error messages and improve wordingLothar Waßmann2014-07-28
* mtd: gpmi: remove useless (void *) type casts and spaces between type casts a...Lothar Waßmann2014-07-28
* mtd: gpmi: add gpmi support for imx6sxHuang Shijie2014-05-28
* mtd: gpmi: add gpmi_devdata{} to simplify the codeHuang Shijie2014-04-16
* mtd: gpmi: add subpage read supportHuang Shijie2014-03-11
* mtd: gpmi: do not use the mtd->writesizeHuang Shijie2014-03-11
* mtd: gpmi: add sanity check when mapping DMA for read_buf/write_bufHuang Shijie2014-01-28
* mtd: gpmi: allocate a proper buffer for non ECC read/writeHuang Shijie2014-01-28
* mtd: gpmi: change pr_debug to dev_dbgHuang Shijie2014-01-03
* mtd: gpmi: change pr_err to dev_errHuang Shijie2014-01-03
* mtd: gpmi: remove the unnecessary pr_err()Huang Shijie2014-01-03
* mtd: gpmi: use devm_request_irqHuang Shijie2014-01-03
* mtd: gpmi: use devm_ioremap_resourceHuang Shijie2014-01-03
* mtd: gpmi: rename the functions from gpmi_nfc_* to gpmi_nand_*Huang Shijie2014-01-03
* mtd: gpmi: remove the unused lineHuang Shijie2014-01-03
* mtd: gpmi: delete the gpmi_pre_bbt_scanHuang Shijie2014-01-03
* mtd: gpmi: do not use the local array to do the DMA transferHuang Shijie2014-01-03
* mtd: gpmi-lib: Make checkpatch happyFabio Estevam2014-01-03
* mtd: gpmi: Use devm_clk_get()Fabio Estevam2014-01-03
* mtd: gpmi: add a new DT property to use the datasheet's minimum required ECCHuang Shijie2014-01-03
* mtd: gpmi: fix the NULL pointerHuang Shijie2013-11-12
* mtd: gpmi: fix kernel BUG due to racing DMA operationsHuang Shijie2013-11-11
* mtd: gpmi: only scan two chips for imx6Huang Shijie2013-11-11
* mtd: gpmi: Use devm_kzalloc()Fabio Estevam2013-11-07
* mtd: gpmi: imx6: fix the wrong method for checking ready/busyHuang Shijie2013-11-07
* mtd: gpmi: scan two nand chipsHuang Shijie2013-11-07
* mtd: gpmi: use DMA channel 0 for all the nand chipsHuang Shijie2013-11-07
* mtd: gpmi: decouple the chip select from the DMA channelHuang Shijie2013-11-07
* mtd: gpmi: rewrite the gpmi_ecc_write_oob() to support the jffs2Huang Shijie2013-10-27
* mtd: nand: gpmi-nand: janitorial cleanup: (commas after last element of struc...Lothar Waßmann2013-10-27
* mtd: gpmi: fix ECC regressionDavid Woodhouse2013-10-25
* mtd: gpmi: remove the nand_scan()Huang Shijie2013-08-30
* mtd: gpmi: set the BCH's geometry with the ecc infoHuang Shijie2013-08-30
* mtd: nand: gpmi-nand: use more sensible error codes at various placesLothar Waßmann2013-08-30
* mtd: nand: refactor chip->block_markbad interfaceBrian Norris2013-08-30
* mtd: gpmi-nand: don't use devm_pinctrl_get_select_default() in probeWolfram Sang2013-08-05
* mtd: nand: gpmi-nand: remove unnecessary platform_set_drvdata()Jingoo Han2013-08-05
* mtd: gpmi-nand: fix error return from gpmi_get_clks()Michał Mirosław2013-08-05
* mtd: gpmi: move to use generic DMA helperShawn Guo2013-04-04
">+= sprintf(scratch, "ACTION=%s", action_string) + 1; envp [i++] = scratch; scratch += sprintf (scratch, "DEVPATH=%s", devpath) + 1; envp [i++] = scratch; scratch += sprintf(scratch, "SUBSYSTEM=%s", subsystem) + 1; for (j = 0; envp_ext && envp_ext[j]; j++) envp[i++] = envp_ext[j]; /* just reserve the space, overwrite it after kset call has returned */ envp[i++] = seq_buff = scratch; scratch += strlen("SEQNUM=18446744073709551616") + 1; /* let the kset specific function add its stuff */ if (uevent_ops && uevent_ops->uevent) { retval = uevent_ops->uevent(kset, kobj, &envp[i], NUM_ENVP - i, scratch, BUFFER_SIZE - (scratch - buffer)); if (retval) { pr_debug ("%s - uevent() returned %d\n", __FUNCTION__, retval); goto exit; } } /* we will send an event, request a new sequence number */ spin_lock(&sequence_lock); seq = ++uevent_seqnum; spin_unlock(&sequence_lock); sprintf(seq_buff, "SEQNUM=%llu", (unsigned long long)seq); #if defined(CONFIG_NET) /* send netlink message */ if (uevent_sock) { struct sk_buff *skb; size_t len; /* allocate message with the maximum possible size */ len = strlen(action_string) + strlen(devpath) + 2; skb = alloc_skb(len + BUFFER_SIZE, GFP_KERNEL); if (skb) { /* add header */ scratch = skb_put(skb, len); sprintf(scratch, "%s@%s", action_string, devpath); /* copy keys to our continuous event payload buffer */ for (i = 2; envp[i]; i++) { len = strlen(envp[i]) + 1; scratch = skb_put(skb, len); strcpy(scratch, envp[i]); } NETLINK_CB(skb).dst_group = 1; netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); } } #endif /* call uevent_helper, usually only enabled during early boot */ if (uevent_helper[0]) { char *argv [3]; argv [0] = uevent_helper; argv [1] = (char *)subsystem; argv [2] = NULL; call_usermodehelper (argv[0], argv, envp, 0); } exit: kfree(devpath); kfree(buffer); kfree(envp); return retval; } EXPORT_SYMBOL_GPL(kobject_uevent_env); /** * kobject_uevent - notify userspace by ending an uevent * * @action: action that is happening (usually KOBJ_ADD and KOBJ_REMOVE) * @kobj: struct kobject that the action is happening to * * Returns 0 if kobject_uevent() is completed with success or the * corresponding error when it fails. */ int kobject_uevent(struct kobject *kobj, enum kobject_action action) { return kobject_uevent_env(kobj, action, NULL); } EXPORT_SYMBOL_GPL(kobject_uevent); /** * add_uevent_var - helper for creating event variables * @envp: Pointer to table of environment variables, as passed into * uevent() method. * @num_envp: Number of environment variable slots available, as * passed into uevent() method. * @cur_index: Pointer to current index into @envp. It should be * initialized to 0 before the first call to add_uevent_var(), * and will be incremented on success. * @buffer: Pointer to buffer for environment variables, as passed * into uevent() method. * @buffer_size: Length of @buffer, as passed into uevent() method. * @cur_len: Pointer to current length of space used in @buffer. * Should be initialized to 0 before the first call to * add_uevent_var(), and will be incremented on success. * @format: Format for creating environment variable (of the form * "XXX=%x") for snprintf(). * * Returns 0 if environment variable was added successfully or -ENOMEM * if no space was available. */ int add_uevent_var(char **envp, int num_envp, int *cur_index, char *buffer, int buffer_size, int *cur_len, const char *format, ...) { va_list args; /* * We check against num_envp - 1 to make sure there is at * least one slot left after we return, since kobject_uevent() * needs to set the last slot to NULL. */ if (*cur_index >= num_envp - 1) return -ENOMEM; envp[*cur_index] = buffer + *cur_len; va_start(args, format); *cur_len += vsnprintf(envp[*cur_index], max(buffer_size - *cur_len, 0), format, args) + 1; va_end(args); if (*cur_len > buffer_size) return -ENOMEM; (*cur_index)++; return 0; } EXPORT_SYMBOL_GPL(add_uevent_var); #if defined(CONFIG_NET) static int __init kobject_uevent_init(void) { uevent_sock = netlink_kernel_create(NETLINK_KOBJECT_UEVENT, 1, NULL, THIS_MODULE); if (!uevent_sock) { printk(KERN_ERR "kobject_uevent: unable to create netlink socket!\n"); return -ENODEV; } return 0; } postcore_initcall(kobject_uevent_init); #endif #endif /* CONFIG_HOTPLUG */