# To use this file, run in your u-boot tree:
#	git config sendemail.aliasesfile doc/git-mailrc
#	git config sendemail.aliasfiletype mutt
#
# Then when sending patches, you can use:
#	git send-email --to u-boot --cc i2c ...

alias uboot  u-boot@lists.denx.de
alias u-boot uboot

# Maintainer aliases.  Use the same alias here as patchwork to keep
# things simple and easy to look up/coordinate.
alias aaribaud       Albert Aribaud <albert.u.boot@aribaud.net>
alias abiessmann     Andreas Bießmann <andreas@biessmann.org>
alias abrodkin       Alexey Brodkin <alexey.brodkin@synopsys.com>
alias afleming       Andy Fleming <afleming@gmail.com>
alias ag             Anatolij Gustschin <agust@denx.de>
alias alisonwang     Alison Wang <alison.wang@freescale.com>
alias angelo_ts      Angelo Dureghello <angelo@sysam.it>
alias bmeng          Bin Meng <bmeng.cn@gmail.com>
alias danielschwierzeck Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
alias dinh	     Dinh Nguyen <dinguyen@kernel.org>
alias galak          Kumar Gala <galak@kernel.crashing.org>
alias hs             Heiko Schocher <hs@denx.de>
alias ijc            Ian Campbell <ijc+uboot@hellion.org.uk>
alias iwamatsu       Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
alias jaehoon        Jaehoon Chung <jh80.chung@samsung.com>
alias jagan          Jagan Teki <jagan@openedev.com>
alias jasonjin       Jason Jin <jason.jin@freescale.com>
alias jhersh         Joe Hershberger <joe.hershberger@ni.com>
alias jwrdegoede     Hans de Goede <hdegoede@redhat.com>
alias kimphill       Kim Phillips <kim.phillips@freescale.com>
alias luka           Luka Perkov <luka.perkov@sartura.hr>
alias lukma          Lukasz Majewski <l.majewski@samsung.com>
alias macpaul        Macpaul Lin <macpaul@andestech.com>
alias marex          Marek Vasut <marex@denx.de>
alias masahiro       Masahiro Yamada <yamada.masahiro@socionext.com>
alias mateusz        Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
alias maxime	     Maxime Ripard <maxime.ripard@free-electrons.com>
alias monstr         Michal Simek <monstr@monstr.eu>
alias prafulla       Prafulla Wadaskar <prafulla@marvell.com>
alias bobenstein     Przemyslaw Marczak <p.marczak@samsung.com>
alias prom           Minkyu Kang <mk7.kang@samsung.com>
alias rbohmer        Remy Bohmer <linux@bohmer.net>
alias reinhardm      Reinhard Meyer <u-boot@emk-elektronik.de>
alias sbabic         Stefano Babic <sbabic@denx.de>
alias scottwood      Scott Wood <scottwood@freescale.com>
alias sjg            Simon Glass <sjg@chromium.org>
alias smcnutt        Scott McNutt <smcnutt@psyent.com>
alias sonic          Sonic Zhang <sonic.adi@gmail.com>
alias stroese        Stefan Roese <sr@denx.de>
alias trini          Tom Rini <trini@konsulko.com>
alias vapier         Mike Frysinger <vapier@gentoo.org>
alias wd             Wolfgang Denk <wd@denx.de>

# Architecture aliases
alias arch           arc, arm, avr32, bfin, m68k, microblaze, mips, nds32, nios2, powerpc, sandbox, superh, sparc, x86
alias arches         arch

alias arc            uboot, abrodkin

alias arm            uboot, aaribaud
alias at91           uboot, abiessmann
alias davinci        ti
alias imx            uboot, sbabic
alias kirkwood       uboot, prafulla, luka
alias omap           ti
alias pxa            uboot, marex
alias rmobile        uboot, iwamatsu
alias s3c            samsung
alias s5pc           samsung
alias samsung        uboot, prom
alias snapdragon     uboot, mateusz
alias socfpga        uboot, marex, dinh
alias sunxi          uboot, jagan, maxime
alias tegra          uboot, sjg, Tom Warren <twarren@nvidia.com>, Stephen Warren <swarren@nvidia.com>
alias tegra2         tegra
alias ti             uboot, trini
alias uniphier       uboot, masahiro
alias zynq           uboot, monstr
alias rockchip       uboot, sjg, Lin huang <hl@rock-chips.com>
alias avr32          uboot, abiessmann

alias bfin           uboot, vapier, sonic
alias blackfin       bfin

alias m68k           uboot, alisonwang, angelo_ts
alias coldfire       m68k

alias microblaze     uboot, monstr
alias mb             microblaze

alias mips           uboot, danielschwierzeck

alias nds32          uboot, macpaul

alias nios           uboot, Thomas Chou <thomas@wytron.com.tw>, smcnutt
alias nios2          nios

alias powerpc        uboot, afleming, kimphill, galak, stroese, wd
alias ppc            powerpc
alias mpc5xxx        uboot, wd
alias mpc8xx         uboot, wd
alias mpc82xx        uboot, wd
alias mpc83xx        uboot, kimphill
alias mpc85xx        uboot, afleming, galak
alias mpc86xx        uboot, afleming, galak
alias ppc4xx         uboot, stroese

alias sandbox        sjg
alias sb             sandbox

alias sparc          uboot, Francois Retief <fgretief@spaceteq.co.za>

alias superh         uboot, iwamatsu
alias sh             superh

alias x86            uboot, sjg, bmeng

# Subsystem aliases
alias dm             uboot, sjg
alias cfi            uboot, stroese
alias dfu            uboot, lukma
alias eth            uboot, jhersh
alias kerneldoc      uboot, marex
alias fdt            uboot, sjg
alias i2c            uboot, hs
alias kconfig        uboot, masahiro
alias mmc            uboot, jaehoon
alias nand           uboot, scottwood
alias net            uboot, jhersh
alias phy            uboot, jhersh
alias spi            uboot, jagan
alias spmi           uboot, mateusz
alias ubi            uboot, hs
alias usb            uboot, marex
alias video          uboot, ag
alias patman         uboot, sjg
alias buildman       uboot, sjg
alias pmic           uboot, bobenstein
